<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>stevienova.com</title>
	
	<link>http://blog.stevienova.com</link>
	<description>Homepage of Steve Novoselac</description>
	<lastBuildDate>Fri, 23 Oct 2009 19:45:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<geo:lat>43.095178</geo:lat><geo:long>-89.270408</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Stevienovacom" type="application/rss+xml" /><feedburner:emailServiceId>Stevienovacom</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Stevienovacom" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FStevienovacom" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>SSIS – Custom Control Flow Component – Execute SQL Job And Wait</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/aRL_llzieQs/</link>
		<comments>http://blog.stevienova.com/2009/10/23/ssis-custom-control-flow-component-execute-sql-job-and-wait/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 19:45:06 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Geeky/Programming]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Control Flow]]></category>
		<category><![CDATA[Custom Component]]></category>
		<category><![CDATA[Execute SQL Job]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[SQL Agent]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[VS2005]]></category>
		<category><![CDATA[VS2008]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1345</guid>
		<description>Sometimes you have some pretty complex ETL&amp;#8217;s going in SSIS, and you might have multiple projects/solutions that need to call other SSIS Packages or SQL Agent Jobs and you have a pretty big production going on. You might have an ETL solution that needs to kick off other packages, and you can either import those [...]</description>
			<content:encoded><![CDATA[<p>Sometimes you have some pretty complex ETL&#8217;s going in SSIS, and you might have multiple projects/solutions that need to call other SSIS Packages or SQL Agent Jobs and you have a pretty big production going on. You might have an ETL solution that needs to kick off other packages, and you can either import those into your solution or call them where they lie on the file system/SQL server, etc. You might have to call some SQL agent jobs, and most often they are async calls (you dont need to wait for them to come back) and this works nicely, I do this all the time. The Execute SQL Agent Task in SSIS works nice, or you can just call the SQL statement to execute a job, either way, it kicks off the job and then just comes back successful right away, and doesn&#8217;t care if the job actually succeeds. You might want this in some scenarios, and the built in functionality works great.</p>
<p>But what if you want to just call an existing SQL Agent job and actually wait for the job to finish (success or failure)? There isn&#8217;t anything that I could see built in to SSIS to do this, sp_start_job is asynchronous, so you are out of luck there. I figured I could call sp_start_job, then create a for loop in SSIS and just check the status every X seconds/minutes, but I would have to either make this a package I could use everywhere or reproduce the same logic in multiple solutions, so I shied away from that solution.</p>
<p>What I decided to do was build a custom SSIS control flow task in .NET that will execute a SQL agent job and check the status and wait until it finishes. A disclaimer: This is going to be a lot of code :) also, it could be improved (but what couldn&#8217;t?) &#8211; this was a 1.5-2 hour experiment.</p>
<p>First, I created a VS2008 C# class library. I tried adding a UI to my task, but I couldn&#8217;t get it working so there is some code there for that but it&#8217;s commented out.</p>
<p>here is what my solution looks like:</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/10/Capture.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/10/Capture.JPG" alt="Capture" title="Capture" width="296" height="288" class="alignnone size-full wp-image-1347" /></a></p>
<p>import the correct namespaces:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">Microsoft.SqlServer.Dts.Runtime</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Net</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Net.NetworkInformation</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Xml</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">Microsoft.SqlServer.Dts.Runtime.Design</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Data.SqlClient</span><span style="color: #008000;">;</span></pre></div></div>

<p>Next, you need to create the actual skeleton/wrapper for your component. You can see I have two properties, job name, server name. It could be expanded to have the connection string or use an existing connection in SSIS, I wasn&#8217;t <em>that</em> ambitious. The &#8220;Execute&#8221; method basically just calls some functions and waits for result.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #0600FF;">namespace</span> ExecuteSQLJobAndWaitControlTask
<span style="color: #000000;">&#123;</span>
&nbsp;
    <span style="color: #000000;">&#91;</span>DtsTask<span style="color: #000000;">&#40;</span>
        Description <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Execute SQL Job And Wait&quot;</span>, 
        DisplayName <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Execute SQL Job And Wait&quot;</span>, 
        TaskContact <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Steve Novoselac&quot;</span>,
        TaskType <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;SSIS Helper Task&quot;</span>,
        RequiredProductLevel <span style="color: #008000;">=</span> DTSProductLevel.<span style="color: #0000FF;">None</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> ExecuteSQLJobAndWaitControlTask <span style="color: #008000;">:</span> Task, IDTSComponentPersist
&nbsp;
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> _jobName<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> _serverName<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// The sql job name</span>
        <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> JobName
        <span style="color: #000000;">&#123;</span>
            get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _jobName<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
            set <span style="color: #000000;">&#123;</span> _jobName <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">/// &lt;summary&gt;</span>
        <span style="color: #008080; font-style: italic;">/// The sql server name</span>
        <span style="color: #008080; font-style: italic;">/// &lt;/summary&gt;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> ServerName
        <span style="color: #000000;">&#123;</span>
            get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _serverName<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
            set <span style="color: #000000;">&#123;</span> _serverName <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> DTSExecResult Execute<span style="color: #000000;">&#40;</span>Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log, <span style="color: #FF0000;">object</span> transaction<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">try</span>
            <span style="color: #000000;">&#123;</span>
&nbsp;
                StartJob<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #000000;">System.<span style="color: #0000FF;">Threading</span></span>.<span style="color: #0000FF;">Thread</span>.<span style="color: #0000FF;">Sleep</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">5000</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">do</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #000000;">System.<span style="color: #0000FF;">Threading</span></span>.<span style="color: #0000FF;">Thread</span>.<span style="color: #0000FF;">Sleep</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">5000</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
                <span style="color: #000000;">&#125;</span> <span style="color: #0600FF;">while</span> <span style="color: #000000;">&#40;</span>IsJobRunning<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>DidJobSucceed<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">return</span> DTSExecResult.<span style="color: #0000FF;">Success</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">else</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">return</span> DTSExecResult.<span style="color: #0000FF;">Failure</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>ex.<span style="color: #0000FF;">Message</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">return</span> DTSExecResult.<span style="color: #0000FF;">Failure</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> DTSExecResult Validate<span style="color: #000000;">&#40;</span>Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>_serverName<span style="color: #000000;">&#41;</span> <span style="color: #008000;">||</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>_jobName<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                componentEvents.<span style="color: #0000FF;">FireError</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span>, <span style="color: #666666;">&quot;You must specify a JobName and ServerName in the properties&quot;</span>, <span style="color: #666666;">&quot;&quot;</span>, <span style="color: #666666;">&quot;&quot;</span>, <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">return</span> DTSExecResult.<span style="color: #0000FF;">Failure</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> DTSExecResult.<span style="color: #0000FF;">Success</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">void</span> IDTSComponentPersist.<span style="color: #0000FF;">LoadFromXML</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Xml</span></span>.<span style="color: #0000FF;">XmlElement</span> node, IDTSInfoEvents infoEvents<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>node.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;ExecuteSQLJobAndWaitTask&quot;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Unexpected task element when loading task - {0}.&quot;</span>, <span style="color: #666666;">&quot;ExecuteSQLJobAndWaitTask&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">this</span>._jobName <span style="color: #008000;">=</span> node.<span style="color: #0000FF;">Attributes</span>.<span style="color: #0000FF;">GetNamedItem</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;JobName&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>._serverName <span style="color: #008000;">=</span> node.<span style="color: #0000FF;">Attributes</span>.<span style="color: #0000FF;">GetNamedItem</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ServerName&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">void</span> IDTSComponentPersist.<span style="color: #0000FF;">SaveToXML</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Xml</span></span>.<span style="color: #0000FF;">XmlDocument</span> doc, IDTSInfoEvents infoEvents<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            XmlElement taskElement <span style="color: #008000;">=</span> doc.<span style="color: #0000FF;">CreateElement</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>, <span style="color: #666666;">&quot;ExecuteSQLJobAndWaitTask&quot;</span>, <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            XmlAttribute jobNameAttribute <span style="color: #008000;">=</span> doc.<span style="color: #0000FF;">CreateAttribute</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>, <span style="color: #666666;">&quot;JobName&quot;</span>, <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            jobNameAttribute.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>._jobName.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            taskElement.<span style="color: #0000FF;">Attributes</span>.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>jobNameAttribute<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            XmlAttribute serverNameAttribute <span style="color: #008000;">=</span> doc.<span style="color: #0000FF;">CreateAttribute</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>, <span style="color: #666666;">&quot;ServerName&quot;</span>, <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            serverNameAttribute.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>._serverName.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            taskElement.<span style="color: #0000FF;">Attributes</span>.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>serverNameAttribute<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            doc.<span style="color: #0000FF;">AppendChild</span><span style="color: #000000;">&#40;</span>taskElement<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span></pre></div></div>

<p>And then I have some helper methods, this is where the meat and potatoes are for this task. Now of course I could have the connection string once, etc. Like I said, it was a quick thing :). The heart of it is though, starting the job, checking if it is still running, and then after, if it succeeded. Pretty simple.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">bool</span> DidJobSucceed<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            SqlConnection dbConn <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source=&quot;</span> <span style="color: #008000;">+</span> ServerName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            SqlCommand dbCmd <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;exec msdb.dbo.sp_help_job @job_name = N'&quot;</span> <span style="color: #008000;">+</span> JobName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;' ;&quot;</span>, dbConn<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dbConn.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            SqlDataReader dr <span style="color: #008000;">=</span> dbCmd.<span style="color: #0000FF;">ExecuteReader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dr.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #FF0000;">int</span> status <span style="color: #008000;">=</span> Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>dr<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;last_run_outcome&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dr.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            dbConn.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>status <span style="color: #008000;">==</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> true<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> false<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">bool</span> IsJobRunning<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            SqlConnection dbConn <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source=&quot;</span> <span style="color: #008000;">+</span> ServerName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            SqlCommand dbCmd <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;exec msdb.dbo.sp_help_job @job_name = N'&quot;</span> <span style="color: #008000;">+</span> JobName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;' ;&quot;</span>, dbConn<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dbConn.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            SqlDataReader dr <span style="color: #008000;">=</span> dbCmd.<span style="color: #0000FF;">ExecuteReader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dr.<span style="color: #0000FF;">Read</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #FF0000;">int</span> status <span style="color: #008000;">=</span> Convert.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>dr<span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;current_execution_status&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dr.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            dbConn.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>status <span style="color: #008000;">==</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> true<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> false<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> StartJob<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            SqlConnection dbConn <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source=&quot;</span> <span style="color: #008000;">+</span> ServerName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            SqlCommand dbCmd <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;EXEC dbo.sp_start_job N'&quot;</span> <span style="color: #008000;">+</span> JobName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;' ;&quot;</span>, dbConn<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dbConn.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dbCmd.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            dbConn.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
   <span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now, to install this you need to register it in the GAC (global assembly cache), and then copy to the DTS/Tasks folder. Depending if you have VS2005 or VS2008 (or both) your gacutil path might be different.</p>

<div class="wp_syntax"><div class="code"><pre class="bat" style="font-family:monospace;">cd\
c:
cd C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
gacutil /uf &quot;ExecuteSQLJobAndWaitTask&quot;
gacutil /if &quot;C:\Projects\SSISCustomTasks\ExecuteSQLJobAndWait\bin\Debug\ExecuteSQLJobAndWaitTask.dll&quot;
copy &quot;C:\Projects\SSISCustomTasks\ExecuteSQLJobAndWait\bin\Debug\ExecuteSQLJobAndWaitTask.dll&quot; &quot;C:\Program Files\Microsoft SQL Server\90\DTS\Tasks&quot;</pre></div></div>

<p>I have found once you have done that, you need to actually restart your SSIS service to make it work, but then you can use it in new Visual Studio SSIS packages.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/10/Capture1.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/10/Capture1.JPG" alt="Capture" title="Capture" width="564" height="415" class="alignnone size-full wp-image-1349" /></a></p>
<p>Once you drag it on your package, you can set the JobName and ServerName property (from the properties window &#8211; remember, no GUI). and it should run.</p>
<p>Some notes:</p>
<p>If you kill the job, the SSIS task will fail (obviously). If you kill the SSIS package, the job will keep running. Maybe a future enhancement will be to capture the SSIS package fail/cancel and kill the job. Maybe :)</p>
<p>Attached is the source code for the task (Vs2008 C#) <a href="http://stevienova.com/ExecuteSQLJobAndWait.rar">http://stevienova.com/ExecuteSQLJobAndWait.rar</a></p>
<p>This has been testing with BIDS VS2005. I take no responsibility if this blows up your system, computer, server, the world, etc. </p>
<p>Happy ETL&#8217;ing!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=aRL_llzieQs:kKEtNOids8Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=aRL_llzieQs:kKEtNOids8Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=aRL_llzieQs:kKEtNOids8Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=aRL_llzieQs:kKEtNOids8Q:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=aRL_llzieQs:kKEtNOids8Q:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/aRL_llzieQs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/10/23/ssis-custom-control-flow-component-execute-sql-job-and-wait/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/10/23/ssis-custom-control-flow-component-execute-sql-job-and-wait/</feedburner:origLink></item>
		<item>
		<title>SQL 2005: SSIS – Pushing Data to MySQL using Script Component Destination</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/y1mpsIk8ADo/</link>
		<comments>http://blog.stevienova.com/2009/10/07/sql-2005-ssis-pushing-data-to-mysql-using-script-component-destination/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 22:37:18 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Geeky/Programming]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL 2005]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[SSIS 2005]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1336</guid>
		<description>Sometimes, I just wonder why things that are useful in previous versions of things get removed. In SQL 2000, in DTS, there was an ODBC destination, you could write (insert, update, etc) to a foreign (non MSFT SQL) system easily. DB2 &amp;#8211; no prob, MySQL &amp;#8211; heck yea. For whatever reason, in SQL 2005 Integration [...]</description>
			<content:encoded><![CDATA[<p>Sometimes, I just wonder why things that are useful in previous versions of things get removed. In SQL 2000, in DTS, there was an ODBC destination, you could write (insert, update, etc) to a foreign (non MSFT SQL) system easily. DB2 &#8211; no prob, MySQL &#8211; heck yea. For whatever reason, in SQL 2005 Integration Services (SSIS), that ability was removed (in SQL 2008 SSIS there is an ADO.NET Destination that can update ODBC sources, so they brought some functionality back).</p>
<p>I need to write to a MySQL database pulling data from a SQL Database, using SSIS 2005. What are the options? Well, the best I could come up with was a Script Component Destination in my DataFlow, this is how I did it:</p>
<p>1) Create a new SSIS Package, throw a DataFlow on the Control Flow, Add your connections (let&#8217;s say SourceDB_SQL &#8211; your source data, and then DestDB_MySQL &#8211; your MySQL destination, it needs to be a ADO.NET Connection, you need to install the MySQL connection &#8211; I installed this <a href="http://dev.mysql.com/downloads/connector/odbc/5.1.html">http://dev.mysql.com/downloads/connector/odbc/5.1.html</a>)</p>
<p>2) In your DataFlow, create your OLEDB Source and get your query returning data, throw a Script Component on the Data Flow and make it a Destination.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/10/ms_01.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/10/ms_01.JPG" alt="ms_01" title="ms_01" width="279" height="323" class="alignnone size-full wp-image-1338" /></a></p>
<p>3) Open the Script Component, set your input columns up, and then your Connection Manager</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/10/ms_021.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/10/ms_021.JPG" alt="ms_02" title="ms_02" width="466" height="173" class="alignnone size-full wp-image-1341" /></a></p>
<p>4) Open the actual script, and you just have to add a few lines of code:</p>

<div class="wp_syntax"><div class="code"><pre class="vbnet" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">' Microsoft SQL Server Integration Services user script component</span>
<span style="color: #008080; font-style: italic;">' This is your new script component in Microsoft Visual Basic .NET</span>
<span style="color: #008080; font-style: italic;">' ScriptMain is the entrypoint class for script components</span>
&nbsp;
<span style="color: #0600FF;">Imports</span> System
<span style="color: #0600FF;">Imports</span> System.<span style="color: #0000FF;">Data</span>
<span style="color: #0600FF;">Imports</span> System.<span style="color: #0000FF;">Math</span>
<span style="color: #0600FF;">Imports</span> Microsoft.<span style="color: #0000FF;">SqlServer</span>.<span style="color: #0000FF;">Dts</span>.<span style="color: #0000FF;">Pipeline</span>.<span style="color: #0000FF;">Wrapper</span>
<span style="color: #0600FF;">Imports</span> Microsoft.<span style="color: #0000FF;">SqlServer</span>.<span style="color: #0000FF;">Dts</span>.<span style="color: #0000FF;">Runtime</span>.<span style="color: #0000FF;">Wrapper</span>
<span style="color: #0600FF;">Imports</span> System.<span style="color: #0000FF;">Data</span>.<span style="color: #0000FF;">Odbc</span>
&nbsp;
<span style="color: #FF8000;">Public</span> <span style="color: #0600FF;">Class</span> ScriptMain
    <span style="color: #0600FF;">Inherits</span> UserComponent
&nbsp;
    <span style="color: #0600FF;">Dim</span> mySQLConn <span style="color: #FF8000;">As</span> OdbcConnection
    <span style="color: #0600FF;">Dim</span> sqlCmd <span style="color: #FF8000;">As</span> OdbcCommand
&nbsp;
    <span style="color: #FF8000;">Public</span> <span style="color: #FF8000;">Overrides</span> <span style="color: #0600FF;">Sub</span> AcquireConnections<span style="color: #000000;">&#40;</span><span style="color: #FF8000;">ByVal</span> Transaction <span style="color: #FF8000;">As</span> <span style="color: #FF0000;">Object</span><span style="color: #000000;">&#41;</span>
        mySQLConn <span style="color: #008000;">=</span> <span style="color: #0600FF;">CType</span><span style="color: #000000;">&#40;</span><span style="color: #FF8000;">Me</span>.<span style="color: #0000FF;">Connections</span>.<span style="color: #0000FF;">MySQLDatabase</span>.<span style="color: #0000FF;">AcquireConnection</span><span style="color: #000000;">&#40;</span><span style="color: #FF8000;">Nothing</span><span style="color: #000000;">&#41;</span>, OdbcConnection<span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
&nbsp;
    <span style="color: #FF8000;">Public</span> <span style="color: #FF8000;">Overrides</span> <span style="color: #0600FF;">Sub</span> Input0_ProcessInputRow<span style="color: #000000;">&#40;</span><span style="color: #FF8000;">ByVal</span> Row <span style="color: #FF8000;">As</span> Input0Buffer<span style="color: #000000;">&#41;</span>
&nbsp;
        sqlCmd <span style="color: #008000;">=</span> <span style="color: #FF8000;">New</span> OdbcCommand<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;INSERT INTO steve_test(ShipTo, YearValue) VALUES(&quot;</span> <span style="color: #008000;">&amp;</span> Row.<span style="color: #0000FF;">ShipTo</span> <span style="color: #008000;">&amp;</span> <span style="color: #808080;">&quot;, '&quot;</span> <span style="color: #008000;">&amp;</span> Row.<span style="color: #0000FF;">YearValue</span> <span style="color: #008000;">&amp;</span> <span style="color: #808080;">&quot;')&quot;</span>, mySQLConn<span style="color: #000000;">&#41;</span>
        sqlCmd.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
&nbsp;
    <span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
&nbsp;
    <span style="color: #FF8000;">Public</span> <span style="color: #FF8000;">Overrides</span> <span style="color: #0600FF;">Sub</span> ReleaseConnections<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #FF8000;">Me</span>.<span style="color: #0000FF;">Connections</span>.<span style="color: #0000FF;">MySQLDatabase</span>.<span style="color: #0000FF;">ReleaseConnection</span><span style="color: #000000;">&#40;</span>mySQLConn<span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Sub</span>
<span style="color: #0600FF;">End</span> <span style="color: #0600FF;">Class</span></pre></div></div>

<p>Run it and you are done! Easy. Now you can write data into MySQL using SQL 2005 SSIS (or any ODBC destination if you can get it to work :))</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=y1mpsIk8ADo:6Jwxs10wvHs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=y1mpsIk8ADo:6Jwxs10wvHs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=y1mpsIk8ADo:6Jwxs10wvHs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=y1mpsIk8ADo:6Jwxs10wvHs:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=y1mpsIk8ADo:6Jwxs10wvHs:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/y1mpsIk8ADo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/10/07/sql-2005-ssis-pushing-data-to-mysql-using-script-component-destination/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/10/07/sql-2005-ssis-pushing-data-to-mysql-using-script-component-destination/</feedburner:origLink></item>
		<item>
		<title>Office 2010: Excel 2010, What-If Analysis aka Microsoft Finally has Built in Cube/OLAP Writeback!</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/CwCW9gkKOuk/</link>
		<comments>http://blog.stevienova.com/2009/09/28/office-2010-excel-2010-what-if-analysis-aka-microsoft-finally-has-built-in-cubeolap-writeback/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 15:49:07 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[Cube]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Excel 2010]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[OLAP]]></category>
		<category><![CDATA[PivotTables]]></category>
		<category><![CDATA[What-If Analysis]]></category>
		<category><![CDATA[Writeback]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1323</guid>
		<description>Digging into the blog post from earlier this summer I wanted to see what was new and exciting in Excel 2010.
Recently I have been working on an cube and we want to be able to budget right from the cube. There are also many other cubes/scenarios where the ability to writeback to the cube would [...]</description>
			<content:encoded><![CDATA[<p>Digging into the blog post from <a href="http://blogs.msdn.com/excel/archive/2009/07/16/excel-2010-the-10-000-ft-view.aspx">earlier this summer</a> I wanted to see what was new and exciting in Excel 2010.</p>
<p>Recently I have been working on an cube and we want to be able to budget right from the cube. There are also many other cubes/scenarios where the ability to writeback to the cube would be awesome. Some BI tools have had this for many years! Microsoft had something similar with a Excel 2002/2003 add-in, but it has been removed. Also, there are many 3rd party tools to allow this. You could also write your own macros or VBA/.NET code to do this as well, but what was always missing was the ability to do writeback directly from an Excel (OLAP) PivotTable. With Excel 2010, this functionally finally shows up.</p>
<p>First, you need a cube, and you need to enable writeback on a partition. This will automatically create a table in your database where you have your data warehouse. Lets say you have a table FactBudgets, and you enable writeback, SSAS will create a table WriteTable_Budgets. This is a trivial example I went through to test this functionality, but I just wanted to exhibit the feature of the writeback.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/09/01_writeback.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/01_writeback-300x268.jpg" alt="01_writeback" title="01_writeback" width="300" height="268" class="alignnone size-medium wp-image-1324" /></a></p>
<p>Turn on writeback, deploy and process your SSAS cube, and then open Excel 2010. Connect to your cube, and then in the PivotTable ribbon menu, on options, there is a button to turn on &#8220;What-If Analysis&#8221;. Turn it on. :)<br />
<a href="http://blog.stevienova.com/wp-content/uploads/2009/09/02_whatif.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/02_whatif.JPG" alt="02_whatif" title="02_whatif" width="203" height="97" class="alignnone size-full wp-image-1326" /></a></p>
<p>Once you turn on the setting, you can then begin writing back values to your cube, right from Excel. If you click on a cell in your writeback value, you can just change it. See on the screen shot below, the value I changed, the little purple triangle, tells me it has a changed value from what is in the data source.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/09/03_valuechanged.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/03_valuechanged-300x153.jpg" alt="03_valuechanged" title="03_valuechanged" width="300" height="153" class="alignnone size-medium wp-image-1327" /></a><br />
<a href="http://blog.stevienova.com/wp-content/uploads/2009/09/04_valuechangedmenu.png"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/04_valuechangedmenu-300x178.png" alt="04_valuechangedmenu" title="04_valuechangedmenu" width="300" height="178" class="alignnone size-medium wp-image-1328" /></a></p>
<p>You can see its telling me the value changed, I can Discard the change and other options. After you have your values set, you want to publish them, which you do back on the PivotTable ribbon menu:</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/09/05_publishchanges.png"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/05_publishchanges-300x221.png" alt="05_publishchanges" title="05_publishchanges" width="300" height="221" class="alignnone size-medium wp-image-1329" /></a></p>
<p>As you can see, Microsoft has finally created a viable solution for writing back values into your OLAP cubes without the need for 3rd party software or coding. Finally!</p>
<p>One thing to note, if you try to write back to a value that is in a partition that doesn&#8217;t have writeback enabled, you will get an error.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/09/06_error.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/09/06_error-300x52.jpg" alt="06_error" title="06_error" width="300" height="52" class="alignnone size-medium wp-image-1330" /></a></p>
<p>Now, think of the possibilities with SSAS OLAP writeback and Excel, now that we can actually use it out of the box!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=CwCW9gkKOuk:nb3cymYUztY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=CwCW9gkKOuk:nb3cymYUztY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=CwCW9gkKOuk:nb3cymYUztY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=CwCW9gkKOuk:nb3cymYUztY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=CwCW9gkKOuk:nb3cymYUztY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/CwCW9gkKOuk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/09/28/office-2010-excel-2010-what-if-analysis-aka-microsoft-finally-has-built-in-cubeolap-writeback/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/09/28/office-2010-excel-2010-what-if-analysis-aka-microsoft-finally-has-built-in-cubeolap-writeback/</feedburner:origLink></item>
		<item>
		<title>SSASMeta – C# App to Log Info About SSAS Objects</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/p1T4vBO67iI/</link>
		<comments>http://blog.stevienova.com/2009/08/28/ssasmeta-c-app-to-log-info-about-ssas-objects/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 13:27:14 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Geeky/Programming]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[AMO]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Analysis Services]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1315</guid>
		<description>I manage some servers that have many cubes. OK, a lot of cubes (60+ on one). I needed some way to output a report of last processed time, last schema update, etc. Now, there are about 5 different ways to do this (one being the SSAS Stored Procedure Project), but this is what I came [...]</description>
			<content:encoded><![CDATA[<p>I manage some servers that have many cubes. OK, a lot of cubes (60+ on one). I needed some way to output a report of last processed time, last schema update, etc. Now, there are about 5 different ways to do this (one being the <a href="http://www.codeplex.com/ASStoredProcedures" target="_blank">SSAS Stored Procedure Project</a>), but this is what I came up with. I wrote a 100 line C# app to take a server name, loop through the SSAS DB&#8217;s, cubes, measures, partitions, and dimensions and log info about them.</p>
<p>Here is a c# code snippet of a function that just outputs to the console, the app I have actually logs the info to a SQL Server database and then I can write reports off that.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">     <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> LogSSASInfo<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> serverName<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var server <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Server<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            server.<span style="color: #0000FF;">Connect</span><span style="color: #000000;">&#40;</span>serverName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Database database <span style="color: #0600FF;">in</span> server.<span style="color: #0000FF;">Databases</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>database.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> database.<span style="color: #0000FF;">LastUpdate</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> database.<span style="color: #0000FF;">EstimatedSize</span> <span style="color: #008000;">/</span> <span style="color: #FF0000;">1024</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> database.<span style="color: #0000FF;">CreatedTimestamp</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Cube cube <span style="color: #0600FF;">in</span> database.<span style="color: #0000FF;">Cubes</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;     Cube: &quot;</span> <span style="color: #008000;">+</span> cube.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> cube.<span style="color: #0000FF;">LastProcessed</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> cube.<span style="color: #0000FF;">LastSchemaUpdate</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                    <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>MeasureGroup measureGroup <span style="color: #0600FF;">in</span> cube.<span style="color: #0000FF;">MeasureGroups</span><span style="color: #000000;">&#41;</span>
                    <span style="color: #000000;">&#123;</span>
                        Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;         Measure Group: &quot;</span> <span style="color: #008000;">+</span> measureGroup.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> measureGroup.<span style="color: #0000FF;">LastProcessed</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                        <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Partition partition <span style="color: #0600FF;">in</span> measureGroup.<span style="color: #0000FF;">Partitions</span><span style="color: #000000;">&#41;</span>
                        <span style="color: #000000;">&#123;</span>
                            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;             Partition: &quot;</span> <span style="color: #008000;">+</span> partition.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> partition.<span style="color: #0000FF;">LastProcessed</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                        <span style="color: #000000;">&#125;</span>
                    <span style="color: #000000;">&#125;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Dimension dimension <span style="color: #0600FF;">in</span> database.<span style="color: #0000FF;">Dimensions</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot; Dimension: &quot;</span> <span style="color: #008000;">+</span> dimension.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> dimension.<span style="color: #0000FF;">LastProcessed</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
&nbsp;
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;------------------------------------------------&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            server.<span style="color: #0000FF;">Disconnect</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>           
        <span style="color: #000000;">&#125;</span></pre></div></div>

<p>As you can see, it isn&#8217;t the most elegant code in the world, but it works. In order to get this to work in your project, you need to reference the Microsoft.AnalysisServices assembly.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/08/ssasmeta.JPG"><img src="http://blog.stevienova.com/wp-content/uploads/2009/08/ssasmeta.JPG" alt="ssasmeta" title="ssasmeta" width="226" height="221" class="alignnone size-full wp-image-1319" /></a></p>
<p>Use your imagination, you could make an app wrap that function above and log info for all the SSAS instances on your network. There have been a few times already in the last year where I have found some cube or measure group not updating correctly and a report like the one I can get now will help dealing with that challenge.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=p1T4vBO67iI:3ouP5wdJJiI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=p1T4vBO67iI:3ouP5wdJJiI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=p1T4vBO67iI:3ouP5wdJJiI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=p1T4vBO67iI:3ouP5wdJJiI:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=p1T4vBO67iI:3ouP5wdJJiI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/p1T4vBO67iI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/08/28/ssasmeta-c-app-to-log-info-about-ssas-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/08/28/ssasmeta-c-app-to-log-info-about-ssas-objects/</feedburner:origLink></item>
		<item>
		<title>Excel 2003-2007 Assistant. NO EXCUSES to not upgrade!</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/KbCGISKBqa8/</link>
		<comments>http://blog.stevienova.com/2009/08/24/excel-2003-2007-assistant-no-excuses-to-not-upgrade/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 13:47:47 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Excel 2003]]></category>
		<category><![CDATA[Excel 2007]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[SQL 2005]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1312</guid>
		<description>Last week, the Business Analyst at work sent me a link, Office 2003/2007 Assistant
What the link will show you is the differences in commands between Excel 2003 and 2007, so users can learn how to do things with the Ribbon. 
Excel 2007 really should be used when hitting SQL 2005+ OLAP Cubes, but companies are [...]</description>
			<content:encoded><![CDATA[<p>Last week, the Business Analyst at work sent me a link, <a href="http://office.microsoft.com/assistance/asstvid.aspx?assetid=XT101493291033&#038;vwidth=1044&#038;vheight=788&#038;type=flash&#038;CTT=11&#038;Origin=HA101491511033">Office 2003/2007 Assistant</a></p>
<p>What the link will show you is the differences in commands between Excel 2003 and 2007, so users can learn how to do things with the Ribbon. </p>
<p>Excel 2007 really should be used when hitting SQL 2005+ OLAP Cubes, but companies are reluctant to upgrade because of the &#8220;jolt&#8221; of learning the Ribbon. Not anymore, with that assistant you can find out how to do anything you could in 2003 (not just with PivotTables &#8211; with anything)</p>
<p>What this means, is that there are NO MORE EXCUSES to not upgrade to 2007. Hey, with Office 2010 around the corner &#8211; March 2010, you better get ready for it, and there no time like now to upgrade from 2003!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=KbCGISKBqa8:WNNv7Pi4oDE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=KbCGISKBqa8:WNNv7Pi4oDE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=KbCGISKBqa8:WNNv7Pi4oDE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=KbCGISKBqa8:WNNv7Pi4oDE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=KbCGISKBqa8:WNNv7Pi4oDE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/KbCGISKBqa8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/08/24/excel-2003-2007-assistant-no-excuses-to-not-upgrade/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/08/24/excel-2003-2007-assistant-no-excuses-to-not-upgrade/</feedburner:origLink></item>
		<item>
		<title>Yo Steve, Where You At?</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/cyRXJW8-kYA/</link>
		<comments>http://blog.stevienova.com/2009/08/03/yo-steve-where-you-at/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 23:15:15 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1310</guid>
		<description>Well, I had a good run, like a full week of a blog every day, then sputtered out. I hate blog posts about blogging as much as the next guy, but I feel like I need to write. Between tons of stuff going on at work (Trek World is coming up next week!) &amp;#8211; which [...]</description>
			<content:encoded><![CDATA[<p>Well, I had a good run, like a full week of a blog every day, then sputtered out. I hate blog posts about blogging as much as the next guy, but I feel like I need to write. Between tons of stuff going on at work (Trek World is coming up next week!) &#8211; which means multiple awesome projects coming to fruition and implementation, as well as some person dealings I am well, dealing with, there hasn&#8217;t been much time to get things typed out in blog form. I do have a list of things to blog about though, so it will come, in good time.</p>
<p>Also, I have piped off my old lifestream using soup.io and I am now using posterous at http://stevenovoselac.com , so most everything non tech/geeky/business intelligence/non blog post will go over there.</p>
<p>In other news, I did pick up a Dell Studio box, 64 bit, 1 TB, 8 GB ram. Running Vista right now, running two VM&#8217;s on it, Windows 2008 and a Vista VM, on its own Active Directory. That way, when Win7 comes out I can just keep my VM&#8217;s and be good to go. I also got a free Dell Mini 10 netbook with the deal. Not sure I like it. The resolution is just 1 setting to small (or big) for me. I am sure I will find something to do with it though. </p>
<p>I have to move to a new place, or find one anyway, in the next 2 months, so that is thrown into the mix as well, always something to stress ya out, always :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=cyRXJW8-kYA:x_hTggPnZhQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=cyRXJW8-kYA:x_hTggPnZhQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=cyRXJW8-kYA:x_hTggPnZhQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=cyRXJW8-kYA:x_hTggPnZhQ:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=cyRXJW8-kYA:x_hTggPnZhQ:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/cyRXJW8-kYA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/08/03/yo-steve-where-you-at/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/08/03/yo-steve-where-you-at/</feedburner:origLink></item>
		<item>
		<title>Product Review: Balsamiq Mockups</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/RwjuvECrZcM/</link>
		<comments>http://blog.stevienova.com/2009/07/17/product-review-balsamiq-mockups/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 22:30:00 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Product Reviews]]></category>
		<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Balsamiq Mockups]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Product Review]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Mockups]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1305</guid>
		<description>Have you ever wanted to quickly mockup software, website, iPhone app, etc? Most people do it on paper, or try something in Visio, or Word, or even Excel!!! But they just lack that feeling of what they want you to build. I was looking around on the web and stumbled upon Balsamiq Mockups

I download the [...]</description>
			<content:encoded><![CDATA[<p>Have you ever wanted to quickly mockup software, website, iPhone app, etc? Most people do it on paper, or try something in Visio, or Word, or even Excel!!! But they just lack that feeling of what they want you to build. I was looking around on the web and stumbled upon <a href="http://www.balsamiq.com/" target="_blank">Balsamiq Mockups</a></p>
<p><img src="http://www.balsamiq.com/images/balsamiq_logo2.jpg" width="168" height="40"  /></p>
<p>I download the Adobe Air app pretty quickly and got started, I wanted to see how quickly I could mock up a website I am working on, because there are some new pages and I want just a template, and then be able to quickly mock up what a new page would look like and let the other team members see it without having to code anything. Check this out (this is an example of my site, not the final version):   </p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/07/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.stevienova.com/wp-content/uploads/2009/07/image_thumb3.png" width="550" height="436" /></a> </p>
<p>I did this in less than 5 minutes. I spent more time and refined it to what I wanted, and now I have a template which I can use for new pages, and also a mockup of a report page.</p>
<p>Check out <a href="http://mockupstogo.net/?c=1">http://mockupstogo.net/?c=1</a> to get more items, and see examples. You can mock up pretty much any existing site on the web or app, this software is awesome! I wish I would have had this for the last 8 years doing software development.</p>
<p>There was one thing I couldn’t figure out, which was a bar graph but having the bars as columns, but I am guessing I just don’t know how to rotate it, or I need to download some more mock objects.</p>
<p>If you are looking for some software to easily mock up new projects to clients, or to other users on your team, or whoever, check out this tool, you will find that it is easy to use and allows you to quickly mock up and communicate what you are looking for in an end result to your devs as well as other team members (there are some awesome collaboration tools they have baked in – even if someone doesn’t have balsamiq installed, they can import an XML file into a web version to view what it looks like, tweak it, and email it back to you)</p>
<p>Try it out, and happy mocking! :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=RwjuvECrZcM:K0C6jm54mfo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=RwjuvECrZcM:K0C6jm54mfo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=RwjuvECrZcM:K0C6jm54mfo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=RwjuvECrZcM:K0C6jm54mfo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=RwjuvECrZcM:K0C6jm54mfo:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/RwjuvECrZcM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/07/17/product-review-balsamiq-mockups/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/07/17/product-review-balsamiq-mockups/</feedburner:origLink></item>
		<item>
		<title>Office 2010: Excel 2010 – New Buttons on Ribbon for Pivot Tables – Custom Named Sets!</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/AOaYI1x-S5o/</link>
		<comments>http://blog.stevienova.com/2009/07/16/office-2010-excel-2010-new-buttons-on-ribbon-for-pivot-tables-custom-named-sets/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 11:30:00 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[Excel 2010]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Named Sets]]></category>
		<category><![CDATA[Office 2010]]></category>
		<category><![CDATA[OLAP Pivot Table Extensions]]></category>
		<category><![CDATA[Pivot Tables]]></category>
		<category><![CDATA[VBA]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1301</guid>
		<description>Just this week I blogged about adding Named Sets in VBA. Well lo and behold, in Excel 2010, there is a button “Fields, Items, &amp;#38; Sets” that lets you define your own Named Sets. Either with MDX or based on rows/columns you have on your pivot table
 
Works pretty slick! There goes the need for [...]</description>
			<content:encoded><![CDATA[<p>Just this week <a href="http://blog.stevienova.com/2009/07/12/excel-2007-olap-cubes-customizable-user-defined-named-sets-in-excel-2007-using-vba/" target="_blank">I blogged about adding Named Sets in VBA</a>. Well lo and behold, in Excel 2010, there is a button “Fields, Items, &amp; Sets” that lets you define your own Named Sets. Either with MDX or based on rows/columns you have on your pivot table</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/07/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.stevienova.com/wp-content/uploads/2009/07/image_thumb2.png" width="207" height="96" /></a> </p>
<p>Works pretty slick! There goes the need for the custom VBA solution, which is fine by me. Although I am disappointed you still can’t create your own calculated measures. The <a href="http://www.codeplex.com/OlapPivotTableExtend" target="_blank">OLAP Pivot Table Extensions add-in</a> lets you, so I wonder why the built in functionality still doesn&#8217;t let you.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=AOaYI1x-S5o:3PWdQIg4LFw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=AOaYI1x-S5o:3PWdQIg4LFw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=AOaYI1x-S5o:3PWdQIg4LFw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=AOaYI1x-S5o:3PWdQIg4LFw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=AOaYI1x-S5o:3PWdQIg4LFw:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/AOaYI1x-S5o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/07/16/office-2010-excel-2010-new-buttons-on-ribbon-for-pivot-tables-custom-named-sets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/07/16/office-2010-excel-2010-new-buttons-on-ribbon-for-pivot-tables-custom-named-sets/</feedburner:origLink></item>
		<item>
		<title>T-SQL: Using CROSS APPLY to Turn 2 Queries Into 1</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/T5OKelCmBzo/</link>
		<comments>http://blog.stevienova.com/2009/07/15/t-sql-using-cross-apply-to-turn-2-queries-into-1/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 13:30:46 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Geeky/Programming]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[CROSS APPLY]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL 2005]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1295</guid>
		<description>Parent/Child. Order/Line. Header/Detail. Report/Sub-Report. We have all ran across these database designs and have had to write queries off of them. You usually end up having the parent id, and you need to get the children. Or you have a list of parents and need to loop through them, looking up the children records and [...]</description>
			<content:encoded><![CDATA[<p>Parent/Child. Order/Line. Header/Detail. Report/Sub-Report. We have all ran across these database designs and have had to write queries off of them. You usually end up having the parent id, and you need to get the children. Or you have a list of parents and need to loop through them, looking up the children records and doing something with them. But what if you just want a list of the children id’s (or names, or whatever). Do you really need to loop through the parents and lookup all the children, (and possibly look through those)? You can do JOIN’s and you can get the data in a tablular format, but how do you rollup those children records? </p>
<p>Using the AdventureWorks DB in SQL 2005, an example using Manager/Employee:     </p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #993333; font-weight: bold;">DISTINCT</span> mgr<span style="color: #66cc66;">.</span>ManagerId<span style="color: #66cc66;">,</span> e<span style="color: #66cc66;">.</span>EmployeeId
	<span style="color: #993333; font-weight: bold;">FROM</span> HumanResources<span style="color: #66cc66;">.</span>Employee mgr
	<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> HumanResources<span style="color: #66cc66;">.</span>Employee e <span style="color: #993333; font-weight: bold;">ON</span> mgr<span style="color: #66cc66;">.</span>ManagerId <span style="color: #66cc66;">=</span> e<span style="color: #66cc66;">.</span>ManagerId</pre></div></div>

<p>Results: </p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/07/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.stevienova.com/wp-content/uploads/2009/07/image_thumb.png" width="189" height="396" /></a> </p>
</p>
<p>But really we want to rollup those employees, ending up with one manager/employee record, ex: 3, [4,9,11,158,263,267,270] … for this, try CROSS APPLY</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #993333; font-weight: bold;">DISTINCT</span> ManagerId<span style="color: #66cc66;">,</span> Employees <span style="color: #66cc66;">=</span> <span style="color: #993333; font-weight: bold;">LEFT</span><span style="color: #66cc66;">&#40;</span>emp<span style="color: #66cc66;">.</span>list<span style="color: #66cc66;">,</span> LEN<span style="color: #66cc66;">&#40;</span>emp<span style="color: #66cc66;">.</span>list<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> 
	<span style="color: #993333; font-weight: bold;">FROM</span> HumanResources<span style="color: #66cc66;">.</span>Employee mgr
	<span style="color: #993333; font-weight: bold;">CROSS</span> APPLY
	<span style="color: #66cc66;">&#40;</span>
	<span style="color: #993333; font-weight: bold;">SELECT</span> CONVERT<span style="color: #66cc66;">&#40;</span>VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>EmployeeId<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">','</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #66cc66;">&#91;</span>text<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span> 
		<span style="color: #993333; font-weight: bold;">FROM</span> HumanResources<span style="color: #66cc66;">.</span>Employee e
		<span style="color: #993333; font-weight: bold;">WHERE</span> mgr<span style="color: #66cc66;">.</span>ManagerId <span style="color: #66cc66;">=</span> e<span style="color: #66cc66;">.</span>ManagerId
&nbsp;
		<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> EmployeeID
		<span style="color: #993333; font-weight: bold;">FOR</span> XML PATH<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#41;</span> emp <span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">WHERE</span> mgr<span style="color: #66cc66;">.</span>ManagerId <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span></pre></div></div>

<p>Results:</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/07/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blog.stevienova.com/wp-content/uploads/2009/07/image_thumb1.png" width="430" height="475" /></a> </p>
</p>
<p>As you can see from the results, we rolled up our employees into one record per manager, into a comma delimited list. Think of some possibilities of using CROSS APPLY in your apps or stored procs/reports to reduce the number of queries you might have to write, or number of trips to the database you might have to do. Happy T-SQL’ing :)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=T5OKelCmBzo:NV4e21rb8lY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=T5OKelCmBzo:NV4e21rb8lY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=T5OKelCmBzo:NV4e21rb8lY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=T5OKelCmBzo:NV4e21rb8lY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=T5OKelCmBzo:NV4e21rb8lY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/T5OKelCmBzo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/07/15/t-sql-using-cross-apply-to-turn-2-queries-into-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/07/15/t-sql-using-cross-apply-to-turn-2-queries-into-1/</feedburner:origLink></item>
		<item>
		<title>SSAS 2005/2008: Creating Sub-Cubes Using XMLA, Variables, and Named Query Where Statements</title>
		<link>http://feedproxy.google.com/~r/Stevienovacom/~3/1EXMyKGSFgM/</link>
		<comments>http://blog.stevienova.com/2009/07/14/ssas-20052008-creating-sub-cubes-using-xmla-variables-and-named-query-where-statements/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 13:30:21 +0000</pubDate>
		<dc:creator>Steve Novoselac</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Geeky/Programming]]></category>
		<category><![CDATA[SQLServerPedia Syndication]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server Analysis Services]]></category>
		<category><![CDATA[SSAS]]></category>
		<category><![CDATA[Sub Cubes]]></category>
		<category><![CDATA[XMLA]]></category>

		<guid isPermaLink="false">http://blog.stevienova.com/?p=1269</guid>
		<description>I blogged a few weeks ago about creating Local Cubes with XMLA and ascmd.exe, and that is pretty cool, works great. There are some snags though if you use a server that is 64 bit. You can’t connect to the local cubes via .NET, Excel, or any other way. There are no drivers for local [...]</description>
			<content:encoded><![CDATA[<p>I <a href="http://blog.stevienova.com/2009/06/25/microsoft-bi-creating-local-olap-cubes-using-xmla-and-ascmd-exe/" target="_blank">blogged</a> a few weeks ago about creating Local Cubes with XMLA and ascmd.exe, and that is pretty cool, works great. There are some snags though if you use a server that is 64 bit. You can’t connect to the local cubes via .NET, Excel, or any other way. There are no drivers for local .cub files for 64-bit Windows. What a downer, and I am not going to wait around for them to come out. So in the mean time, you can easily create “sub cubes” as well in SSAS. </p>
<p>One easy way to create sub cubes is using this method. If you have one dimension that all your measures relate to (or two, usually they all relate to date), but say one dimension that relates to everything is Location, DimLocation. And you want to create sub cubes based on a set of locations. Well what I did was this.</p>
<p>1) In my Data Source View (.dsv) in my SSAS solution, I replaced all views/tables with Named Queries. (you will see why later)</p>
<p>2) Once I have my “main” cube deployed (and processed if you like, doesn’t matter), I need to create an XMLA to create a sub cube.</p>
<p><a href="http://blog.stevienova.com/wp-content/uploads/2009/07/b4127dbd2c0563eb093464d312c87269.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="b4127dbd2c0563eb093464d312c87269" border="0" alt="b4127dbd2c0563eb093464d312c87269" src="http://blog.stevienova.com/wp-content/uploads/2009/07/b4127dbd2c0563eb093464d312c87269_thumb.png" width="506" height="196" /></a></p>
<p>3) In the newly created XMLA you have to edit some things</p>
<p>a) I edit the Database name, and Id</p>
<p>b) search for msprop:QueryBuilder=&quot;SpecificQueryBuilder&quot; – this is where your named queries for all your tables are. You can go ahead and add a where statement to each one (eg: WHERE LocationId IN (1,2,3))</p>
<p>c) I usually wrap the whole XMLA in a Batch, and then at the bottom after the &lt;/Create&gt; I put a process XMLA</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;process<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;type<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ProcessFull<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/type<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Object<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;DatabaseID<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>MySubCubeDatabase<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/DatabaseID<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Object<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/process<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>4) Run your XMLA and it should create and process a new SSAS db, creating a pre-sliced version of your original cube.</p>
<p>&#160;</p>
<p>Now, there are other ways to do all this stuff, one of them being &lt;Filter&gt; in XMLA, but I couldn’t get it to work the way I wanted, that is why I went this route, and it just so happens that I am lucky enough for one dim to relate to all measures :) </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=1EXMyKGSFgM:0tBGBK3lBfc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=1EXMyKGSFgM:0tBGBK3lBfc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=1EXMyKGSFgM:0tBGBK3lBfc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?i=1EXMyKGSFgM:0tBGBK3lBfc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Stevienovacom?a=1EXMyKGSFgM:0tBGBK3lBfc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/Stevienovacom?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Stevienovacom/~4/1EXMyKGSFgM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.stevienova.com/2009/07/14/ssas-20052008-creating-sub-cubes-using-xmla-variables-and-named-query-where-statements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.stevienova.com/2009/07/14/ssas-20052008-creating-sub-cubes-using-xmla-variables-and-named-query-where-statements/</feedburner:origLink></item>
	</channel>
</rss>
