<?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>Salvo(z)</title>
	
	<link>http://salvoz.com/blog</link>
	<description>Aviation, Fitness and Technology</description>
	<lastBuildDate>Thu, 09 Feb 2012 03:25:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SalvoZ" /><feedburner:info uri="salvoz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>SSAS: Currency Conversion in MDX Script</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/EdAblyCdGRA/</link>
		<comments>http://salvoz.com/blog/2012/02/08/ssas-currency-conversion-in-mdx-script/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 03:25:32 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2012/02/08/ssas-currency-conversion-in-mdx-script/</guid>
		<description><![CDATA[In my prior blog post, I provided some details regarding currency conversion via measure expressions in SSAS.&#160;&#160;&#160; I recently attempted to implement currency conversion for some inventory measures and discovered a limitation with measure expressions &#8211; they do not work &#8230; <a href="http://salvoz.com/blog/2012/02/08/ssas-currency-conversion-in-mdx-script/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my prior blog post, I provided some details regarding currency conversion via measure expressions in SSAS.&nbsp;&nbsp;&nbsp; I recently attempted to implement currency conversion for some inventory measures and discovered a limitation with measure expressions &#8211; they do not work for measures with a ‘Last non-empty value’ aggregation.&nbsp; As an alternative to measure expressions, the currency conversion may be implemented in the cube’s MDX script.&nbsp; </p>
<p>The basic expression for currency conversion is:</p>
<p><font size="2">[Measure in Target Currency] = </font><font size="2">[Measure in Source Currency] * [Currency Conversion Rate]</font></p>
<p>In this example, we have a measure that represents a value converted from the source currency to a target currency.&nbsp; The initial value of this measure is set to the source currency (specified by the Source column).&nbsp; </p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/SNAGHTML10b77c.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML10b77c" border="0" alt="SNAGHTML10b77c" src="http://salvoz.com/blog/wp-content/uploads/2012/02/SNAGHTML10b77c_thumb.png" width="244" height="121"></a></p>
<p>Now, we need to overwrite the measure’s value in the MDX script so it represents the measure in the target currency (in this example, the measure we’re overwriting is called ‘Quantity Available Cost Converted’. The measure ‘Quantity Available Cost Local’ is in the original/source currency).&nbsp; The target currency is selected by the end-user.</p>
<p>SCOPE([Measures].[Quantity Available Cost Converted] <br />,LEAVES([Source Currency]) <br />,LEAVES([Destination Currency]) <br />,LEAVES([Currency Rate Type]) <br />,LEAVES([Dates])); <br />THIS = [Measures].[Quantity Available Cost Local] * [Measures].[Currency Rate Ov]; <br />END SCOPE;</p>
<p>The SCOPE function ensures that we are only affecting the portion of the cube specified in the function.&nbsp; In this case, the function overwrites the measure Quantity Available Cost Converted where it intersects the leaves of the Source Currency, Destination (target) Currency, Currency Rate Type and Dates dimensions.&nbsp; The LEAVES function is important since the measure uses the ‘Last Non-Empty Value’ aggregation and is therefore semi-additive.&nbsp; We only want to perform the calculation at the leaf level and not use the aggregations.</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/EdAblyCdGRA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2012/02/08/ssas-currency-conversion-in-mdx-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2012/02/08/ssas-currency-conversion-in-mdx-script/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssas-currency-conversion-in-mdx-script</feedburner:origLink></item>
		<item>
		<title>SSAS: Currency Conversion Using Measure Expressions</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/o5ocnB2saw8/</link>
		<comments>http://salvoz.com/blog/2012/02/01/ssas-currency-conversion/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 22:45:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2012/02/01/ssas-currency-conversion/</guid>
		<description><![CDATA[Currency conversions can be implemented several ways as part of a business intelligence solution.  In some scenarios it may be preferable to implement the conversion in the ETL, while in other scenarios it might make more sense to implement the &#8230; <a href="http://salvoz.com/blog/2012/02/01/ssas-currency-conversion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Currency conversions can be implemented several ways as part of a business intelligence solution.  In some scenarios it may be preferable to implement the conversion in the ETL, while in other scenarios it might make more sense to implement the conversion in the cube itself.  Implementing currency conversion in the ETL is only feasible when the source currency will be converted to one or two target/destination currencies.  If your business requirements dictate that users need the ability to select from a large set of target currencies, then you will likely need to implement currency conversion in the cube.</p>
<p>This blog post describes implementing currency conversion in an SSAS cube via Measure Expressions.  In this scenario, the data is collected and reported in multiple currencies.</p>
<p><strong>Dimensional Modeling</strong></p>
<p>The dimensions and facts are modeled as follows:</p>
<ul>
<li><strong>Source Currency Dimension</strong>
<ul>
<li>Attributes:  CurrencyCodeKey, CurrencyCode (e.g. USD)</li>
</ul>
</li>
<li><strong>Target / Destination Currency Dimension</strong>
<ul>
<li>Attributes:  CurrencyCodeKey, CurrencyCode (e.g. USD)</li>
</ul>
</li>
<li><strong>Date/Time Dimension</strong>
<ul>
<li>Attributes: DateKey, Date, Fiscal Week, Fiscal Month, etc.</li>
</ul>
</li>
<li><strong>Exchange Rate Measure Group</strong> <span style="font-size: x-small;"><em>(labeled FactConversionMRate in the diagram below)</em> </span>
<ul>
<li>Attributes: SourceCurrencyKey, DestinationCurrencyKey, CurrencyRate</li>
</ul>
</li>
<li><strong>Transactional Measure Group(s)</strong> <em><span style="font-size: x-small;">(e.g. sales data, purchase order data, etc.)</span></em>
<ul>
<li>Relationship with the Date/Time dimension (DateKey) and Source Currency Dimension (CurrencyCodeKey).</li>
</ul>
</li>
</ul>
<p>The diagram below shows the relationships between the fact and dimension tables.  I did not include the table with transactional data in the diagram.  The transactional data will generally have a relationship to the DimDate table, DimSourceCurrency, and DimCurrencyRateType tables.  The currency rate type is only necessary if  several different types of conversion rates are used. </p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/CurrencySchema.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="CurrencySchema" src="http://salvoz.com/blog/wp-content/uploads/2012/02/CurrencySchema_thumb.jpg" alt="CurrencySchema" width="501" height="311" border="0" /></a></p>
<p><strong>SSAS Currency Conversion</strong></p>
<p>Once you have the data loaded into the physical fact and dimension tables, you can begin to modify the cube.  The actual conversion calculations will be performed via Measure Expressions in SSAS.</p>
<p>The first step is to add the fact and dimension tables to the data source view.</p>
<p>Next, you will need to create a measure group that represents the conversion rate.  In the example diagram above, the measure group is based off the FactConversionMRate table with two measures CurrencyRateOv and CurrencyRateDiv.  These measures are the rates used to convert from the ‘FromCurrency’ to the ‘ToCurrency’ and vice versa.</p>
<p>You will also need to include dimensions for each of the dimension tables shown in the diagram above.  This includes date, source currency, target / destination currency and currency rate type (optional).  The source currency and target currency have one attribute: currency code.  The currency rate type dimension also has one attribute: currency rate type key. </p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/image.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2012/02/image_thumb.png" alt="image" width="244" height="193" border="0" /></a></p>
<p>The Source Currency Code and Destination Currency Code attributes have their KeyColumn set to CurrencyCodeKey and NameColumn set to CurrencyCode.  Similarly, the Currency Rate Type Key attribute has the KeyColumn set to CurrencyRateTypeKey and the NameColumn set to CurrencyRateType.</p>
<p>Both the source currency and currency rate type dimensions may be hidden (Visible set to False) since the values are already defined in the transactional data and should not be modified by the end-user.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/image1.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2012/02/image_thumb1.png" alt="image" width="244" height="180" border="0" /></a></p>
<p>The Destination Currency dimension should be visible so the end-user has the ability to select the desired target currency.</p>
<p>After creating the measure groups and dimensions in the cube, you will need to modify the relationships in the ‘Dimension Usage’ tab.  The relationships should be configured as follows <em>(I am only displaying the measure groups and dimensions that relate to the currency conversion.)</em>:</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2012/02/image_thumb2.png" alt="image" width="442" height="162" border="0" /></a></p>
<p>The Many-to-Many relationship is based on the Conversion Rate measure group.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2012/02/image_thumb3.png" alt="image" width="444" height="142" border="0" /></a></p>
<p>Once the relationships between the facts and dimensions are established, the measure expressions may be added.</p>
<p>First, create a new measure in the transactional measure group (e.g. sales).  Select the appropriate Source Table and Source Column.  The source column contains the value you want to convert to the target currency.</p>
<p>In the measure properties ‘Measure Expression’ field, enter in the appropriate calculation to perform the currency conversion.  Something similar to that shown below:</p>
<p>[Extended Price] * [Currency Rate]</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2012/02/image4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2012/02/image_thumb4.png" alt="image" width="244" height="129" border="0" /></a></p>
<p>You now have all the pieces in place to perform currency conversions in SSAS.</p>
<p><strong>Summary</strong></p>
<p>This blog post demonstrates one approach to implementing currency conversions.  Many alternative approaches exist in BI.  It is often possible to implement currency conversion directly in the ETL as opposed to SSAS.  This is especially true if you are converting between a small number of source and target currencies.  If your users need the ability to convert to a wide range of target currencies, it may be ideal to implement the currency conversion directly in SSAS using an approach similar to that described in this blog post.</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/o5ocnB2saw8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2012/02/01/ssas-currency-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2012/02/01/ssas-currency-conversion/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssas-currency-conversion</feedburner:origLink></item>
		<item>
		<title>SQL Server 2012 Tabular Models vs. PowerPivot</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/UlkHctxVxW4/</link>
		<comments>http://salvoz.com/blog/2012/01/15/sql-server-2012-tabular-models-vs-powerpivot/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 00:29:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[PowerPivot]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[Tabular Models]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2012/01/15/sql-server-2012-tabular-models-vs-powerpivot/</guid>
		<description><![CDATA[I recently installed SQL Server 2012 and began exploring the tabular models.&#160; At first glance, they look very similar to PowerPivot and contain much of the same functionality.&#160; In fact, both the tabular model and PowerPivot share the same engine &#8230; <a href="http://salvoz.com/blog/2012/01/15/sql-server-2012-tabular-models-vs-powerpivot/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently installed SQL Server 2012 and began exploring the tabular models.&nbsp; At first glance, they look very similar to PowerPivot and contain much of the same functionality.&nbsp; In fact, both the tabular model and PowerPivot share the same engine and the DAX language.&nbsp; </p>
<p>Although on the surface they appear very similar, several notable differences exist.</p>
<p>The following grid lists a few of the differences between the tabular model and PowerPivot:</p>
<table border="0" cellspacing="0" cellpadding="2" width="642">
<tbody>
<tr>
<td valign="top" width="191">&nbsp;</td>
<td valign="top" width="220" align="center"><strong>Tabular Model</strong></td>
<td valign="top" width="229" align="center"><strong>PowerPivot</strong></td>
</tr>
<tr>
<td valign="top" width="186"><strong>Scalability</strong></td>
<td valign="top" width="221">
<ul>
<li>No specified upper size limit</li>
<li>Partitions to process large volumes of data</li>
<li>Supports Direct Query and VertiPaq</li>
</ul>
</td>
<td valign="top" width="234">
<ul>
<li>2 GB Excel file size limit (for uploading to SharePoint)</li>
<li>No partitioning</li>
<li>VertiPaq only</li>
</ul>
</td>
</tr>
<tr>
<td valign="top" width="186"><strong>Manageability</strong></td>
<td valign="top" width="221">SSMS, AMO, ADOMD, XMLA, Deployment Wizard, PowerShell, Integration Services<br />(<a href="http://blogs.msdn.com/b/cathyk/archive/2011/09/12/managing-tabular-models.aspx">Cathy Dumas&#8217;s Blog</a>)</td>
<td valign="top" width="234">Excel / SharePoint</td>
</tr>
<tr>
<td valign="top" width="186"><strong>Securability</strong></td>
<td valign="top" width="221">Row level and dynamic security</td>
<td valign="top" width="234">Excel workbook file security</td>
</tr>
<tr>
<td valign="top" width="186"><strong>Development Tool</strong></td>
<td valign="top" width="221">Visual Studio</td>
<td valign="top" width="234">Excel</td>
</tr>
</tbody>
</table>
<p>There are several new features common to both PowerPivot and Tabular Models:</p>
<ul>
<li>Hierarchies</li>
<li>KPIs</li>
<li>Perspectives</li>
</ul>
<p>If you’d like to see a list of the new features in PowerPivot 2012, check out this link (<a title="http://technet.microsoft.com/en-us/library/hh272053(SQL.110).aspx" href="http://technet.microsoft.com/en-us/library/hh272053(SQL.110).aspx">http://technet.microsoft.com/en-us/library/hh272053(SQL.110).aspx</a>).</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/UlkHctxVxW4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2012/01/15/sql-server-2012-tabular-models-vs-powerpivot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2012/01/15/sql-server-2012-tabular-models-vs-powerpivot/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sql-server-2012-tabular-models-vs-powerpivot</feedburner:origLink></item>
		<item>
		<title>SSIS: Using the Script Component to Obtain an Error Description</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/ZD5YvDp64xI/</link>
		<comments>http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 16:12:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/</guid>
		<description><![CDATA[In the SSIS data flow, many data flow components provide an ErrorOutput that allows you to route rows that generate errors or truncation to another component in the data flow.&#160; The ErrorOutput path contains the following metadata: ErrorCode, ErrorColumn and &#8230; <a href="http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the SSIS data flow, many data flow components provide an ErrorOutput that allows you to route rows that generate errors or truncation to another component in the data flow.&nbsp; The ErrorOutput path contains the following metadata: ErrorCode, ErrorColumn and Flat File Source Error Output Column.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML5b0de6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML5b0de6" border="0" alt="SNAGHTML5b0de6" src="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML5b0de6_thumb.png" width="393" height="151"></a></p>
<ul>
<li>Flat File Source Error Output Column &#8211; The data row that generated the error.
<li>ErrorCode &#8211; Code associated with the error that occurred.
<li>ErrorColumn &#8211; Numeric ID of the column that caused the error. </li>
<p><!--EndFragment--></ul>
<p>Obtaining the ErrorDescription requires a bit more work, but can be easily accomplished using the data flow Script Component.</p>
<p>The first step is to add a&nbsp; ‘Script Component’ to your data flow and connect the Error Output as an input to the script component as shown below.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb.png" width="244" height="152"></a></p>
<p>Double click on the script component to edit.</p>
<p>Under the ‘Input Columns’ tab, check the ErrorCode column (you may also include additional columns if you wish to use them in subsequent data flow components).&nbsp; This column is required to obtain the Error Description.&nbsp; The ‘Usage Type’ should be set to ReadOnly.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb1.png" width="469" height="219"></a></p>
<p>Next, select the ‘Inputs and Outputs’ tab.&nbsp; Expand ‘Output 0’ and select ‘Output Columns’. Click the ‘Add Column’ button.&nbsp; In the ‘Name’ field, enter a descriptive name such as ErrorDescription.&nbsp; Set the DataType field to string [DT_STR] and the length to 255.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML6dd200.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML6dd200" border="0" alt="SNAGHTML6dd200" src="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML6dd200_thumb.png" width="480" height="382"></a></p>
<p>Click on the ‘Script’ tab and then click the ‘Edit Script’ button.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML6f8e1d.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML6f8e1d" border="0" alt="SNAGHTML6f8e1d" src="http://salvoz.com/blog/wp-content/uploads/2011/12/SNAGHTML6f8e1d_thumb.png" width="487" height="364"></a></p>
<p>Modify the Input0_ProcessInputRow function (this example uses C#)</p>
<p><font size="2">public override void Input0_ProcessInputRow(Input0Buffer Row)<br /> {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode);<br />&nbsp; }</font></p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/ZD5YvDp64xI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssis-using-the-script-component-to-obtain-an-error-description</feedburner:origLink></item>
		<item>
		<title>SSIS: Handling Truncation and Data Errors</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/k5iaUNxNcaA/</link>
		<comments>http://salvoz.com/blog/2011/12/27/ssis-handling-truncation-and-data-errors/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 15:22:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/12/27/ssis-handling-truncation-and-data-errors/</guid>
		<description><![CDATA[SSIS provides functionality to handle unexpected data in the data flow.&#160; Data flow errors are often due to invalid data values (e.g. string instead of number) and data truncation.&#160; Many components in the data flow support error outputs that allow &#8230; <a href="http://salvoz.com/blog/2011/12/27/ssis-handling-truncation-and-data-errors/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SSIS provides functionality to handle unexpected data in the data flow.&nbsp; Data flow errors are often due to invalid data values (e.g. string instead of number) and data truncation.&nbsp; </p>
<p>Many components in the data flow support error outputs that allow you to control how truncation and errors are handled.&nbsp; The Error Outputs contain an ErrorCode and ErrorColumn in addition to the data columns in the row that caused the error.&nbsp; Error outputs can be connected to another component in the data flow (e.g. a flat file destination to log the rows that generated errors). </p>
<p>You can control how data errors and truncation are handled:</p>
<p>1. Double click on the Data Flow component.</p>
<p>2. Select ‘Error Output’.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb2.png" width="385" height="113"></a></p>
<p>3. In the ‘Error’ and ‘Truncation’ columns, you specify how each scenario should be handled.&nbsp; You may click in any cell to set the value or select multiple cells and then use the drop-down at the bottom of the window to set the value.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb3.png" width="390" height="227"></a></p>
<p>The options are:</p>
<ul>
<li>Ignore Failure &#8211; The row is routed to the&nbsp; ‘Success’ / Default output.
<li>Redirect Row &#8211; The row is routed to the ‘Error’ output.
<li>Fail Component &#8211; The data flow task fails (this is the default option).</li>
</ul>
<p>In the example below, the error output is being routed to a script component.&nbsp; The script component is used to obtain a description of the error based on the error code (<a href="http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/">this blog post provides more details</a>).&nbsp; The errors are then routed to a flat file destination.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb4.png" width="378" height="184"></a></p>
<p>The ‘Flat File Destination’ is configured so the file is overwritten (so it doesn’t grow uncontrollably).</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image5.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb5.png" width="391" height="121"></a></p>
<p>Under the “Mappings” tab, the following columns are written to the file.</p>
<ul>
<li>Flat File Source Error Output Column &#8211; The data row that generated the error.
<li>ErrorCode &#8211; Code associated with the error that occurred.
<li>ErrorColumn &#8211; Numeric ID of the column that caused the error.
<li>ErrorDescription – Description of the error that occurred.&nbsp; The ErrorDescription was obtained in the ‘Script Component’ using the GetErrorDescription function, more details are included in this <a href="http://salvoz.com/blog/2011/12/27/ssis-using-the-script-component-to-obtain-an-error-description/">blog post</a>.</li>
</ul>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/12/image6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/12/image_thumb6.png" width="392" height="198"></a></p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/k5iaUNxNcaA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/12/27/ssis-handling-truncation-and-data-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/12/27/ssis-handling-truncation-and-data-errors/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssis-handling-truncation-and-data-errors</feedburner:origLink></item>
		<item>
		<title>SSRS: Checking for Divide By Zero Using Custom Code</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/7hPumytQsdM/</link>
		<comments>http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 20:16:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSRS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/</guid>
		<description><![CDATA[I encountered a divide-by-zero error while working on an SSRS report and thought the issue could easily be resolved using IIF with code similar to the following: =IIF(Fields!Denominator.Value = 0, 0, Fields!Numerator.Value/Fields!Denominator.Value) I soon realized that this does not resolve &#8230; <a href="http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I encountered a divide-by-zero error while working on an SSRS report and thought the issue could easily be resolved using IIF with code similar to the following:</p>
<p><span style="font-size: x-small;">=IIF(Fields!Denominator.Value = 0, 0, Fields!Numerator.Value/Fields!Denominator.Value)</span></p>
<p>I soon realized that this does not resolve the issue.  It appears that all parameters  in the IIF function are evaluated regardless if the first parameter evaluates to true or false.  Therefore, the divide-by-zero was still occurring.</p>
<p>After doing some research, I decided that the best option to avoid the divide-by-zero error is to implement custom code.</p>
<p><em>Note: The following screen shots are from Report Builder 3.0</em></p>
<p>The first step is to open the Report Properties window.  You can access the report properties by clicking anywhere outside of the report body.</p>
<p>If you still cannot see the Report Properties window, make sure you have the ‘Properties’ option checked in the ‘View’ tab.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image11.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb11.png" alt="image" width="216" height="117" border="0" /></a></p>
<p>The Report Properties window is displayed below.  In the Code text box, click the ellipse […].  You may need to click on the Code text box first to see the ellipse button.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image12.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb12.png" alt="image" width="170" height="244" border="0" /></a></p>
<p>Next, select ‘Code’ in the left hand menu if it is not already selected.  Paste the code (displayed below screen shot) in the Custom code field.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML9a4f0b7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTML9a4f0b7" src="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML9a4f0b7_thumb.png" alt="SNAGHTML9a4f0b7" width="344" height="316" border="0" /></a></p>
<p>Function Divide(Numerator as Double, Denominator as Double)<br />
If Denominator = 0 Then<br />
Return 0<br />
Else<br />
Return Numerator/Denominator<br />
End If<br />
End Function</p>
<p>Now that you’ve created the custom code, you can begin to use the code in your report.  The following is an example of how you can use the Divide function in a text box expression:</p>
<p>=Code.Divide(Fields!CurrentYearSales.Value-Fields!PriorYearSales.Value,Fields!PriorYearSales.Value)*100</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/7hPumytQsdM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/11/25/ssrs-checking-for-divide-by-zero-using-custom-code/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssrs-checking-for-divide-by-zero-using-custom-code</feedburner:origLink></item>
		<item>
		<title>SSIS: Implementing IsNumeric( ) Logic Using the Data Flow Script Component</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/Fx9Lg-e7B5I/</link>
		<comments>http://salvoz.com/blog/2011/11/25/ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 19:17:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/11/25/ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3/</guid>
		<description><![CDATA[SSIS does not include an ‘out-of-the-box’ isNumeric( ) function.&#160; Fortunately, this functionality can be implemented using the script component in the data flow. I am going to make the assumption that readers are familiar with the SSIS script component.&#160; If &#8230; <a href="http://salvoz.com/blog/2011/11/25/ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SSIS does not include an ‘out-of-the-box’ isNumeric( ) function.&nbsp; Fortunately, this functionality can be implemented using the script component in the data flow.</p>
<p>I am going to make the assumption that readers are familiar with the SSIS script component.&nbsp; If not, please feel free to read my prior blog post on the subject: <a title="SSIS Dataflow Script Component" href="http://salvoz.com/blog/2011/11/06/ssis-dataflow-script-component/">SSIS Dataflow Script Component</a></p>
<p>To implement isNumeric( ) behavior, I used the C# Int32.TryParse method. </p>
<blockquote><p align="left"><a href="http://msdn.microsoft.com/en-us/library/f02979c7.aspx">TryParse(String, Int32)</a>:&nbsp; Converts the string representation of a number to its 32-bit signed integer equivalent. A return value indicates whether the conversion succeeded.</p>
</blockquote>
<p>Here’s a snippet of the code in C#:</p>
<blockquote><p>public override void Input0_ProcessInputRow(Input0Buffer Row)<br />{<br />&nbsp;&nbsp;&nbsp; int BatteryQuantity1Int;</p>
<p>&nbsp;&nbsp;&nbsp; if (! int.TryParse(Row.BatteryQuantity1Input, out BatteryQuantity1Int))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BatteryQuantity1Int = 0;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; //Add an output row and set the column values<br />&nbsp;&nbsp;&nbsp; Output0Buffer.AddRow();<br />&nbsp;&nbsp;&nbsp; Output0Buffer.ModelNumber = Row.ModelNumberInput;<br />&nbsp;&nbsp;&nbsp; Output0Buffer.ModelYear = Row.ModelYearInput;<br />&nbsp;&nbsp;&nbsp; Output0Buffer.ModelName = Row.ModelNameInput;</p>
</blockquote>
<p>I also came across a blog post by Dustin Ryan where he implements IsNumeric( ) functionality using the Derived Column Transform.&nbsp; The post is found <a href="http://www.bidn.com/blogs/DustinRyan/ssis/915/check-isnumeric-with-derived-column-transform-in-ssis-package">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/Fx9Lg-e7B5I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/11/25/ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/11/25/ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssis-implementing-isnumeric-logic-using-the-data-flow-script-component-3</feedburner:origLink></item>
		<item>
		<title>SSIS: Implementing Package Logging</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/IgR8H0UeoRQ/</link>
		<comments>http://salvoz.com/blog/2011/11/12/ssis-implementing-package-logging/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 04:46:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/11/12/ssis-implementing-package-logging/</guid>
		<description><![CDATA[SSIS logging is configured on a package-by-package basis.&#160; SSIS provides a flexible event logging environment that allows developers to configure: the container or scope to log (generally the entire package), the type of events to log, and the log provider &#8230; <a href="http://salvoz.com/blog/2011/11/12/ssis-implementing-package-logging/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SSIS logging is configured on a package-by-package basis.&nbsp; SSIS provides a flexible event logging environment that allows developers to configure: the container or scope to log (generally the entire package), the type of events to log, and the log provider type (SQL Server, Windows Event Log, Text Files, SQL Server Profiler or XML Files). </p>
<p>Whenever I set up logging in an SSIS package, I always log events at the package level using the SQL Server log provider.&nbsp; The type of events I log are: On Error, On Post Execute, On Pre Execute, On Task Failed, and On Warning.</p>
<p>The following is a list of steps to configure package logging as I described above:</p>
<p>Right click on the control flow surface and select ‘Logging’ (or select ‘Logging’ in the SSIS menu)</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image7.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb7.png" width="113" height="244"></a></p>
<p>In the ‘Containers’ section, you select the container or scope for logging.&nbsp; I always select the package level (to log events in the entire package) by checking the box next to the package name.&nbsp; </p>
<p>In the ‘Add a new log’ section, select ‘SSIS log provider for SQL Server’ then click ‘Add’.</p>
<p>In the ‘Configuration’ field, select the SQL Server database where you want to store logged events. </p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML1244667.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1244667" border="0" alt="SNAGHTML1244667" src="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML1244667_thumb.png" width="474" height="266"></a></p>
<p>Next, click the ‘Details’ tab.&nbsp; On the details tab you specify the types of events you want to log.&nbsp; I always select the following: On Error, On Post Execute, On Pre Execute, On Task Failed, and On Warning.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML12ceddd.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML12ceddd" border="0" alt="SNAGHTML12ceddd" src="http://salvoz.com/blog/wp-content/uploads/2011/11/SNAGHTML12ceddd_thumb.png" width="474" height="282"></a></p>
<ul>
<li>On Error &#8211; Writes a log entry when an error occurs.</li>
<li>On Post Execute &#8211; Writes a log entry immediately after the executable has finished running.</li>
<li>On Pre Execute&nbsp; &#8211; Writes a log entry immediately before the executable runs.</li>
<li>On Task Failed &#8211; Writes a log entry when a task fails. </li>
<li>On Warning &#8211; Writes a log entry when a warning occurs.</li>
</ul>
<p>When finished, click ‘OK’.&nbsp; </p>
<p>You should also create an event handler for each type of event you’re logging.&nbsp; To create an event handler, click the ‘Event Handlers’ tab.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb8.png" width="272" height="32"></a></p>
<p>In the ‘Event Handler’ drop-down, select the appropriate event type.&nbsp; Then click the link to create an event handler for that specific event.&nbsp; You need to repeat this process for each type of event (On Error, On Post Execute, On Pre Execute, On Task Failed, and On Warning)</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb9.png" width="368" height="197"></a></p>
<p>When you’re finished, the list in the ‘Event handler’ drop-down should look like this:</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image10.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb10.png" width="226" height="206"></a></p>
<p>Logged events are stored in the dbo.sysssislog system table in the database you specified while configuring package logging.</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/IgR8H0UeoRQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/11/12/ssis-implementing-package-logging/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/11/12/ssis-implementing-package-logging/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssis-implementing-package-logging</feedburner:origLink></item>
		<item>
		<title>SSIS: Issues with the Excel Data Source</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/KL_iCWGKMIA/</link>
		<comments>http://salvoz.com/blog/2011/11/12/ssis-issues-with-the-excel-data-source/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 22:52:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/11/12/ssis-issues-with-the-excel-data-source/</guid>
		<description><![CDATA[I discovered some undesirable behavior with the SSIS  Excel Data Source.  Although this issue has been well-documented for a while, I thought it is worth mentioning again. I had one column in my spreadsheet that was sparsely populated, nearly all &#8230; <a href="http://salvoz.com/blog/2011/11/12/ssis-issues-with-the-excel-data-source/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I discovered some undesirable behavior with the SSIS  Excel Data Source.  Although this issue has been well-documented for a while, I thought it is worth mentioning again.</p>
<p>I had one column in my spreadsheet that was sparsely populated, nearly all blank values.  When I ran my SSIS package to extract the data from the spreadsheet, every row in that column was set to NULL including those that had a valid value in the spreadsheet.</p>
<p>Upon further investigation, I discovered the issue stems from the Jet driver.  Apparently, by default, only the first 8 rows of data are scanned to determine the data type for each column.  If the first 8 rows of data in a column are blank, then any valid data in the additional rows is ignored and treated as NULL.  It is possible to change the value in the registry so more than 8 rows are scanned.</p>
<p>In addition, I also discovered that if you use the Excel data source and want to run your package from BIDS, then ‘Run64BitRuntime’ in the solution properties must be set to False.  You can configure this as follows:</p>
<p>Right click on the solution in BIDS and select ‘Properties’.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image5.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb5.png" alt="image" width="115" height="244" border="0" /></a></p>
<p>Set Run64BitRuntime to False.</p>
<p><a href="http://salvoz.com/blog/wp-content/uploads/2011/11/image6.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://salvoz.com/blog/wp-content/uploads/2011/11/image_thumb6.png" alt="image" width="421" height="268" border="0" /></a></p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/KL_iCWGKMIA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/11/12/ssis-issues-with-the-excel-data-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/11/12/ssis-issues-with-the-excel-data-source/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ssis-issues-with-the-excel-data-source</feedburner:origLink></item>
		<item>
		<title>Book Review: “Expert Cube Development with Microsoft SQL Server 2008 Analysis Services”</title>
		<link>http://feedproxy.google.com/~r/SalvoZ/~3/IcUG9L112gw/</link>
		<comments>http://salvoz.com/blog/2011/11/12/book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 19:32:00 +0000</pubDate>
		<dc:creator>Jennifer Salvo</dc:creator>
				<category><![CDATA[Database and BI]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[SSAS]]></category>

		<guid isPermaLink="false">http://salvoz.com/blog/2011/11/12/book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services/</guid>
		<description><![CDATA[A few months back I purchased the book “Expert Cube Development with Microsoft SQL Server 2008 Analysis Services” by Chris Webb, Alberto Ferrari and Marco Russo.&#160; I recently finished reading this book and thought I’d share my impressions. I recommend &#8230; <a href="http://salvoz.com/blog/2011/11/12/book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p align="justify">A few months back I purchased the book “Expert Cube Development with Microsoft SQL Server 2008 Analysis Services” by Chris Webb, Alberto Ferrari and Marco Russo.&nbsp; I recently finished reading this book and thought I’d share my impressions.</p>
<p><a href="http://www.bing.com/shopping/expert-cube-development-with-microsoft-sql-server-2008-analysis/p/BD6F9DF59E23DA2B7191?q=Expert+Cube+Development+with+Microsoft+SQL+Server+2008+Analysis+Services&amp;lpq=Expert%20Cube%20Development%20with%20Microsoft%20SQL%20Server%202008%20Analysis%20Services&amp;FORM=HURE"><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Expert Cube Development with Microsoft SQL Server 2008 Analysis Services" alt="Expert Cube Development with Microsoft SQL Server 2008 Analysis Services" src="http://www.bing.com/thumb/get?bid=TrZBTIYXRuSu7w&amp;bn=CC&amp;fbid=7wIR63%2bClmj%2b0A&amp;fbn=CC" width="81" height="100"></a></p>
<ul>
<li>
<div align="justify">I recommend this book to anyone who has a solid understanding of SSAS, works with SSAS on a regular basis and wants to take their cube development and optimization to the next level.&nbsp; This is not a beginner level book.&nbsp; </div>
</li>
<li>
<div align="justify">The content of this book is very well-organized.&nbsp; The first chapter provides an overview of basic dimensional modeling concepts: Ralph Kimball vs. Bill Inmon, dimensions and facts, star schema vs. snowflake schema, etc.&nbsp; The remaining chapters are all specific to SSAS starting with building dimensions and cubes, creating measures and measure groups, adding transactional data to fact tables, enhancing the cube with MDX calculations, implementing currency conversions in SSAS, query performance tuning, implementing security, “productionization”, and monitoring cube performance and usage.&nbsp; </div>
</li>
<li>
<div align="justify">This book does not focus on&nbsp; menus or user interface (it is assumed that you work with SSAS regularly and already know this); nor does it provide an overview of every feature SSAS offers.&nbsp; Instead, the authors focus on best practices (from their perspectives) gained from years of experience working with SSAS.&nbsp; </div>
</li>
<li>
<div align="justify">The book describes common scenarios and challenges encountered during cube development and provides reasons why one approach may be better than another and when you’d want to select one option over another.&nbsp; Many other books I’ve read explain the features and options but never delve into a detailed explanation of the pros/cons like this book does. </div>
</li>
<li>
<div align="justify">Links to additional sources of information such as blog posts, white papers and other reference materials are shared throughout the book.&nbsp; I have not read all of the additional reference materials but the ones I did read were high-quality.</div>
</li>
</ul>
<p align="justify">I personally have about 8 months of experience working with SSAS &#8211; this book provided me with lots of good tips and recommendations that are not ‘common knowledge’ and can only be gained through years of experience with the product.&nbsp; I feel that this book is a great investment and a resource I can leverage well into the future.</p>
<img src="http://feeds.feedburner.com/~r/SalvoZ/~4/IcUG9L112gw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://salvoz.com/blog/2011/11/12/book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://salvoz.com/blog/2011/11/12/book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=book-review-expert-cube-development-with-microsoft-sql-server-2008-analysis-services</feedburner:origLink></item>
	</channel>
</rss>

