<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tim Mitchell - Tim Mitchell</title>
	
	<link>http://www.timmitchell.net</link>
	<description>SQL Server business intelligence blog</description>
	<lastBuildDate>Tue, 18 Jun 2013 21:54:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TimMitchell" /><feedburner:info uri="timmitchell" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Upcoming SQL Saturday Precons</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/DLS7o1iS8Rg/</link>
		<comments>http://www.timmitchell.net/post/2013/06/07/upcoming-sql-saturday-precons/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 11:00:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Presenting]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Data Quality]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[SSIS Performance]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=302</guid>
		<description><![CDATA[I’m happy to announce that I’ll be delivering three, one-day preconference seminars this summer prior to three different SQL Saturday events: Iowa City, Iowa &#8211; Friday, July 26th (before SQL Saturday 239 &#8211; East Iowa) Orlando, Florida – Friday, September 13th (before SQL Saturday 232 – Orlando) Denver, Colorado – … <a href="http://www.timmitchell.net/post/2013/06/07/upcoming-sql-saturday-precons/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/SQLSat.png"><img style="margin-right: 0px; margin-left: 0px; display: inline;" title="SQLSat" alt="SQLSat" src="http://www.timmitchell.net/wp-content/uploads/2013/05/SQLSat_thumb.png" width="242" height="97" align="right" border="0" /></a>I’m happy to announce that I’ll be delivering three, one-day preconference seminars this summer prior to three different SQL Saturday events:</p>
<ul>
<li>Iowa City, Iowa &#8211; Friday, July 26th (before <a href="http://sqlsaturday.com/239/eventhome.aspx">SQL Saturday 239 &#8211; East Iowa</a>)</li>
<li><a href="http://www.eventbrite.com/event/5989134663" target="_blank">Orlando, Florida</a> – Friday, September 13th (before <a href="http://sqlsaturday.com/232/eventhome.aspx" target="_blank">SQL Saturday 232 – Orlando</a>)</li>
<li><a href="http://www.eventbrite.com/event/6701858439" target="_blank">Denver, Colorado</a> – Friday, September 27th (before <a href="http://sqlsaturday.com/190/eventhome.aspx" target="_blank">SQL Saturday 190 – Denver</a>)</li>
</ul>
<p>For each of these events, I’ll be delivering a full day of content entitled “Real World SSIS: A Survival Guide.”  This day of content consists of many lessons that I’ve learned – many of which were learned the hard way &#8211; through my decade or so in this business.  I’ve got lots of demos to illustrate the concepts we’ll be covering.</p>
<p>If you are able to make it to any of these SQL Saturday events, I’d be honored if you’d join me for one of these talks.  Registration is open for all three seminars, as well as each of the SQL Saturday events.  I hope to see you there!</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/DLS7o1iS8Rg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/06/07/upcoming-sql-saturday-precons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/06/07/upcoming-sql-saturday-precons/</feedburner:origLink></item>
		<item>
		<title>Using the SSIS Object Variable as a Result Set Enumerator</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/IrtUcw_mf2M/</link>
		<comments>http://www.timmitchell.net/post/2013/05/28/using-the-ssis-object-variable-as-a-result-set-enumerator/#comments</comments>
		<pubDate>Tue, 28 May 2013 12:00:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Data Warehousing]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=338</guid>
		<description><![CDATA[In the first post in this series, I covered the basics of object typed variables in SQL Server Integration Services, along with a brief examination of some potential use cases.&#160; In this installment, I’m going to illustrate the most common use of object typed variables in SSIS: using an object … <a href="http://www.timmitchell.net/post/2013/05/28/using-the-ssis-object-variable-as-a-result-set-enumerator/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p><img title="tmitch2" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="tmitch2" src="http://www.timmitchell.net/wp-content/uploads/2013/05/tmitch2_thumb.jpg" width="1" height="1">In the <a href="http://www.timmitchell.net/post/2013/03/04/using-object-typed-variables-in-ssis/" target="_blank">first post in this series</a>, I covered the basics of object typed variables in SQL Server Integration Services, along with a brief examination of some potential use cases.&nbsp; In this installment, I’m going to illustrate the most common use of object typed variables in SSIS: using an object variable as an ADO recordset within a loop container to perform iterative logic.</p>
<p>Before we examine the how, let’s talk about the why.&nbsp; Although this is not a design pattern you’ll have to use every day, there are any number of cases that would lend themselves to building and using an ADO recordset enumerator:</p>
<ul>
<li>You need to create a series of export files – one per client – showing that client’s charges for a given period.
<li>You’re dealing with a very large set of data, and/or your processing hardware has limited resources.&nbsp; You want to explore breaking up the workload into smaller chunks to be processed serially.
<li>You are performing a data load operation, and want to design the package in such a way that the loaded data can be immediately used as a validation source in the same package execution.</li>
</ul>
<p>For cases such as these (among others), using this design pattern can be an excellent way to address your ETL needs.</p>
<h4>Design Pattern</h4>
<p>At a high level, this design pattern will have three moving parts:</p>
<ul>
<li>A relational query used to populate the object variable (thus transforming its internal type into an ADO recordset)
<li>A For Each Loop container to loop through the list stored in this variable
<li>Some business logic for each value (or set of values) in each row of the object variable</li>
</ul>
<p>Note that while the first two moving parts I mentioned will be relatively consistent from one package to another, the business logic component will, by nature, vary greatly from one package to another.&nbsp; For the purposes of this post, I’m purposefully keeping my business logic piece simple so as to not distract from the larger design pattern.</p>
<p>For my sample data, I’m&nbsp; going to deal with a data domain that is near and dear to my heart: baseball.&nbsp; In this case I want to get a list of all postseason baseball games, and for each game, create an export file detailing the at-bat statistics for that game.&nbsp; Because I don’t know at design time how many games will be played in the postseason, I can’t simply hard-code my outputs – I need design the ETL in such a way that the data will dictate, at runtime, the number of output files and their respective filenames.</p>
<h4>Configuring and Populate the Object Variable</h4>
<p>The first thing I’ll do in my demo package is set up an SSIS variable, giving it the data type of Object.&nbsp; As shown below, I’m using the SSIS variable named [GameList] as the object typed variable, which will store the ADO recordset list of playoff game IDs that should be processed.&nbsp; Also included is a variable specifying the directory to which the output files will be written, as well as a variable to store the individual game ID for each iteration of the loop.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/variables.png"><img title="variables" style="display: inline" border="0" alt="variables" src="http://www.timmitchell.net/wp-content/uploads/2013/05/variables_thumb.png" width="815" height="146"></a> </p>
<p>Next up, I’m going to add an instance of the Execute SQL Task to the control flow of my package, typing in my query to select the IDs of the playoff games from the database.&nbsp; In the settings for this task shown below, you’ll also see in the highlighted portion that I’ve changed the behavior of the <strong>Result Set</strong> to use <strong>Full result set</strong> (remember the default is None, which would expect no data rows to be returned).&nbsp; By setting this behavior, I’m configuring the task to expect a result set to be returned.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/fullresultset.png"><img title="fullresultset" style="display: inline" border="0" alt="fullresultset" src="http://www.timmitchell.net/wp-content/uploads/2013/05/fullresultset_thumb.png" width="807" height="442"></a> </p>
<p>When I configure the <strong>Result Set</strong> setting in this way, I also need to indicate where those results should end up – specifically, I have to indicate which object typed variable will store these results.&nbsp; In the Result Set tab of the same task, I’ll set the variable name to use the [GameList] variable I set up in the previous step.&nbsp; Also note that the result set name should always be 0 in this case.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/resultsetmapping.png"><img title="resultsetmapping" style="display: inline" border="0" alt="resultsetmapping" src="http://www.timmitchell.net/wp-content/uploads/2013/05/resultsetmapping_thumb.png" width="812" height="428"></a> </p>
<p>What I’ve done here is quite simple, and required no code (other than the SQL statement, of course).&nbsp; What’s happening behind the scenes is a little more complex, however.&nbsp; At runtime when the Execute SQL Task is executed, the [GameList] variable will be instantiated as a new object of type ADO recordset.&nbsp; Note that this action will not change the data type shown in SSIS; even though the in-memory object will be configured as an ADO recordset, it will still show up as an object type variable in the designer.&nbsp; This ADO recordset object will then be loaded with the resulting records, if any, from the query I used in the Execute SQL Task.</p>
<h4>Using the SSIS Variable as an Enumerator</h4>
<p>My next step will be to consume that list, processing each game ID in turn to extract the data I need.&nbsp; To handle this, I’ll add a For Each Loop container to the control flow, and connect the previously configured instance of Execute SQL Task to this new container.&nbsp; When I configure the properties for the loop container, in the <strong>Collection</strong> tab I’m presented with several different options for the enumerator (the list that controls how many times the logic within the loop will be executed).&nbsp; Since I’m working from the ADO recordset list created in the previous step, I’m going to select Foreach ADO Enumerator, and use the variable drop down list to select the [GameList] object variable.&nbsp; I also set the <strong>Enumeration Mode</strong> to use <strong>Rows in the first table</strong>, which is the only option I can use when working with a ADO recordset (note that we have more options when working with an ADO.NET recordset, which I plan to cover in a future post).</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/foreachconfig.png"><img title="foreachconfig" style="display: inline" border="0" alt="foreachconfig" src="http://www.timmitchell.net/wp-content/uploads/2013/05/foreachconfig_thumb.png" width="815" height="693"></a> </p>
<p>With the collection tab set to use my object variable as an enumerator, I’ll next jump over to the <strong>Variable Mappings</strong> tab.&nbsp; It is on this tab where I will align fields in the record set with variables in the package.&nbsp; As shown below, I’m only expecting one column to be returned, and for each iteration of the loop, this value will be stored in the variable named [ThisGameID].&nbsp; As you can see, I’m using index [0] to indicate the position of this value; if the record set is expected to return more than one column, I could add those in as additional column/variable mappings, using the ordinal position of each column to map to the proper SSIS variable.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/variablemapping.png"><img title="variablemapping" style="display: inline" border="0" alt="variablemapping" src="http://www.timmitchell.net/wp-content/uploads/2013/05/variablemapping_thumb2.png" width="805" height="448"></a> </p>
<p>With that done, I’ll add an instance of the Data Flow Task to the loop container configured above, which will complete the work on the control flow:</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/controlflow.png"><img title="controlflow" style="display: inline" border="0" alt="controlflow" src="http://www.timmitchell.net/wp-content/uploads/2013/05/controlflow_thumb.png" width="655" height="587"></a></p>
<h4>Configure the Business Logic in the Data Flow</h4>
<p>Now it’s time to dive into the data flow I just created.&nbsp; Within that data flow, I’ll add a new OLE DB Connection component, the purpose of which will be to retrieve the at-bat statistics for each playoff game. To the output of that source, I will attach an instance of the Flat File Destination, which will be used to send each game’s data to the respective output file. </p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/dataflow.png"><img title="dataflow" style="display: inline" border="0" alt="dataflow" src="http://www.timmitchell.net/wp-content/uploads/2013/05/dataflow_thumb.png" width="797" height="338"></a> </p>
<p>Within the data source, I need to configure the query such that it retrieves data for one and only one game at a time.&nbsp; Since the current game ID value is stored in the [ThisGameID] SSIS variable, I can simply map that variable as a query parameter, so that each execution of this SELECT query will limit the results to only include statistics for the current game ID.&nbsp; As shown below, I’m using a parameter placeholder (the question mark in the query) to indicate the use of a parameter:</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/query.png"><img title="query" style="display: inline" border="0" alt="query" src="http://www.timmitchell.net/wp-content/uploads/2013/05/query_thumb.png" width="810" height="655"></a> </p>
<p>… and when I click the Parameters… button, I can map the SSIS variable containing the game ID to that query parameter:</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/queryparams.png"><img title="queryparams" style="display: inline" border="0" alt="queryparams" src="http://www.timmitchell.net/wp-content/uploads/2013/05/queryparams_thumb.png" width="385" height="269"></a> </p>
<p>I have already configured an instance of the Flat File Destination (and by extension, set up the Flat File Connection Manager) to allow me to write out the results to a file, but how will I create a separate file per game?&nbsp; It’s actually quite easy: by using a simple SSIS expression on the <strong>ConnectionString</strong> property of the Flat File Connection Manager, I can configure the output file name to change on each iteration of the loop by using the game ID value as part of the file name.&nbsp; As shown below, I’m accessing the Expressions collection within my Flat File Connection manager, overriding the static value of the <strong>ConnectionString</strong> property with an interpreted value using the amalgamation of two variables – the directory location I specified earlier, along with the current game ID.&nbsp; Remember that since SSIS variables are evaluated at runtime, the value of the variables can change during execution, thus allowing the use of a single Flat File Connection Manager to write out multiple files during each package execution.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/fileconnstr.png"><img title="fileconnstr" style="display: inline" border="0" alt="fileconnstr" src="http://www.timmitchell.net/wp-content/uploads/2013/05/fileconnstr_thumb.png" width="754" height="307"></a> </p>
<p>Finally, when I execute the configured package, I end up with a few dozen output files – one per playoff game.&nbsp; <em>As a side note, my Texas Rangers were only represented in one of those playoff games from last year.&nbsp; We’ll get ‘em this year.</em>&nbsp; As shown below, each output file is distinctified with the game ID as part of the file name.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/05/outputfiles.png"><img title="outputfiles" style="display: inline" border="0" alt="outputfiles" src="http://www.timmitchell.net/wp-content/uploads/2013/05/outputfiles_thumb2.png" width="510" height="551"></a> </p>
<h4>Conclusion</h4>
<p>Use of the SSIS object typed variable can be a very powerful tool, but it need not be complex.&nbsp; As shown in this example, we can easily leverage the object variable for iteration over a result set without writing a single line of programmatic code.</p>
<p>In the next post in this series, I’ll dig further into object typed SSIS variables, and will explore how to use and manipulate other types of objects not natively represented in SSIS.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/IrtUcw_mf2M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/05/28/using-the-ssis-object-variable-as-a-result-set-enumerator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/05/28/using-the-ssis-object-variable-as-a-result-set-enumerator/</feedburner:origLink></item>
		<item>
		<title>Speaking at PASS Summit 2013</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/0B7cNUpV3Rg/</link>
		<comments>http://www.timmitchell.net/post/2013/05/22/speaking-at-pass-summit-2013/#comments</comments>
		<pubDate>Wed, 22 May 2013 11:30:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[PASS]]></category>
		<category><![CDATA[Presenting]]></category>
		<category><![CDATA[Data Cleansing]]></category>
		<category><![CDATA[Data Quality]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=304</guid>
		<description><![CDATA[I’m happy to announce that I have been selected to present at the SQL PASS Summit in Charlotte, North Carolina this October.&#160;&#160; I’ll be delivering a session entitled “Data Cleansing in SQL Server Integration Services”, in which I’ll cover various ways to detect and cleanse dirty data using tools built … <a href="http://www.timmitchell.net/post/2013/05/22/speaking-at-pass-summit-2013/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>I’m happy to announce that I have been selected to present<a href="http://www.sqlpass.org/summit/2013/" target="_blank"><img width="244" height="81" title="logo_header" align="right" style="margin-right: 0px; margin-left: 0px; display: inline;" alt="logo_header" src="http://www.timmitchell.net/wp-content/uploads/2013/05/logo_header.png" border="0"></a><br />
at the <a href="http://www.sqlpass.org/summit/2013/" target="_blank">SQL PASS Summit</a> in Charlotte, North Carolina this October.&nbsp;&nbsp; I’ll be delivering a session entitled “Data Cleansing in SQL Server Integration Services”, in which I’ll cover various ways to detect and cleanse dirty data using tools built into (or accessible from) SQL Server Integration Services.</p>
<p>This will be my third year to present at the PASS Summit.&nbsp; As always, I’m happy to be able to participate and humbled to be selected to speak.</p>
<p>On a side note, this is the first time in several years that the Summit has been scheduled to be held outside of Seattle, and the first time it will have been held in Charlotte.  Although I have to admit that I&#8217;m going to miss Seattle, I&#8217;m happy that PASS was open to community feedback requesting that the Summit be occasionally held in locations outside of Seattle.</p>
<p>Now we just need to task someone with finding us a karaoke dive bar in Charlotte.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/0B7cNUpV3Rg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/05/22/speaking-at-pass-summit-2013/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/05/22/speaking-at-pass-summit-2013/</feedburner:origLink></item>
		<item>
		<title>Webinar: Scripting and SSIS</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/FA86BjIoIPk/</link>
		<comments>http://www.timmitchell.net/post/2013/05/07/webinar-scripting-and-ssis/#comments</comments>
		<pubDate>Tue, 07 May 2013 20:51:34 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=293</guid>
		<description><![CDATA[Tomorrow at 10am (11am EDT), I&#8217;ll be joining together with my good friend and SSIS Design Patterns coauthor Andy Leonard for a free one hour webinar to discuss scripting in SQL Server Integration Services: Join SQL Server MVP Tim Mitchell and Andy Leonard as they discuss and demonstrate scripting in … <a href="http://www.timmitchell.net/post/2013/05/07/webinar-scripting-and-ssis/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>Tomorrow at 10am (11am EDT), I&#8217;ll be joining together with my good friend and <a href="http://www.amazon.com/dp/1430237716" target="_blank">SSIS Design Patterns</a> coauthor <a href="http://sqlblog.com/blogs/andy_leonard/" target="_blank">Andy Leonard</a> for a free one hour webinar to discuss scripting in SQL Server Integration Services:</p>
<blockquote><p>Join SQL Server MVP Tim Mitchell and Andy Leonard as they discuss and demonstrate scripting in SSIS! In this demo-packed session, two co-authors of the book SSIS Design Patterns share their experience using the Script Task and Script Component to accomplish difficult transformations and improve data integration.</p></blockquote>
<p>You can <a href="http://linchpinpeople.enterthemeeting.com/m/GKWLXDZB" target="_blank">register online here</a>.  We look forward to seeing you tomorrow!</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/FA86BjIoIPk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/05/07/webinar-scripting-and-ssis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/05/07/webinar-scripting-and-ssis/</feedburner:origLink></item>
		<item>
		<title>Colorado speaking tour</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/NviBU-bALI4/</link>
		<comments>http://www.timmitchell.net/post/2013/03/11/colorado-speaking-tour-2/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 13:30:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Presenting]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=287</guid>
		<description><![CDATA[I’m happy to announce that I’ll be doing a tour of the 4 SQL Server user groups in central Colorado next week.&#160; I’ll be speaking at these four user groups: Monday (3/18): Northern Colorado Database Professionals Tuesday (3/19): Boulder SQL Server User Group Wednesday (3/20): Colorado Springs SQL Server User … <a href="http://www.timmitchell.net/post/2013/03/11/colorado-speaking-tour-2/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>I’m happy to announce that I’ll be doing a tour of the 4 SQL Server user groups in central Colorado next week.&nbsp; I’ll be speaking at these four user groups:</p>
<p>Monday (3/18): <a href="http://nocodp.org/" target="_blank">Northern Colorado Database Professionals</a></p>
<p>Tuesday (3/19): <a href="http://www.BoulderSql.org" target="_blank">Boulder SQL Server User Group</a></p>
<p>Wednesday (3/20): <a href="http://www.springssql.org" target="_blank">Colorado Springs SQL Server User Group</a></p>
<p>Thursday (3/21): <a href="http://denver.sqlpass.org/" target="_blank">Denver SQL Server User Group</a></p>
<p>At each of these user group meetings, I’ll be delivering a session entitled “When ETL Goes Bad: Handling Errors and Anomalies in SSIS”.&nbsp; This is the second such tour that I’ve done: two years ago I made trip up there and spoke at 3 of these user groups.&nbsp; It’s always a pleasure to visit this area – the Colorado SQL community has a lot of great people, and I’ve got several friends in the area that I hope to see.</p>
<p>This will be a working trip, too.&nbsp; I’ve got a client in the Denver area that I’ll be working with during the week, so I expect it to be a very packed week.&nbsp; I’m taking the day off on Friday and am staying over until Sunday morning, so I should have two full days to squeeze in some skiing while I’m there.</p>
<p>If you’re in the area, please stop by one of the user group meetings and say hello.&nbsp; And if you’re up for some skiing on Friday or Saturday, let me know <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.timmitchell.net/wp-content/uploads/2013/03/wlEmoticon-smile.png">.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/NviBU-bALI4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/03/11/colorado-speaking-tour-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/03/11/colorado-speaking-tour-2/</feedburner:origLink></item>
		<item>
		<title>Business Intelligence Projects now supported in Visual Studio 2012</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/eg6fkFLBxVM/</link>
		<comments>http://www.timmitchell.net/post/2013/03/06/business-intelligence-projects-now-supported-in-visual-studio-2012/#comments</comments>
		<pubDate>Wed, 06 Mar 2013 21:20:34 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=284</guid>
		<description><![CDATA[Since the release of Visual Studio 2012, business intelligence developers have been limited in how much they could use this tool due to the fact that it did not support BI project types (SSIS, SSAS, and SSRS).&#160; Today, that limitation is now gone with the release by Microsoft of SQL … <a href="http://www.timmitchell.net/post/2013/03/06/business-intelligence-projects-now-supported-in-visual-studio-2012/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>Since the release of Visual Studio 2012, business intelligence developers have been limited in how much they could use this tool due to the fact that it did not support BI project types (SSIS, SSAS, and SSRS).&nbsp; Today, that limitation is now gone with the release by Microsoft of <a href="http://www.microsoft.com/download/details.aspx?id=36843" target="_blank">SQL Server Data Tools – Business Intelligence for Visual Studio 2012</a>.&nbsp; With this release, BI professionals may now fully move onto Visual Studio 2012 for SQL Server 2012 project initiatives.</p>
<p>You can read more about this release on the <a href="http://blogs.msdn.com/b/sqlrsteamblog/archive/2013/03/06/sql-server-data-tools-business-intelligence-for-visual-studio-2012-released-online.aspx" target="_blank">SSRS team blog</a> and <a href="http://blogs.msdn.com/b/analysisservices/archive/2013/03/06/sql-server-data-tools-business-intelligence-for-visual-studio-2012-released-online.aspx" target="_blank">SSAS team blog</a>, or download the code from the <a href="http://www.microsoft.com/download/details.aspx?id=36843" target="_blank">Microsoft website</a>.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/eg6fkFLBxVM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/03/06/business-intelligence-projects-now-supported-in-visual-studio-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/03/06/business-intelligence-projects-now-supported-in-visual-studio-2012/</feedburner:origLink></item>
		<item>
		<title>Using Object Typed Variables in SSIS</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/mlP_y1ny9cM/</link>
		<comments>http://www.timmitchell.net/post/2013/03/04/using-object-typed-variables-in-ssis/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 12:15:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=279</guid>
		<description><![CDATA[Note: This will be the first post in a short series on using Object typed variables in SQL Server Integration Services. When defining variables in SSIS, the ETL developer has several data type options to choose from depending on the information to be stored in each variable.  Included in the … <a href="http://www.timmitchell.net/post/2013/03/04/using-object-typed-variables-in-ssis/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p><em>Note: This will be the first post in a short series on using Object typed variables in SQL Server Integration Services.</em></p>
<p>When defining variables in SSIS, the ETL developer has several data type options to choose from depending on the information to be stored in each variable.  Included in the options are String, Boolean, Char, DateTime, and several flavors and sizes of Int.  However, there’s another variable data type that is very handy but also underutilized: the Object data type.</p>
<p><a href="http://www.timmitchell.net/wp-content/uploads/2013/03/fig1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="fig1" alt="fig1" src="http://www.timmitchell.net/wp-content/uploads/2013/03/fig1_thumb.png" width="585" height="84" border="0" /></a></p>
<h3>Why Object Variables?</h3>
<p>Variables with a data type of Object are the most flexible variables in SSIS.  Data types such as Int, String, and DateType are designed to store just one type of data; however, an Object typed SSIS variable can store almost any type of data, even information that can’t otherwise be represented in Integration Services.  In most cases, SSIS doesn’t even have to be configured to know what type of data you’re storing in an Object typed variable – usually, it can simply pass the value along the wire as a bunch of bits without knowing or caring what’s in there.</p>
<p>When considering the use of Object typed variables in SSIS, I’ll give the same disclaimer that I give for using script tasks/components in SSIS: <em>Just because you can doesn’t mean you should</em>.  If a native data type will work to store any possible value for a particular variable, by all means, don’t complicate your code by adding unnecessary moving parts.  Use Object typed variables only when a native type won’t do – otherwise, stick to the well-worn path.</p>
<h3>Common Uses</h3>
<p>There are a few cases that come to mind that lend themselves to using Object typed variables in SSIS:</p>
<ul>
<li><em><strong>Iterating over a result set</strong></em>.  This is probably the most common and well-documented use of Object variable, as well as the easiest to implement as it requires no manual coding.  This pattern will allow you to retrieve a set of data from a database, and then perform some operation for each row in that result set.  I’ll work through the mechanics of how to do this in my next post.</li>
<li><strong><em>Handling binary data</em></strong>.  A common example of this is extracting binary data from or writing binary data to a VARBINARY field in a relational database.  If you need an interim storage mechanism in which this binary data should be stored, and Object variable can be a good solution.  In this case, the ETL pipeline doesn’t necessarily need to be aware of what is stored in the Object typed variable .</li>
<li><strong><em>Creating or consuming binary data in SSIS</em></strong>.  Let’s say you need to either generate or process binary data as part of your ETL.  For example, you might need to retrieve a JPEG or PNG file from the file system and write it into a relational database, or retrieve a binary object from a database and process the various elements of that object.  By storing said data in an Object typed variable, you can directly write to or read from this variable within your code.</li>
</ul>
<h3>Risks and challenges</h3>
<p>Naturally, with a construct as flexible as an Object typed variables, there are a few challenges to be aware of when considering when and how to use objects in your SSIS packages.  Among the risks:</p>
<ul>
<li><strong><em>Some coding required</em></strong>.  In many cases, especially when you’re processing the information contained in the Object typed variable (as opposed to simply passing the value through from a source to a destination), you’re going to have to write some code to address that object.</li>
<li><strong><em>SSIS expressions not allowed</em></strong>.  Because they are designed to store a variety of information structures, Object typed variables cannot be used in an SSIS expression.  Even if the underlying data stored in the variable is of a type that could be stored in a native SSIS type, attempting to add an Object typed variable to an SSIS expression will throw an error.</li>
<li><strong><em>Debugging challenges</em></strong>. If you overflow an Int32, or happen to truncate a string in SSIS, you’ll get a (mostly) friendly error message telling you what went wrong.  Often, when dealing with Object typed variables, you don’t get that luxury in SSIS.</li>
</ul>
<h3>Conclusion</h3>
<p>Object typed variables in SQL Server Integration Services allow a great deal of flexibility when dealing with atypical data structures in the ETL cycle.  Although they are not as commonly used as simple native types, Object typed variables can make otherwise difficult ETL tasks easier.</p>
<p>In my experience, I’ve found that Object typed variables are sometime avoided in SSIS packages simply because they’re misunderstood or believed to be too difficult to use.  In the next few posts in this series, I’ll illustrate how the Object variable can be leveraged in your SSIS package by demonstrating a few use cases where Object typed variables in SSIS are appropriate.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/mlP_y1ny9cM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/03/04/using-object-typed-variables-in-ssis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/03/04/using-object-typed-variables-in-ssis/</feedburner:origLink></item>
		<item>
		<title>Dust Off That Resume</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/G86yVM8HN00/</link>
		<comments>http://www.timmitchell.net/post/2013/02/28/dust-off-that-resume/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 13:10:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=274</guid>
		<description><![CDATA[Since I started regularly attending SQL Saturday events some five years ago, I’ve sat in on a number of professional development sessions by Andy Warren, Buck Woody, Don Gabor, and others.  Each one offered different bits of advice based on his or her own experience, but there was an overriding … <a href="http://www.timmitchell.net/post/2013/02/28/dust-off-that-resume/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>Since I started regularly attending SQL Saturday events some five years ago, I’ve sat in on a number of professional development sessions by <a href="http://www.sqlandy.com/" target="_blank">Andy Warren</a>, <a href="http://www.buckwoody.com/" target="_blank">Buck Woody</a>, <a href="http://www.dongabor.com/" target="_blank">Don Gabor</a>, and others.  Each one offered different bits of advice based on his or her own experience, but there was an overriding theme in all of them: Don’t wait until you need a job to start grooming yourself as a candidate.  Start building your network right now, they would all advise, regardless of your current employment status.  Push yourself to learn, especially where you see a shortage of skilled workers.  Stay visible, stay relevant.</p>
<p>But what about that resume?  After all, the resume is just a very small piece of the big picture… a document that be easily thrown together as soon as you need it – right?  (Note: If you nodded after that last sentence, please, keep reading.)</p>
<h3><a href="http://www.flickr.com/photos/brymo/2585643891/" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;" title="2585643891_dc3e1b8c4c_n" alt="2585643891_dc3e1b8c4c_n" src="http://www.timmitchell.net/wp-content/uploads/2013/02/2585643891_dc3e1b8c4c_n.jpg" width="244" height="164" align="left" border="0" /></a>“Tell me about yourself…”</h3>
<p>Writing an effective resume isn’t easy.  Most people think writing about themselves is easy until they actually go about doing it.  To describe oneself in a way that is flattering but not overly boastful, colorful enough to be interesting yet still truthful, while keeping the description to one or two pages at most, takes a great deal of time and concentration. Sadly, I see some resumes that appear to be an afterthought – just a means to an end, without much planning or proofreading involved.</p>
<p>Resumes that were thrown together at the last minute have several telltale signs:</p>
<ul>
<li>They enumerate every piece of software or hardware you ever touched, without describing how you used said hardware or software to solve actual problems.</li>
<li>They are full of filler phrases like “dynamic”, “uniquely qualified”, “fast learner”, “track record”, and “progressive”.</li>
<li>They contain too many errors in grammar or spelling.  (How many is too many? Any number greater than zero.)</li>
<li>After I read the whole resume, I still have no idea who you are or what you can do for the company.</li>
</ul>
<p>My friend <a href="http://www.sqlservercentral.com/blogs/steve_jones/" target="_blank">Steve Jones</a> delivered a professional development presentation some time back in which he recommended that everyone touch their resume at least once per quarter, regardless of whether they were actually looking for a new job.  I believed in that advice so strongly that I’ve repeated it numerous times since.  However, like an <a href="http://www.theheart.org/article/1300255.do" target="_blank">out-of-shape cardiologist</a>, I’ve been quite adept at ignoring my own advice.  When I recently needed a current copy of my resume for a training initiative, I discovered that I had not updated this document in over three years.  I succumbed to the thought that “I’ve got a good job, I’m not looking to make a move, so it can wait” and let the information go stale.</p>
<h3><a href="http://www.flickr.com/photos/wikithreads/5217079666/" target="_blank"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="5217079666_076cdc469a_m" alt="5217079666_076cdc469a_m" src="http://www.timmitchell.net/wp-content/uploads/2013/02/5217079666_076cdc469a_m.jpg" width="180" height="244" align="right" border="0" /></a>But I’m not looking for a job…</h3>
<p>Is keeping your resume up to date really necessary, unless you are (or expect to soon be) looking to make a career move?  I submit that it is important, for several reasons:</p>
<ul>
<li>A properly written resume takes time to create.  Don’t allow yourself to be sucked into thinking that you can spent an hour or two to create a superb resume.  At a minimum, you’re going to need several days to get it right.  A resume isn’t ready to be sent to a prospective employer until you’ve gone over it, word by word, to make sure it’s perfect.  Write your resume, put it down for a few days, and come back and reread it to be sure it really tells a story.  You should engage others as well – get as much feedback as possible before you finalize it.  These things take time!</li>
<li>You might not be looking for a job today, but you might be tomorrow.  Let’s face it – for those of us in the ranks of full-time employment, we’re just one really bad day away from joblessness.  Anyone who works for someone else could, on any given day, find himself out of work due to a high-profile error, an unforeseen downturn in business, a personality conflict, or for no reason at all (in many states).  If you find yourself suddenly and unexpectedly looking for a job, you shouldn’t let a stale resume slow down your job search.</li>
<li>Your career changes faster than you think, and it’s easy to lose track of those changes.  During the three years that I ignored my resume, I had contributed to two books, was elected to the board of my local user group, received the Microsoft MVP award three consecutive years, and learned several new technologies.  What I thought would be an easy task of documenting three years worth of career changes turned out to be much more work than I expected.  Especially in high-tech fields such as ours, careers can evolve quickly, and an up-to-date resume should reflect those changes.</li>
<li>You occasionally need an up-to-date resume for reasons other than getting a job.  At a previous job, I was asked on a few occasions to provide a copy of my resume for the benefit of potential clients of my employer – these prospects wanted to know the kind of people they’d be working with in case my employer was selected as their service provider.  Further, some extracurricular activities (community board service, authorship opportunities, etc.) require the candidate to produce a current resume.</li>
</ul>
<h3>Conclusion</h3>
<p>Keeping your resume up to date takes time, and it’s even harder to motivate yourself to keep current if you’re not looking for a job.  But in the same way you continue learning and networking while not actively shopping for a new position, it’s beneficial to keep your resume polished and ready to go.</p>
<p><em>Side note: If you’re a senior BI professional and are looking for a new challenge, why don’t you send me a copy of that freshly-updated resume?  <a href="http://www.artisconsulting.com" target="_blank">My employer</a> is hiring, and it’s a great place to work!</em></p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/G86yVM8HN00" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/02/28/dust-off-that-resume/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/02/28/dust-off-that-resume/</feedburner:origLink></item>
		<item>
		<title>Erin Welker joins Artis Consulting</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/6w7TvXuoj4M/</link>
		<comments>http://www.timmitchell.net/post/2013/02/08/erin-welker-joins-artis-consulting/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 12:45:00 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Artis Consulting]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=271</guid>
		<description><![CDATA[Earlier this week, my employer, Artis Consulting, welcomed a new addition to our team.&#160; Technical expert Erin Welker (b&#124;t), a very well known and experienced business intelligence professional, has joined the BI practice here at Artis.&#160; Erin brings a great deal to the table – she has been a SQL … <a href="http://www.timmitchell.net/post/2013/02/08/erin-welker-joins-artis-consulting/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>Earlier this week, my employer, <a href="http://www.artisconsulting.com" target="_blank">Artis Consulting</a>, welcomed a new addition to our team.&nbsp; Technical expert Erin Welker (<a href="http://sqlblog.com/blogs/erin_welker/default.aspx" target="_blank">b</a>|<a href="https://twitter.com/sqlbigirl" target="_blank">t</a>), a very well known and experienced business intelligence professional, has joined the BI practice here at Artis.&nbsp; Erin brings a great deal to the table – she has been a SQL Server BI consultant for a number of years, has served the community in various capacities (including serving on the PASS board of directors), is a board member for the <a href="http://www.ntssug.com" target="_blank">North Texas SQL Server User Group</a>, and is a past recipient of the SQL Server MVP award.&nbsp; </p>
<p>The BI practice here at Artis has been the strongest team I’ve ever worked with, and I’m very excited to have my friend Erin joining us here.&nbsp; If you know Erin, be sure to give her a shout of congratulations.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/6w7TvXuoj4M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/02/08/erin-welker-joins-artis-consulting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/02/08/erin-welker-joins-artis-consulting/</feedburner:origLink></item>
		<item>
		<title>Fish and Chips, Robin Hood, SSIS, and Me</title>
		<link>http://feedproxy.google.com/~r/TimMitchell/~3/0WzeiFNO_24/</link>
		<comments>http://www.timmitchell.net/post/2013/01/30/fish-and-chips-robin-hood-ssis-and-me/#comments</comments>
		<pubDate>Wed, 30 Jan 2013 22:37:15 +0000</pubDate>
		<dc:creator>Tim Mitchell</dc:creator>
				<category><![CDATA[Presenting]]></category>
		<category><![CDATA[SQLBits]]></category>

		<guid isPermaLink="false">http://www.timmitchell.net/?p=217</guid>
		<description><![CDATA[I’m going to Nottingham, England, fabled home of Robin Hood, where I’m going to eat fish and chips and talk about SSIS.  How’s that for tying seemingly unrelated topics together? I’m happy to report that in addition to my full-day preconference seminar at SQLBits, I’ll also be delivering a regular … <a href="http://www.timmitchell.net/post/2013/01/30/fish-and-chips-robin-hood-ssis-and-me/"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
				<content:encoded><![CDATA[<p>I’m going to Nottingham, England, fabled home of Robin Hood, where I’m going to eat fish and chips and talk about SSIS.  How’s that for tying seemingly unrelated topics together?</p>
<p>I’m happy to report that in addition to my <a href="http://sqlbits.com/information/Event11/Real_World_SSIS_A_Survival_Guide1/TrainingDetails.aspx" target="_blank">full-day preconference seminar</a> at <a href="http://www.sqlbits.com" target="_blank">SQLBits</a>, I’ll also be delivering a regular session entitled <a href="http://sqlbits.com/Sessions/Event11/Cleaning_Up_Dirty_Data_with_SSIS" target="_blank">Cleaning Up Dirty Data with SSIS</a> on Friday, May 3.  For those unfamiliar, SQLBits is the largest and most well-known SQL Server event outside of the US.  This year’s event will be held in Nottingham, England from May 2-4.  I’ll be speaking all day on Thursday, May 2nd, with the data cleansing session to follow on Friday.</p>
<p>Registration is still open, and <a href="http://www.sqlbits.com/information/Pricing.aspx" target="_blank">until next week you can still get in on the early bird pricing</a>.  If you make it to SQLBits, please do stop by and say hello.</p>
<img src="http://feeds.feedburner.com/~r/TimMitchell/~4/0WzeiFNO_24" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timmitchell.net/post/2013/01/30/fish-and-chips-robin-hood-ssis-and-me/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.timmitchell.net/post/2013/01/30/fish-and-chips-robin-hood-ssis-and-me/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.012 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-06-18 16:00:14 -->
