<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Matt Masson</title>
	<atom:link href="http://www.mattmasson.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mattmasson.com</link>
	<description>SQL Server Integration Services (SSIS) and Data Movement</description>
	<lastBuildDate>Mon, 17 Jun 2013 13:07:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>SQL Saturday Dublin &#8211; this weekend!</title>
		<link>http://www.mattmasson.com/2013/06/sql-saturday-dublin-this-weekend/</link>
		<comments>http://www.mattmasson.com/2013/06/sql-saturday-dublin-this-weekend/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 13:07:09 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DQS]]></category>
		<category><![CDATA[EIM]]></category>
		<category><![CDATA[MDS]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4361</guid>
		<description><![CDATA[Less than a week to go before the next SQL Saturday Dublin event! I’ll be presenting a fun session at the main event (Cats, Facebook, and Online Dating with Microsoft BI), and doing a full day training session this Friday (6/21). If you are interested in learning more about SSIS, DQS, and MDS, please see &#8230; <a href="http://www.mattmasson.com/2013/06/sql-saturday-dublin-this-weekend/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p>Less than a week to go before the next <a href="http://www.sqlsaturday.com/229/eventhome.aspx">SQL Saturday Dublin</a> event! </p>
<p>I’ll be presenting a fun session at the main event (<a href="http://www.sqlsaturday.com/viewsession.aspx?sat=229&amp;sessionid=14857">Cats, Facebook, and Online Dating with Microsoft BI</a>), and doing a <a href="http://www.mattmasson.com/2013/04/ssis-dqs-and-mds-training-at-sql-saturday-229-dublin-ireland/">full day training session this Friday</a> (<strong>6/21</strong>). If you are interested in learning more about SSIS, DQS, and MDS, please see the <a href="http://www.prodata.ie/Events/SqlSat229/Precon3.aspx">Prodata site for details</a>. </p>
<p>Hope to see you there!</p>
<p>&#160;</p>
<p><img title="31216337-bf22-4cb8-9ef3-205f0eaa718c" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="31216337-bf22-4cb8-9ef3-205f0eaa718c" src="http://www.mattmasson.com/wp-content/uploads/2013/06/31216337-bf22-4cb8-9ef3-205f0eaa718c.png" width="640" height="480">&#160;</img></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/06/sql-saturday-dublin-this-weekend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick Tip: How can I tell when my DQS knowledge base has been updated?</title>
		<link>http://www.mattmasson.com/2013/06/quick-tip-how-can-i-tell-when-my-dqs-knowledge-base-has-been-updated/</link>
		<comments>http://www.mattmasson.com/2013/06/quick-tip-how-can-i-tell-when-my-dqs-knowledge-base-has-been-updated/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 10:25:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Data Quality Services]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[DQS]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4311</guid>
		<description><![CDATA[You can improve data quality in your SSIS data flows by using the DQS Cleansing transform (new in SQL 2012). When you’re using DQS, the data is cleansed according to the rules you’ve built up in the DQS knowledge base. As you update the knowledge base with better rules, your overall data quality goes up. &#8230; <a href="http://www.mattmasson.com/2013/06/quick-tip-how-can-i-tell-when-my-dqs-knowledge-base-has-been-updated/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p><img style="margin: 0px 13px 5px 5px; border: 0px currentcolor; float: left; display: inline; background-image: none;" title="image" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image6.png" width="181" height="254" align="left" border="0" />You can improve data quality in your SSIS data flows by using the <a href="http://blogs.msdn.com/b/mattm/archive/2011/07/14/overview-of-the-dqs-cleansing-transform.aspx">DQS Cleansing transform</a> (new in SQL 2012). When you’re using DQS, the data is cleansed according to the rules you’ve built up in the <a href="http://msdn.microsoft.com/en-us/library/gg524799.aspx">DQS knowledge base</a>. As you update the knowledge base with better rules, your overall data quality goes up. Therefore, you might find that you want to re-process data that’s already been through DQS anytime you make a significant update to the knowledge base.</p>
<p>Think of your data as “water”, and your knowledge base as a “water filter”… as your filter improves in quality (you improve your knowledge base), the water (data) you run through it gets cleaner.</p>
<p>I usually recommend storing the date value of when the data was processed with DQS. This could be a column value, if you want to track things at the row level, or a entry in a separate file/table, if you’re tracking it at the table/DB level. (I describe this pattern in detail in the <a href="http://www.mattmasson.com/ssis-design-patterns-book/">SSIS Design Patterns</a> book)</p>
<p>While there is no official notification system or API to know when a DQS knowledge base has been updated, the DQS database does contain a PUBLISH_DATE field that you can query. This won’t tell you which individual domains were touched, or what was actually modified, but given that you probably won’t be publishing a new version of your knowledge base without a good reason, it should be good enough for most automated data cleansing scenarios.</p>
<h3>Query the Publish Date for a DQS Knowledge Base</h3>
<p>We’re interested in the <span style="font-family: Consolas;"><strong>[dbo].[A_KNOWLEDGEBASE]</strong></span> table in the <span style="font-family: Consolas;"><strong>[DQS_MAIN]</strong></span> database. This table lists all of the knowledge bases in your system, as well as any active projects. You can use the following query to get the last time the knowledge base was updated (replace the [Name] clause with the name of your KB).</p><pre class="crayon-plain-tag">SELECT [ID]
      ,[NAME]
      ,[PUBLISHED_BY]
      ,[PUBLISH_DATE]
  FROM [dbo].[A_KNOWLEDGEBASE]
 WHERE [TYPE] = 1 -- knowledge bases only (no projects)
   AND [NAME] = N'DQS DATA'</pre><p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/06/quick-tip-how-can-i-tell-when-my-dqs-knowledge-base-has-been-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulk Loading into MDS using SSIS</title>
		<link>http://www.mattmasson.com/2013/06/bulk-loading-into-mds-using-ssis/</link>
		<comments>http://www.mattmasson.com/2013/06/bulk-loading-into-mds-using-ssis/#comments</comments>
		<pubDate>Thu, 13 Jun 2013 13:16:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Master Data Services]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[EIM]]></category>
		<category><![CDATA[MDS]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4291</guid>
		<description><![CDATA[Each entity in SQL Server 2012 Master Data Services (MDS) will have it’s own staging table (stg.&#60;name&#62;_Leaf). Using this staging table, you can create, update, deactivate and delete left members in bulk. This post describes how to bulk load into an entity staging table and trigger the stored procedure to start the batch import process. &#8230; <a href="http://www.mattmasson.com/2013/06/bulk-loading-into-mds-using-ssis/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p>Each <a href="http://msdn.microsoft.com/en-us/library/ee633723.aspx">entity</a> in SQL Server 2012 Master Data Services (MDS) will have it’s own <a href="http://msdn.microsoft.com/en-us/library/ee633854">staging table</a> (stg.&lt;name&gt;_Leaf). Using this staging table, you can create, update, deactivate and delete left members in bulk. This post describes how to bulk load into an entity staging table and <a href="http://msdn.microsoft.com/en-us/library/hh231028.aspx">trigger the stored procedure</a> to start the batch import process. </p>
<h3>Staging Tables and Stored Procedures</h3>
<p>The new entity based staging tables are an excellent feature in MDS 2012, and make it very easy to bulk load into MDS from SSIS. If you take a look at the SQL database used by your MDS instance, you’ll see at least one table in the <strong>stg</strong> schema for each entity. For this example I’ve created a <em>Suppliers</em> entity and I see a matching table called <strong>[stg].[Suppliers_Leaf]</strong>. If your entity is using hierarchies, you will have three staging tables (see <a href="http://msdn.microsoft.com/en-us/library/ee633726.aspx">BOL</a> for details). If we expand the columns, we’ll see all of the attributes have their own columns, as well as some system columns that every staging table will have.</p>
<p><img title="image" style="margin: 5px; display: inline;" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image1.png" width="316" height="261" /></p>
<p>Each staging table will also have a stored procedure that is used to tell MDS that new data is ready to load. Details of the arguments can be found in <a href="http://msdn.microsoft.com/en-us/library/hh231028.aspx">BOL</a>. </p>
<p><img title="image" style="margin: 5px; display: inline;" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image2.png" width="325" height="111" /></p>
<h3>Import Columns</h3>
<p>To load into this table from SSIS, our data flow will need to do the following: </p>
<ul>
<li>Set a value for <strong>ImportType</strong> (see below)</li>
<li>Set a value for <strong>BatchTag</strong></li>
<li>Map the column values in the data flow to the appropriate attribute columns</li>
</ul>
<p>See the <a href="http://msdn.microsoft.com/en-us/library/ee633854">Leaf Member Staging Table</a> BOL entry for details on the remaining system columns. If your Code value isn’t set to be <a href="http://msdn.microsoft.com/en-us/library/hh479633">generated automatically</a>, then you’d also need to specify it in your data flow. Otherwise, the default fields can be safely ignored when we’re bulk importing.</p>
<p>The <strong>BatchTag</strong> column is used as an identifier in the UI – it can be any string value, as long as it’s unique (and under 50 characters). </p>
<p>MDS uses the same staging table for creating, updating and deleting entities. The <strong>ImportType</strong> column indicates which action you want to perform. The <a href="http://msdn.microsoft.com/en-us/library/ee633854">possible values</a> are listed in the table below.</p>
<p>&#160;</p>
<p> <strong></strong><br />
<table cellspacing="0" cellpadding="2" width="812" border="0">
<tbody>
<tr>
<td valign="top" width="58"><strong>Value</strong></td>
<td valign="top" width="752"><strong>Description</strong></td>
</tr>
<tr>
<td valign="top" width="58">0</td>
<td valign="top" width="752">Create new members. Replace existing MDS data with staged data, but only if the staged data is not NULL. NULL values are ignored. To change a string attribute value to NULL, set it ~NULL~. To change a number attribute value to NULL, set it to -98765432101234567890. To change a datetime attribute value to NULL, set it to 5555-11-22T12:34:56.</td>
</tr>
<tr>
<td valign="top" width="58">1</td>
<td valign="top" width="752">Create new members only. Any updates to existing MDS data fail.</td>
</tr>
<tr>
<td valign="top" width="58">2</td>
<td valign="top" width="752">Create new members. Replace existing MDS data with staged data. If you import NULL values, they will overwrite existing MDS values.</td>
</tr>
<tr>
<td valign="top" width="58">3</td>
<td valign="top" width="752">Deactivate the member, based on the Code value. All attributes, hierarchy and collection memberships, and transactions are maintained but no longer available in the UI. If the member is used as a domain-based attribute value of another member, the deactivation will fail. See ImportType 5 for an alternative.</td>
</tr>
<tr>
<td valign="top" width="58">4</td>
<td valign="top" width="752">Permanently delete the member, based on the Code value. All attributes, hierarchy and collection memberships, and transactions are permanently deleted. If the member is used as a domain-based attribute value of another member, the deletion will fail. See ImportType 6 for an alternative.</td>
</tr>
<tr>
<td valign="top" width="58">5</td>
<td valign="top" width="752">Deactivate the member, based on the Code value. All attributes, hierarchy and collection memberships, and transactions are maintained but no longer available in the UI. If the member is used as a domain-based attribute value of other members, the related values will be set to NULL. ImportType 5 is for leaf members only.</td>
</tr>
<tr>
<td valign="top" width="58">6</td>
<td valign="top" width="752">Permanently delete the member, based on the Code value. All attributes, hierarchy and collection memberships, and transactions are permanently deleted. If the member is used as a domain-based attribute value of other members, the related values will be set to NULL. ImportType 6 is for leaf members only.</td>
</tr>
</tbody>
</table>
<p>When you are bulk loading data into MDS, you’ll use 0, 1 or 2 as the <strong>ImportType</strong>. To summarize the different modes:</p>
<ul>
<li>Use 0 or 2 when you are <strong>adding new members and/or updating existing ones </strong>(i.e. doing a merge)</li>
<ul>
<li>The difference between 0 and 2 is the way they<strong> </strong>handle NULLs when updating an existing member. With 0, NULL values are ignored (and require special handling if you actually want to set a NULL value). With 2, all values are replaced, even when the values are NULL.</li>
</ul>
<li>Use 1 when you are <strong>only inserting new members</strong>. If you are specifying a code, then a duplicate value will cause the import to fail.</li>
</ul>
<h3>Package Design</h3>
<p>You control flow will have at least two tasks:</p>
<ol>
<li>A Data Flow Task that loads your incoming data into the MDS staging table for your entity</li>
<li>An Execute SQL Task which runs the staging table’s stored procedure which tells MDS to start processing the batch</li>
</ol>
<p><img title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image3.png" width="404" height="247" /></p>
<p>Your data flow will have (at least) three steps:</p>
<ol>
<li>Read the values you want to load into MDS</li>
<li>Add the BatchTag and ImportType column values (using a derived column transform)</li>
<li>Load into the MDS staging table</li>
</ol>
<p><img title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image4.png" width="436" height="251" /></p>
<p>As noted above, in your OLE DB Destination you’ll need to map your data flow columns to your member attributes (including Code if it’s not auto-generated), the BatchTag value (which can be automatically generated via expression), and the ImportType. </p>
<p><img title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image5.png" width="770" height="713" /></p>
<p>After the Data Flow, you’ll run the staging table stored procedure.</p>
<pre>EXEC [stg].[udp_Suppliers_Leaf] ?, ?, ?</pre>
<p>The first three <a href="http://msdn.microsoft.com/en-us/library/hh231028.aspx">parameters</a> are required:</p>
<ol>
<li>The version name (i.e. VERSION_1)</li>
<li>Whether this operation should be logged as an <a href="http://msdn.microsoft.com/en-us/library/ff714019.aspx">MDS transaction</a> (i.e. do you want to record the change history, and make the change reversible?)</li>
<li>The <strong>BatchTag</strong> value that you specified in your data flow </li>
</ol>
<p>&#160;</p>
<p><strong>Additional resources:</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/sqlserver/hh802433.aspx">SQL 2012 Master Data Services – Entity Based Staging</a> (video)</li>
<li><a href="http://msdn.microsoft.com/en-us/sqlserver/hh802433.aspx">Importing Data (Master Data Services)</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff487022">Staging Process Errors (Master Data Services)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/06/bulk-loading-into-mds-using-ssis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Advanced SSIS Catalog presentation from TechEd North America 2013</title>
		<link>http://www.mattmasson.com/2013/06/advanced-ssis-catalog-presentation-from-teched-north-america-2013/</link>
		<comments>http://www.mattmasson.com/2013/06/advanced-ssis-catalog-presentation-from-teched-north-america-2013/#comments</comments>
		<pubDate>Wed, 12 Jun 2013 14:36:45 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[SSISDB]]></category>
		<category><![CDATA[TechEd]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4231</guid>
		<description><![CDATA[Matthew Roche (blog &#124; twitter) and I teamed up once again to present an advanced SSIS Catalog session at TechEd North America 2013 – Deep Inside the Microsoft SQL Server Integration Services Server. The video and slide deck are now available on the Channel9 site. The slide deck actually contains 10 additional slides that we &#8230; <a href="http://www.mattmasson.com/2013/06/advanced-ssis-catalog-presentation-from-teched-north-america-2013/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p>Matthew Roche (<a href="http://ssimagine.wordpress.com/">blog</a> | <a href="https://twitter.com/SQLAllFather">twitter</a>) and I teamed up once <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DBI310">again</a> to present an advanced SSIS Catalog session at TechEd North America 2013 – <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DBI-B405#fbid=-121pxqsfGK">Deep Inside the Microsoft SQL Server Integration Services Server</a>. The video and <a href="http://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fvideo.ch9.ms%2fsessions%2fteched%2fna%2f2013%2fDBI-B405.pptx">slide deck</a> are now available on the <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/">Channel9 site</a>. The slide deck actually contains 10 additional slides that we didn’t have time to cover during the regular session (with some further details about the security model). </p>
<p>I want to extend a big thank you to everyone who attended, and to all the great feedback we got. It can be tough doing a 400 level SQL session at TechEd, and while I could see some people’s heads spinning, it sounded like most people were able to learn something new. </p>
<p>The TechEd team picked an excellent preview picture for the session (below). It comes from Matthew’s intro – you’ll have to <a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DBI-B405#fbid=-121pxqsfGK">watch the video</a> to see how he worked a picture of kittens into a 400 level SSIS session. </p>
<p><a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DBI-B405#fbid=-121pxqsfGK"><img title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/06/image.png" width="640" height="358" /></a></p>
<p>If you didn’t already know, Channel 9 has many TechEd presentations available online. You can see recordings of my previous events on <a href="http://channel9.msdn.com/Events/Speakers/Matt-Masson">my speaker page</a>, and <a href="http://channel9.msdn.com/Events/Speakers/matthew-roche">Matthew’s as well</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/06/advanced-ssis-catalog-presentation-from-teched-north-america-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentations Galore!</title>
		<link>http://www.mattmasson.com/2013/05/presentations-galore/</link>
		<comments>http://www.mattmasson.com/2013/05/presentations-galore/#comments</comments>
		<pubDate>Fri, 17 May 2013 13:35:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[PASS]]></category>
		<category><![CDATA[SQL Saturday]]></category>
		<category><![CDATA[TechEd]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4091</guid>
		<description><![CDATA[I’m mentally preparing myself for a whole slew of upcoming conferences / speaking engagements over the next month and a half. I love talking about SQL Server technologies, and I’m honored that I’ll have so many chances to do it in the next few weeks! Please come see me at one (or more) of the &#8230; <a href="http://www.mattmasson.com/2013/05/presentations-galore/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p>I’m mentally preparing myself for a whole slew of upcoming conferences / speaking engagements over the next month and a half. I love talking about SQL Server technologies, and I’m honored that I’ll have so many chances to do it in the next few weeks!</p>
<p>Please come see me at one (or more) of the following events:</p>
<ul>
<li>05/22 – <a href="http://sqlblog.com/blogs/andy_leonard/archive/2013/05/17/join-matt-masson-and-i-for-developing-extensions-for-ssis-22-may-at-11-00-am-edt.aspx">Webcast: Developing Extensions for SSIS</a></li>
<li>05/27 – <a href="http://www.mattmasson.com/2013/04/presenting-to-the-net-montreal-community-group-may-27th/">Montreal User Group</a></li>
<li>05/30 – <a href="http://www.mattmasson.com/2013/02/devteach-toronto-may-27-31/">DevTeach Conference in Toronto, Ontario</a></li>
<li>05/31 – <a href="http://blogs.technet.com/b/cdnitmanagers/archive/2013/05/14/enterprise-information-management-eim-bringing-together-ssis-dqs-and-mds.aspx">EIM Training in Toronto, Ontario</a></li>
<li>06/03 – <a href="http://northamerica.msteched.com/">TechEd North America 2013 in New Orleans</a></li>
<li>06/21 – <a href="http://www.mattmasson.com/2013/04/ssis-dqs-and-mds-training-at-sql-saturday-229-dublin-ireland/">Enterprise Information Management all day training session in Dublin, Ireland</a></li>
<li>06/22 – <a href="http://www.sqlsaturday.com/229/eventhome.aspx">SQL Saturday #229 | Dublin, Ireland</a></li>
<li>06/25 – <a href="http://europe.msteched.com/">TechEd Europe 2013 in Madrid, Spain</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/presentations-galore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can I Automate SSIS Project Deployment?</title>
		<link>http://www.mattmasson.com/2013/05/can-i-automate-ssis-project-deployment/</link>
		<comments>http://www.mattmasson.com/2013/05/can-i-automate-ssis-project-deployment/#comments</comments>
		<pubDate>Thu, 16 May 2013 18:32:41 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[SSISDB]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4171</guid>
		<description><![CDATA[Yes, yes you can. Scripted or automated deployment can be done in a number of ways in SQL Server 2012. Integration Services Deployment Wizard Yes, this is the primary UI tool for SSIS project deployment, but it can also be run silently on the command line. When you run through the wizard, the Review page &#8230; <a href="http://www.mattmasson.com/2013/05/can-i-automate-ssis-project-deployment/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p>Yes, yes you can. Scripted or automated deployment can be done in a number of ways in SQL Server 2012. </p>
<p><strong>Integration Services Deployment Wizard</strong></p>
<p>Yes, this is the <a href="http://msdn.microsoft.com/en-us/library/hh213373">primary UI tool for SSIS project deployment</a>, but it can also be run silently on the command line. When you run through the wizard, the Review page will actually list all of the parameters you need to do the same deployment from the command line. </p>
<p><img title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/05/image1.png" width="889" height="352" /></p>
<p>Run <font face="Consolas">ISDeploymentWizard.exe /?</font> from a command prompt, and you’ll see the full list of arguments it supports. </p>
<pre><img width="619" height="234" title="image" style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" alt="image" src="http://www.mattmasson.com/wp-content/uploads/2013/05/image2.png" border="0" /></pre>
<p><strong>SSIS Catalog T-SQL API</strong></p>
<p>The SSISDB [catalog] schema has a number of <a href="http://msdn.microsoft.com/en-us/library/ff878099.aspx">public stored procedures</a>, including one that can be used for <a href="http://msdn.microsoft.com/en-us/library/ff878004.aspx">deployment</a>. We even provide samples on how to use it in <a href="http://msdn.microsoft.com/en-us/library/jj820152.aspx">Books Online</a>. </p>
<pre>DECLARE @ProjectBinary as varbinary(max)
DECLARE @operation_id as bigint
Set @ProjectBinary = (SELECT * FROM OPENROWSET(BULK 'MyProj.ispac', SINGLE_BLOB) as BinaryData)

Exec catalog.deploy_project @folder_name = 'MyFolder', @project_name = 'MyProj', @Project_Stream = @ProjectBinary, @operation_id = @operation_id out
</pre>
<p><strong>PowerShell</strong></p>
<p>All SSIS Catalog operations can be automated through PowerShell. I <a href="http://www.mattmasson.com/2012/06/publish-to-ssis-catalog-using-powershell/">previously blogged</a> about a deployment script I use to setup my demos. </p>
<p><strong>Custom Utility</strong></p>
<p>The <a href="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.integrationservices(v=sql.110).aspx">SSIS Catalog management object model (MOM)</a> exposes a set of <a href="http://msdn.microsoft.com/en-us/library/ms162169.aspx">SMO</a> classes you can use to code your own catalog utilities. You’ll want to use the <a href="http://msdn.microsoft.com/en-us/library/ff929130.aspx">CatalogFolder.DeployProject method</a> to do the actual deployment. If SMO or .NET isn’t your thing, you can also code a custom utility which interacts directly with the T-SQL API. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/can-i-automate-ssis-project-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data Flow Optimization Checklist</title>
		<link>http://www.mattmasson.com/2013/05/data-flow-optimization-checklist/</link>
		<comments>http://www.mattmasson.com/2013/05/data-flow-optimization-checklist/#comments</comments>
		<pubDate>Tue, 14 May 2013 13:51:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[Data Flow]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4121</guid>
		<description><![CDATA[I put this together for an SSIS performance presentation I did a while ago, and thought it warranted its own post. In addition to looking for appropriate Design Patterns, I have a checklist of things to look for when trying to optimize an SSIS Data Flow. This list is by no means extensive, but it &#8230; <a href="http://www.mattmasson.com/2013/05/data-flow-optimization-checklist/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p><img title="image" style="margin: 5px; border: 0px currentcolor; float: right; display: inline; background-image: none;" border="0" alt="image" align="right" src="http://www.mattmasson.com/wp-content/uploads/2013/05/image.png" width="285" height="285" /></p>
<p>I put this together for an SSIS performance presentation I did a while ago, and thought it warranted its own post. </p>
<p>In addition to looking for appropriate <a href="http://www.mattmasson.com/ssis-design-patterns-book/">Design Patterns</a>, I have a checklist of things to look for when trying to optimize an SSIS Data Flow. This list is by no means extensive, but it contains some of the more common causes of performance issues in the packages I’ve worked with. </p>
<ul>
<li>Can you remove the <a href="http://msdn.microsoft.com/en-us/library/ms141138.aspx">OLE DB Command</a> transform?</li>
</ul>
<p>OLE DB command operates on a row by row basis. Stage the data and perform the operation in a batch mode using the Execute SQL Task instead. </p>
<ul>
<li>Can you replace Upsert logic with a <a href="http://technet.microsoft.com/en-us/library/cc280522.aspx">MERGE statement</a>?</li>
</ul>
<p>Learn MERGE, and love it. </p>
<ul>
<li>Do you need those <a href="http://msdn.microsoft.com/en-us/library/ms140182.aspx">Sort transforms</a> in there? </li>
</ul>
<p>Sometimes you do. Most of the time you don’t. If you do need them (i.e. you are loading from a flat file, and need to do a merge), considering maxing out the <a href="http://msdn.microsoft.com/en-us/library/ms141031.aspx">DefaultBufferMaxRows</a> setting so you can sort more data in memory (sort will keep at most 5 active buffers in memory before it starts swapping to disk). </p>
<ul>
<li>Lookup Transforms</li>
<ul>
<li>Can the lookup be avoided?</li>
<li>Are you using the right cache mode?</li>
<li>Should you use a Cache Connection Manager?</li>
</ul>
</ul>
<p>Lots of related lookup posts can be <a href="http://blogs.msdn.com/b/mattm/archive/tags/lookup/">found here</a>. </p>
<p>&#160;</p>
<p>Have fun optimizing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/data-flow-optimization-checklist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Webcast: Developing Extensions for SSIS &#124; 2013-05-22</title>
		<link>http://www.mattmasson.com/2013/05/webcast-developing-extensions-for-ssis-2013-05-22/</link>
		<comments>http://www.mattmasson.com/2013/05/webcast-developing-extensions-for-ssis-2013-05-22/#comments</comments>
		<pubDate>Tue, 14 May 2013 12:21:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Samples]]></category>
		<category><![CDATA[SSIS]]></category>
		<category><![CDATA[Webcast]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4051</guid>
		<description><![CDATA[Andy Leonard will be joining me to present a Developing Extensions for SSIS webcast on May 22nd. It’s been a long time since I’ve had the chance to present a code heavy session like this, and I’m really looking forward to it. I&#8217;ll be using this session as a dry run for a talk I’ll &#8230; <a href="http://www.mattmasson.com/2013/05/webcast-developing-extensions-for-ssis-2013-05-22/">Continued</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://sqlblog.com/blogs/andy_leonard/default.aspx">Andy Leonard</a> will be joining me to present a <strong><a href="http://linchpinpeople.enterthemeeting.com/m/KXMAFCVW">Developing Extensions for SSIS</a></strong> webcast on May 22nd. It’s been a long time since I’ve had the chance to present a code heavy session like this, and I’m really looking forward to it. I&#8217;ll be using this session as a dry run for a talk I’ll be giving at the <a href="http://www.mattmasson.com/2013/02/devteach-toronto-may-27-31/">DevTeach conference in Toronto</a> the following week, so feedback will be much appreciated.</p>
<p>Andy has a <a href="http://linchpinpeople.com/2012/12/creating-a-custom-ssis-2012-task/">great blog series</a> about creating custom SSIS Tasks, and his company (Linchpin People) recently released an <a href="http://linchpinpeople.com/product/ssis-event-task/">SSIS Event Task</a>. I plan on expanding on the content in Andy’s blog posts a little bit, and talk about some of the key things you need to know when building an SSIS Data Flow component.</p>
<p>The abstract for the talk is available below, and registration page can be <a href="http://linchpinpeople.enterthemeeting.com/m/KXMAFCVW">found here</a>.</p>
<p>&nbsp;</p>
<blockquote><p>Join Matt Masson and Andy Leonard for a discussion and demonstrations on extending SSIS with custom tasks and data flow components. This code heavy session walks you through the creation of a custom SQL Server Integration Services (SSIS) Task, and a custom Data Flow component. If you&#8217;ve ever thought of customizing SSIS functionality beyond what you can do with scripting, this talk is for you! All examples will be in coded in C#, and made available following the session.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/webcast-developing-extensions-for-ssis-2013-05-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure Application Gateway</title>
		<link>http://www.mattmasson.com/2013/05/windows-azure-application-gateway/</link>
		<comments>http://www.mattmasson.com/2013/05/windows-azure-application-gateway/#comments</comments>
		<pubDate>Mon, 13 May 2013 13:03:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Windows Azure Application Gateway]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=4011</guid>
		<description><![CDATA[Background I&#8217;m not sure when it started, but for a while now I&#8217;ve found it hard to just sit and watch TV or a movie with my family. I feel like it doesn&#8217;t occupy my mind enough, and I need to be doing something else at the same time. My Surface has come in really &#8230; <a href="http://www.mattmasson.com/2013/05/windows-azure-application-gateway/">Continued</a>]]></description>
				<content:encoded><![CDATA[<h2><b>Background</b></h2>
<p>I&#8217;m not sure when it started, but for a while now I&#8217;ve found it hard to just sit and watch TV or a movie with my family. I feel like it doesn&#8217;t occupy my mind enough, and I need to be doing something else at the same time. My <a href="http://www.microsoft.com/surface/en-us/surface-with-windows-rt/home">Surface</a> has come in really handy here &#8211; usually if I&#8217;m watching something, I&#8217;ll be doing something with it at the same time. I&#8217;m sure I&#8217;m not alone in this.</p>
<p>There&#8217;s a lot of stuff going on within my organization, and I like to have a general idea of what everyone is doing. Recently I&#8217;ve been spending a lot of time reviewing specs, wireframes and power point presentations from other teams. We make heavy use of SharePoint internally, both the corporate and <a href="http://office.microsoft.com/en-us/microsoft-sharepoint-collaboration-software-FX103479517.aspx">cloud versions</a>, and that&#8217;s generally where I go to find the docs I&#8217;m looking for.</p>
<p>I thought I could make good use of my &#8220;quality family time in front of the TV&#8221; by combining these two activities. However, when I&#8217;m at home, accessing the documents I need from my tablet can be tricky. When they are stored in SharePoint Online, I can get to them through my browser, but getting to documents in our internal SharePoint sites is harder because they are behind the corporate firewall. I started searching around for solutions, and came across a new service called the <a href="http://appgportal.cloudapp.net/">Windows Azure Application Gateway</a>. Microsoft has ways for employees to connect to the corporate VPN on a Surface (using our smartcards), but this new service seemed like a light weight approach and looked interesting.</p>
<h2><b>Windows Azure Application Gateway</b></h2>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="clip_image002" alt="clip_image002" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image002.gif" width="680" height="238" border="0" /></p>
<p>The <a href="http://blogs.msdn.com/b/interoperability/archive/2013/05/06/a-new-way-for-ios-and-android-users-to-access-corporate-resources-the-application-gateway.aspx">interoperability @ Microsoft blog</a> had a great blog post about this service:</p>
<blockquote><p>For obvious security reasons, connecting to resources that are behind a firewall usually requires a fairly complex infrastructure such as VPN (Virtual Private Network). The AppGateway demo app is designed to make the process simpler yet highly secured. The mobile app connects to a service on Windows Azure that acts as the proxy to an agent that is running inside the network behind the firewall. Using the Windows Azure Authentication service, the proxy can establish a trusted connection to the agent so that the application on the mobile device can browse web sites that would not be normally accessible outside the corporate network.</p></blockquote>
<p>The <a href="http://appgportal.cloudapp.net/">site</a> has an easy to understand explanation of what the service does, and how it works. It was actually what caught my eye… I really like the graphic they use. I call him Mr. Firewall.</p>
<p><img style="margin: 5px; display: inline;" title="clip_image004" alt="clip_image004" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image004.jpg" width="150" height="175" /></p>
<p>The usage scenario they described fit what I was trying to do &#8211; there were corpnet resources I wanted to access, but couldn&#8217;t access them from home.</p>
<p><img style="margin: 5px; display: inline;" title="clip_image006" alt="clip_image006" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image006.jpg" width="501" height="245" /></p>
<p>Many companies will provide a way to connect to their internal corporate network (for example, <a href="http://www.microsoft.com/en-us/windows/enterprise/products-and-technologies/windows-7/features.aspx#directaccess">DirectAccess</a> or connecting through a VPN). These solutions tend to work fine from a laptop, but might not always work so well for a tablet or phone. <a href="http://surfacegeeks.net/setting-up-a-vpn-connection-with-surface-rt.html">Surface RT supports VPN connections</a>, but many corporate networks require some form of custom VPN client or smartcard solution that might make it harder (or more awkward) to use. If your company doesn&#8217;t offer a VPN solution, or you&#8217;re in a reverse scenario where you want to access your home network while you&#8217;re at work, then you might be out of luck.</p>
<p><img style="margin: 5px; display: inline;" title="clip_image008" alt="clip_image008" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image008.jpg" width="692" height="231" /></p>
<p>Their walkthrough graphics got me hooked, and I decided to try it out.</p>
<h2><b>Usage</b></h2>
<p>To use the service, you need to create login with either Windows Azure Active Directory (WAAD) or Office 365. (You can <a href="https://activedirectory.windowsazure.com/Signup/QuickSignup.aspx?ru=https://activedirectory.windowsazure.com&amp;ali=1&amp;wa=wsignin1.0&amp;alo=1&amp;lc=1033">sign up to WAAD</a> for free).</p>
<p>Once you have a login, you can download the connector and install it on your corporate machine (or your home machine, if you&#8217;re trying to create a bridge from work to home).</p>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="clip_image010" alt="clip_image010" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image010.jpg" width="497" height="383" border="0" /></p>
<p>After install, you&#8217;ll see an Application Gateway icon in your notification area, and a browser pops up asking you to login and register your connector.</p>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="clip_image012" alt="clip_image012" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image012.jpg" width="640" height="463" border="0" /></p>
<p>After registration, you get a webpage dashboard on your connector machine, with live tiles.</p>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="clip_image014" alt="clip_image014" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image014.jpg" width="607" height="274" border="0" /></p>
<p>I like the detailed status window that lets you test your connectivity:</p>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="clip_image016" alt="clip_image016" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image016.jpg" width="523" height="420" border="0" /></p>
<p>Once your connector is setup, you can use it to access web sites in a few different ways. There are custom <a href="https://itunes.apple.com/us/app/application-gateway/id604913543?ls=1&amp;mt=8">iOS</a> and <a href="https://play.google.com/store/apps/details?id=com.msopentech.applicationgateway&amp;feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5tc29wZW50ZWNoLmFwcGxpY2F0aW9uZ2F0ZXdheSJd">Android</a> client apps available, and on a windows OS (Windows Phone, Surface, PC) you access the <a href="https://appgportal.cloudapp.net/agents">Web Client</a> directly using your browser. Here is a screenshot from my Surface RT:</p>
<p><img style="margin: 5px; border: 0px currentcolor; display: inline; background-image: none;" title="appgateway from surface" alt="appgateway from surface" src="http://www.mattmasson.com/wp-content/uploads/2013/05/clip_image018.jpg" width="640" height="360" border="0" /></p>
<p>Click on the name of your connector, and it brings up a web browser interface. From here you can enter intranet URLs. The data from the site gets passed back through your connector machine and rendered on your device. It&#8217;s as if you were directly connected to your network using a VPN.</p>
<h2><b>Conclusion</b></h2>
<p>I&#8217;ve just started using the service, but it seems to work great so far. I&#8217;m able to browse internal SharePoint sites, and view (and edit) Word/PowerPoint files on my Surface. It hasn&#8217;t been out long (it&#8217;s still in Preview), so I expect there will be further improvements before it becomes generally available.</p>
<p>A more detailed explanation of how the service works can be <a href="http://msopentech.github.io/Msappgateway/">found here</a>, and it looks the source code for their <a href="https://github.com/MSOpenTech/appgateway-android">Android demo app is available on Github</a>.</p>
<p>Try it out and let the team know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/windows-azure-application-gateway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Localize Your Custom Connection Manager</title>
		<link>http://www.mattmasson.com/2013/05/how-to-localize-your-custom-connection-manager/</link>
		<comments>http://www.mattmasson.com/2013/05/how-to-localize-your-custom-connection-manager/#comments</comments>
		<pubDate>Thu, 02 May 2013 20:04:41 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Extensions]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Connection Managers]]></category>

		<guid isPermaLink="false">http://www.mattmasson.com/?p=3851</guid>
		<description><![CDATA[Similar to localizing a task, you can localize the display name and description of a custom connection manager by setting the LocalizationType property of the DtsConnection attribute. SSIS will look for two properties on the class: ConnectionDescription ConnectionDisplayName These must be public, static string properties on your LocalizationType class. The code looks like this: [crayon-51c1610951b92/]]]></description>
				<content:encoded><![CDATA[<p>Similar to <a href="http://www.mattmasson.com/2012/10/how-to-localize-your-custom-task/">localizing a task</a>, you can localize the display name and description of a custom connection manager by setting the <a href="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.localization.dtslocalizableattribute.localizationtype(v=sql.110).aspx">LocalizationType</a> property of the <a href="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.dtsconnectionattribute.aspx">DtsConnection</a> attribute. SSIS will look for two properties on the class:</p>
<ul>
<li>ConnectionDescription</li>
<li>ConnectionDisplayName</li>
</ul>
<p>These must be <em><strong>public</strong>, <strong>static</strong> <strong>string</strong></em> properties on your <strong>LocalizationType</strong> class.</p>
<p>The code looks like this:</p><pre class="crayon-plain-tag">[DtsConnection(ConnectionType = "MYCONNECTION", LocalizationType = typeof(Strings))]
    public class MyConnectionManager : ConnectionManagerBase
    {
    }</pre><p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattmasson.com/2013/05/how-to-localize-your-custom-connection-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
