<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.adatis.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeremy Kashel&amp;#39;s Blog : Analysis Services</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx</link><description>Tags: Analysis Services</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Debug MDX with Generate</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2013/06/14/debug-mdx-with-generate.aspx</link><pubDate>Fri, 14 Jun 2013 15:42:01 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:14351</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=14351</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2013/06/14/debug-mdx-with-generate.aspx#comments</comments><description>&lt;p&gt;On occasion you may find that your MDX queries don’t quite give you the result that you expect, which sometimes may be due to the way in which a certain bit of MDX has changed the context of part of your query.&lt;/p&gt;  &lt;p&gt;This can sometimes be tough to figure out, especially with functions like Sum() or Filter(), whereby we are looping over a set and then only returning the end product. For example, take the following query, where I’m trying to find out the count of UK male customers who have bought Road Bikes in both the current and the previous year:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;WITH MEMBER &lt;/span&gt;[Measures].[Repeat Customer Count] &lt;span style="color:blue;"&gt;AS
&lt;/span&gt;&lt;span style="color:maroon;"&gt;SUM&lt;/span&gt;(
    [Customer].[Customer].[Customer].&lt;span style="color:blue;"&gt;Members&lt;/span&gt;,
    &lt;span style="color:maroon;"&gt;IIF&lt;/span&gt;([Measures].[Internet Sales Amount] &amp;lt;&amp;gt; 0 &lt;span style="color:blue;"&gt;AND
    &lt;/span&gt;([Measures].[Internet Sales Amount], [Date].[Calendar Year].&lt;span style="color:maroon;"&gt;PrevMember&lt;/span&gt;) &amp;lt;&amp;gt; 0, 1, &lt;span style="color:blue;"&gt;NULL&lt;/span&gt;)
    )

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT      &lt;/span&gt;{[Measures].[Repeat Customer Count]} &lt;span style="color:blue;"&gt;ON &lt;/span&gt;0,
            [Date].[Calendar Year].[Calendar Year] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;1
&lt;span style="color:blue;"&gt;FROM        &lt;/span&gt;[Adventure Works]
            &lt;span style="color:green;"&gt;--Road Bikes, UK, Male
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE       &lt;/span&gt;([Product].[Subcategory].&amp;amp;[2], [Sales Territory].[Sales Territory Country].&amp;amp;[United Kingdom],
            [Customer].[Gender].&amp;amp;[M])&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;It returns the following result set, which I know to be incorrect:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_42130A64.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_08FC2D62.png" width="174" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unlike debugging either of the axes, where of course we can see what gets returned, debugging examples such as the above might be difficult. The &lt;a href="http://msdn.microsoft.com/en-us/library/ms145526.aspx" target="_blank"&gt;MDX Generate&lt;/a&gt; function can help here, as it works in a similar way to Sum(), by iterating over a set and then evaluating an argument once per iteration. The idea is that Generate will build us a new set, by using the looping context of the first set that you pass it. In this case, however, we can use it to return us a concatenated string based on our input set.&lt;/p&gt;

&lt;p&gt;What I’ve done here is to use the CurrentMember of attributes that I think might be causing problems (Customer, Gender) and then just print them out as a string in order to see if the attributes have the context that I expect. Therefore I’ve replaced the ‘1’ in my original query with the string of:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; | &amp;quot; &lt;/span&gt;+ [Customer].[Customer].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;MEMBER_CAPTION &lt;/span&gt;+ &lt;span style="color:#a31515;"&gt;&amp;quot;, &amp;quot; 
    &lt;/span&gt;+ [Customer].[Gender].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;MEMBER_CAPTION
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The full query and results then become:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:maroon;"&gt;GENERATE&lt;/span&gt;(
        [Customer].[Customer].[Customer].&lt;span style="color:blue;"&gt;Members&lt;/span&gt;,
        &lt;span style="color:maroon;"&gt;IIF&lt;/span&gt;([Measures].[Internet Sales Amount] &amp;lt;&amp;gt; 0 &lt;span style="color:blue;"&gt;AND
        &lt;/span&gt;([Measures].[Internet Sales Amount], [Date].[Calendar Year].&lt;span style="color:maroon;"&gt;PrevMember&lt;/span&gt;) &amp;lt;&amp;gt; 0, 
        &lt;span style="color:#a31515;"&gt;&amp;quot; | &amp;quot; &lt;/span&gt;+ [Customer].[Customer].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;MEMBER_CAPTION &lt;/span&gt;+ &lt;span style="color:#a31515;"&gt;&amp;quot;, &amp;quot;
        &lt;/span&gt;+ [Customer].[Gender].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;MEMBER_CAPTION&lt;/span&gt;, &lt;span style="color:blue;"&gt;NULL&lt;/span&gt;)
        )

&lt;span style="color:blue;"&gt;SELECT        &lt;/span&gt;{[Measures].[Repeat Customer Count]} &lt;span style="color:blue;"&gt;ON &lt;/span&gt;0,
            [Date].[Calendar Year].[Calendar Year] &lt;span style="color:blue;"&gt;ON &lt;/span&gt;1
&lt;span style="color:blue;"&gt;FROM        &lt;/span&gt;[Adventure Works]
            &lt;span style="color:green;"&gt;--Road Bikes, UK, Male
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE        &lt;/span&gt;([Product].[Subcategory].&amp;amp;[2], [Sales Territory].[Sales Territory Country].&amp;amp;[United Kingdom],
            [Customer].[Gender].&amp;amp;[M])&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_21F7FDA7.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_0D067B34.png" width="320" height="124" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;font face="Courier New"&gt;&lt;/font&gt;

&lt;p&gt;I can spot straight away that female customers have been returned in 2007, which is due to the fact that sets specified inside the WITH MEMBER section are not evaluated in the context of the slicer. In this case the problem can be solved by using the &lt;a href="http://msdn.microsoft.com/en-us/library/ms145541.aspx" target="_blank"&gt;EXISTING&lt;/a&gt; keyword inside the Sum, so that the customers get sliced by the gender attribute:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:maroon;"&gt;SUM&lt;/span&gt;(
    &lt;span style="color:blue;"&gt;EXISTING &lt;/span&gt;[Customer].[Customer].[Customer].&lt;span style="color:blue;"&gt;Members&lt;/span&gt;,
    &lt;span style="color:maroon;"&gt;IIF&lt;/span&gt;([Measures].[Internet Sales Amount] &amp;lt;&amp;gt; 0 &lt;span style="color:blue;"&gt;AND
    &lt;/span&gt;([Measures].[Internet Sales Amount], [Date].[Calendar Year].&lt;span style="color:maroon;"&gt;PrevMember&lt;/span&gt;) &amp;lt;&amp;gt; 0, 1, &lt;span style="color:blue;"&gt;NULL&lt;/span&gt;)
    )&lt;/pre&gt;

&lt;p&gt;This won’t be applicable in all MDX debugging scenarios, but hopefully it will help someone out.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=14351" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Analysis Services Member Properties and Excel</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2012/09/18/analysis-services-member-properties-and-excel.aspx</link><pubDate>Tue, 18 Sep 2012 16:40:15 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:10464</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When working with users who are browsing a cube using Excel 2010, a common requirement that I find is that the users want to create tabular or grid based reports. E.g. “I have a list of currencies, I want to display the currency code in an adjacent column”. Or “Here are my account codes, I want to also see the account type”.&lt;/p&gt;  &lt;p&gt;The common way that I see users attempt this is to stack attribute hierarchies on top of one another. For example, using Adventure Works, to get the currency names and codes together, I can stack the two attribute hierarchies:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_366981CE.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_164E7511.png" width="171" height="66" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This produces the following report:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_2F4A4556.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_2F4A4556.png" width="244" height="156" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Not exactly what we want – ideally we want the currency codes in separate columns, on the same line as the name.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An Alternative Approach&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One well known way to achieve this layout is to right click on the relevant member and &lt;a href="http://office.microsoft.com/en-us/excel-help/display-or-hide-screentips-and-properties-in-a-pivottable-or-pivotchart-report-HA010177752.aspx" target="_blank"&gt;display its member properties&lt;/a&gt;, whereas another is to &lt;a href="http://office.microsoft.com/en-gb/excel-help/change-the-layout-and-format-of-a-pivottable-report-HP010342424.aspx#_Toc273370200" target="_blank"&gt;set the layout to Tabular Form&lt;/a&gt;. I tend to prefer the member properties route as I think it produces slightly better reports, so I’ll be covering a simple member properties design tip shortly. First of all, here’s the sort of report that I’m able to create using member properties:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_4846159B.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_76336853.png" width="329" height="93" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m able to do this because the Adventure Works Source Currency Code Attribute Hierarchy has the Source Currency (names) as a member property. Therefore, I get the following option when I right click on the currency code:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_0F2F3899.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_0F2F3899.png" width="368" height="72" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Displaying member properties will only work if the attribute relationships are set up correctly. The reason that I’m able to see the member property ‘Source Currency’ is because of the following attribute relationship:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_282B08DE.png"&gt;&lt;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="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_282B08DE.png" width="200" height="77" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, if we just display the currency name, using the Source Currency attribute hierarchy and then try and right click to see the currency code, we’ll unfortunately see nothing in the ‘Show Properties in Report’ submenu. This is because the currency name is a property of the code, rather than the other way around. I’d argue that for a user it’s intuitive to get the name from the code, or vice versa, as they sit at the same level. With a few simple changes we can achieve this, essentially by adding an extra attribute to the dimension…&lt;/p&gt;  &lt;p&gt;Within the dimension editor in BIDS, the first step is to add the new attribute. In this case it should be based on the Currency Code column that is, of course, already in use. That doesn’t matter, we want to use it twice. Therefore, I’ve created a new attribute called Currency Code and have set AttributeHierarchyEnabled = False, as there’s no need for anyone to browse this attribute. Now onto the all important attribute relationships. The attribute hierarchy that contains the names is called Source Currency. As it’s not possible to get the currency codes by right clicking on this attribute hierarchy, Source Currency is the attribute needs to be related to the new Currency Code attribute:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_4126D923.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_6F142BDB.png" width="327" height="56" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Finally, the end result for the user is that they now get the ability to easily get access to the currency codes by right clicking on the names:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_1D017E94.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_080FFC21.png" width="387" height="315" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=10464" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Excel/default.aspx">Excel</category></item><item><title>Power View Default Field Set</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2012/02/23/power-view-default-field-set.aspx</link><pubDate>Thu, 23 Feb 2012 11:57:10 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:10311</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=10311</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2012/02/23/power-view-default-field-set.aspx#comments</comments><description>&lt;p&gt;Here&amp;#39;s another quick tip when creating data models for use with Power View - Default Field Sets can be created in both Tabular SSAS and PowerPivot that give the user a shortcut for automatically adding multiple fields to a report.&lt;/p&gt;  &lt;p&gt;As an example, here&amp;#39;s a screenshot of the Default Field Set in PowerPivot - this will tell Power view that the following fields should be automatically selected when the table is added to a Power View report:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/Default-Field-Set-for-blog_5BAFA76A.png"&gt;&lt;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="Default Field Set for blog" border="0" alt="Default Field Set for blog" src="http://blogs.adatis.co.uk/blogs/jeremykashel/Default-Field-Set-for-blog_thumb_5FB9F53C.png" width="379" height="274" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;I&amp;#39;d seen this in the documentation a while back, but hadn&amp;#39;t actually used it, nor could I see a way to select the table. In fact, although there&amp;#39;s no checkbox, it&amp;#39;s just a simple single click on the actual table name, as I’ve highlighted below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_3B949AAD.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_26A3183A.png" width="171" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click on the table name Product above, you will now get the following fields automatically added to a table visualisation:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_3F9EE87F.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_6D8C3B37.png" width="454" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So not exactly rocket science, but worth doing! Here&amp;#39;s how to set up the Default Field set for &lt;a href="http://technet.microsoft.com/en-us/library/hh560541(v=sql.110).aspx"&gt;PowerPivot&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/hh479569(v=sql.110).aspx"&gt;Tabular Analysis Services&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=10311" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Self+Service+BI/default.aspx">Self Service BI</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/BISM/default.aspx">BISM</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Tabular/default.aspx">Tabular</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/SQL+Server+2012/default.aspx">SQL Server 2012</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Power+View/default.aspx">Power View</category></item><item><title>Working with Images in Power View</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/29/working-with-images-in-power-view.aspx</link><pubDate>Tue, 29 Nov 2011 13:04:31 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:10068</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=10068</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/29/working-with-images-in-power-view.aspx#comments</comments><description>&lt;p&gt;Power View includes several ways to create visualisations with images, ranging from a simple table, to the scrollable tile visualisation. In this post I’m going to explain a bit about the tile visualisation, showing how it can be used in Power View, before showing a couple of tips for working with images in both PowerPivot and Analysis Services Tabular models.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Power View Tiles&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Power View Tiles visualisation allows you to display a scrollable series of images, which, when clicked on, will display data of your choosing. The report below is an example of this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_41F4FB4E.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_3AD5BED6.png" width="592" height="372" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What’s nice about the View above is that the names of the products are automatically displayed underneath the images. This is a sensible place to display the product names, as it means the area below can focus on whatever product level data you want, in this case Revenue by Month for the selected product.&lt;/p&gt;  &lt;p&gt;This works fine in the sample models (in my case the Tailspin Toys model that I think came with CTP3) but it wont work in vanilla PowerPivot / Tabular models unless you configure a few model settings. Trying to reproduce the report above without these settings will give the following tile visualisation, minus the product names:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_16B06447.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_2FAC348C.png" width="362" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PowerPivot Advanced Settings&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To address this in PowerPivot, you first of all need to switch to Advanced Mode, which you can do by selecting this option from the File menu in PowerPivot:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_1ABAB219.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_48A804D1.png" width="244" height="193" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This gives you the following advanced tab:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_61A3D516.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_0F9127CF.png" width="311" height="88" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the highlighted Table Behaviour button in the ribbon gives you the following Table Behaviour window:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_7A9FA55B.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_288CF814.png" width="429" height="306" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here you can “change the default behaviour for different visualisation types and default grouping behaviour in client tools for this table”. The following properties should be set in order to get the tiles working correctly:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Row Identifier&lt;/strong&gt; – Specifies a column that only contains unique values, which allows the column to be used as an internal grouping key in client tools. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Default Label &lt;/strong&gt;– Specifies which column gives a row level display name, e.g. the product name in a Product table. This is key, as when a row level image is used, this property specifies which value to display alongside the image in tiles and other image-based visualisation. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Default Image&lt;/strong&gt; – Specifies which column contains images representing the row level data, e.g. pictures of products. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The full details for all these properties can be found &lt;a href="http://msdn.microsoft.com/en-us/library/hh560542(v=SQL.110).aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tabular Models&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Tabular Models contain the same properties, which can be edited when you open a tabular project in the new SQL Server Data Tools. The image below shows how the properties have been configured for the column in my model called Image:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_4188C859.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_6F761B11.png" width="202" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Back to Power View&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If we now build a tile visualisation using the image column, we will see that we get the names of the products returned along with the image. It’s also worth noting that the Image and Product Name columns have now have an icon next to them, indicating that the field exhibits &lt;a href="http://technet.microsoft.com/en-us/library/hh231518(SQL.110).aspx" target="_blank"&gt;“row level” behaviour&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_365F3E0F.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_216DBB9C.png" width="483" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Finally, for some examples of what’s new in Power View SQL 2012 RC0 take a look at &lt;a href="http://blogs.msdn.com/b/sqlrsteamblog/archive/2011/11/17/what-s-new-in-power-view.aspx" target="_blank"&gt;this post&lt;/a&gt; on the Reporting Services Team Blog.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=10068" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/BISM/default.aspx">BISM</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Tabular/default.aspx">Tabular</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/SQL+Server+2012/default.aspx">SQL Server 2012</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Power+View/default.aspx">Power View</category></item><item><title>Managing SSAS Named Sets with Master Data Services Collections</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/07/managing-ssas-named-sets-with-master-data-services-collections.aspx</link><pubDate>Mon, 07 Nov 2011 17:04:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:10006</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=10006</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/07/managing-ssas-named-sets-with-master-data-services-collections.aspx#comments</comments><description>&lt;p&gt;Master Data Services &lt;a href="http://msdn.microsoft.com/en-us/library/ee633733.aspx" target="_blank"&gt;Collections&lt;/a&gt; are probably not the first feature that come to mind when you think of the MDS product. The hierarchies and member grids tend to be the core functionality, but as this post will hopefully show, MDS Collections are useful also.&lt;/p&gt;  &lt;p&gt;Collections are essentially managed lists of members that can come from multiple different MDS explicit hierarchies, or also from another collection. The idea is that this “subset of members” can be maintained in MDS by a business user and then fed to external applications for reporting or other purposes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Analysis Services Named Sets&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One example of how collections can be used is to maintain Analysis Services named sets. Some named sets, such as a Top 50 Customers, don&amp;#39;t require any maintenance, as it’s just the top 50 of all customers, based on a particular measure. On the other hand, sometimes named sets can be static lists, e.g. a list of core products that the user wants to see for reporting.&lt;/p&gt;  &lt;p&gt;In the latter example, if a user wants the definition of a named set to change, they have to get IT to change the MDX script. MDS collections can help by allowing the user to control the named set definition, reducing the burden on IT.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Example Scenario&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Here’s an example of how this is done. First of all, the end game is that I have a named set in Analysis Services that is currently just for 3 products. Therefore, a user can easily drop this set into an Excel report to get quick access to the products that are important to them:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_3AD09CE1.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_6132802C.png" width="343" height="114" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So the challenge is that we need to find some way of extending this named set without doing it manually. This is where MDS starts to come in, so using the sample Product model that comes with MDS, I’ve created a new collection called Favourite Products, as shown in the image below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_0008F40B.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_033ADBF3.png" width="454" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If I go and edit the Favourite Products collection in MDS, then I can drag and drop more products into this collection, or remove some existing members. In this case, I’ve chosen to add two new products:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_01F64314.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_1D2E9C15.png" width="380" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;C#, AMO and the MDS API&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So the named set represents the target that we need to get to, whereas the MDS collection that’s shown is the source. To get the contents of the MDS collection to update the named set, one way of doing it is to use the MDS API to pick up the collection members, and then to use AMO in order to write the named set into the MDX script. I’m just doing this in a C# windows application, but you could do it via a batch process, such as SSIS. For this post I’m just going to show the code, so here goes:&lt;/p&gt;  &lt;p&gt;This post is already starting to feel too long so I’m not going to show the basics of the MDS API. For that, take a look at a good posting by the MDS Team blog &lt;a href="http://sqlblog.com/blogs/mds_team/archive/2010/01/12/getting-started-with-the-web-services-api-in-sql-server-2008-r2-master-data-services.aspx" target="_blank"&gt;here&lt;/a&gt;. Also, as anyone who knows me will no doubt agree, I don’t tend to get involved in doing C#, so don’t consider this to be production ready! It should give you an idea of the basics though. Anyway, assuming that we’re now connected to the MDS Web Service, I’ve created the following method that will return the members from the collection:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private &lt;/span&gt;&lt;span&gt;HierarchyMembers &lt;/span&gt;ObtainHierarchyMembers(&lt;span style="color:blue;"&gt;string &lt;/span&gt;entityId, &lt;span style="color:blue;"&gt;string &lt;/span&gt;hierarchyId, &lt;span style="color:blue;"&gt;string &lt;/span&gt;modelId, &lt;span style="color:blue;"&gt;string &lt;/span&gt;versionId)
{
    &lt;span&gt;HierarchyMembersGetRequest &lt;/span&gt;request = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;HierarchyMembersGetRequest&lt;/span&gt;();
    &lt;span&gt;HierarchyMembersGetResponse &lt;/span&gt;response = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;HierarchyMembersGetResponse&lt;/span&gt;();
    request.HierarchyMembersGetCriteria = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;HierarchyMembersGetCriteria&lt;/span&gt;();

    &lt;span style="color:green;"&gt;//State that our hierarhcy type is a collection and that we want collection members
    &lt;/span&gt;request.HierarchyMembersGetCriteria.HierarchyType = &lt;span&gt;HierarchyType&lt;/span&gt;.Collection;
    &lt;span style="color:green;"&gt;//Pass in the key search criteria to identify the correct collection in MDS
    &lt;/span&gt;request.HierarchyMembersGetCriteria.ParentEntityId = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;Identifier &lt;/span&gt;{ Name = entityId };
    request.HierarchyMembersGetCriteria.HierarchyId = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;Identifier &lt;/span&gt;{ Name = hierarchyId };
    request.HierarchyMembersGetCriteria.ModelId = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;Identifier &lt;/span&gt;{ Name = modelId };
    request.HierarchyMembersGetCriteria.VersionId = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;Identifier &lt;/span&gt;{ Name = versionId };

    request.HierarchyMembersGetCriteria.RowLimit = 50;
    request.International = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;International&lt;/span&gt;();
    &lt;span&gt;OperationResult &lt;/span&gt;result = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;OperationResult&lt;/span&gt;();
    &lt;span style="color:green;"&gt;//Return the hierarchy members from the service
    &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;service.HierarchyMembersGet(request.International, request.HierarchyMembersGetCriteria, &lt;span style="color:blue;"&gt;out &lt;/span&gt;result);
}&lt;/pre&gt;

&lt;p&gt;Before we use the above method, we need to connect to SSAS using AMO. That can be done quite easily with the following code:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;Server &lt;/span&gt;server = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;Server&lt;/span&gt;();
&lt;span style="color:blue;"&gt;string &lt;/span&gt;connection = &lt;span&gt;&amp;quot;Data Source=.;Catalog=Adventure Works DW 2008R2;&amp;quot;&lt;/span&gt;;
server.Connect(connection);&lt;/pre&gt;

&lt;p&gt;After we’ve done all the usual error handling associated with connecting to a database, we need to pick up the SSAS database and cube:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;Database &lt;/span&gt;database = server.Databases[&lt;span&gt;&amp;quot;Adventure Works DW 2008R2&amp;quot;&lt;/span&gt;];
&lt;span&gt;Cube &lt;/span&gt;cube = database.Cubes[&lt;span&gt;&amp;quot;Adventure Works&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;p&gt;Now we’re ready to call our ObtainHierarchyMembers method, before looping through it to build the named set:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;StringBuilder &lt;/span&gt;mdx = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;StringBuilder&lt;/span&gt;(&lt;span&gt;&amp;quot;\n//Auto generated named set at &amp;quot; &lt;/span&gt;+ &lt;span&gt;DateTime&lt;/span&gt;.Now.ToString() + 
    &lt;span&gt;&amp;quot;\nCREATE SET CurrentCube.[Favourite Products] AS {&amp;quot;&lt;/span&gt;);
&lt;span style="color:blue;"&gt;int &lt;/span&gt;count = 1;
&lt;span style="color:green;"&gt;//Loop through the collection to build the mdx
&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span&gt;ParentChild &lt;/span&gt;pc &lt;span style="color:blue;"&gt;in &lt;/span&gt;hm.Members)
{
    &lt;span style="color:green;"&gt;//Add the members to the MDX string
    //This references the member by name
    //It would be possible to reference by member key, but would require more work
    &lt;/span&gt;mdx.Append(&lt;span&gt;&amp;quot;[Product].[Product].[&amp;quot; &lt;/span&gt;+ pc.Child.Name + &lt;span&gt;&amp;quot;]&amp;quot;&lt;/span&gt;);
    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(count &amp;lt; hm.Members.Count())
    {
        mdx.Append(&lt;span&gt;&amp;quot;, &amp;quot;&lt;/span&gt;);
    }
    count++;
}
mdx.Append(&lt;span&gt;&amp;quot;};&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


&lt;p&gt;Now we need to insert the named set in the correct place within the existing MDX script, bearing in mind it could already exist:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;string &lt;/span&gt;currentScript = cube.MdxScripts[0].Commands[0].Text;
&lt;span style="color:green;"&gt;//Find the correct place to insert the named set within the MDX script:
&lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;start = currentScript.IndexOf(&lt;span&gt;&amp;quot;\n//Auto generated named set at&amp;quot;&lt;/span&gt;);
&lt;span style="color:blue;"&gt;int &lt;/span&gt;end = 0;
&lt;span&gt;StringBuilder &lt;/span&gt;newScript = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span&gt;StringBuilder&lt;/span&gt;(currentScript);
&lt;span style="color:blue;"&gt;if &lt;/span&gt;(start != -1)
{
    end = currentScript.IndexOf(&lt;span&gt;&amp;quot;;&amp;quot;&lt;/span&gt;, start);
    &lt;span style="color:green;"&gt;//If the named set already exists, remove it
    &lt;/span&gt;newScript.Remove(start, end - start + 1);
}
&lt;span style="color:blue;"&gt;else
&lt;/span&gt;{
    start = currentScript.Length;
}
&lt;span style="color:green;"&gt;//Insert the named set in the correct place
&lt;/span&gt;newScript.Insert(start, mdx.ToString());
&lt;span style="color:green;"&gt;//Update the cube&amp;#39;s MDX script
&lt;/span&gt;cube.MdxScripts[0].Commands[0].Text = newScript.ToString();&lt;/pre&gt;

&lt;p&gt;Finally we just need to update the cube in order to write the MDX back to the cube:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;//Call the update methods to update the cube
&lt;/span&gt;cube.MdxScripts[0].Update();
cube.Update();&lt;/pre&gt;




&lt;p&gt;&lt;strong&gt;User Reports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now that the cube has been updated, if the Excel report is refreshed, then the two new products will appear in the list:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_06F880C3.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_145E93C9.png" width="348" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Controlling SSAS named sets like this won’t be for everybody. I’ve certainly worked in a few clients where strict process has to be followed to update this sort of thing, but I can think of other companies that I know where this would be really useful.&lt;/p&gt;

&lt;p&gt;Managing Analysis Services named sets is just one use for collections. Another example might be managing default multi-select parameters for SSRS reports. As collections are just lists of members that can be extracted easily, what you do with them is up to you!&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=10006" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDM/default.aspx">MDM</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Master+Data+Services/default.aspx">Master Data Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDS/default.aspx">MDS</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Master+Data+Management/default.aspx">Master Data Management</category></item><item><title>Master Data Services Training in the UK</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/01/sql-server-training-in-london.aspx</link><pubDate>Tue, 01 Nov 2011 23:33:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:9986</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=9986</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/11/01/sql-server-training-in-london.aspx#comments</comments><description>&lt;p&gt;This is just a quick post to announce a range of SQL Server training courses, organised (and in some cases delivered) by &lt;a href="http://cwebbbi.wordpress.com/" target="_blank"&gt;Chris Webb&lt;/a&gt;. To start off there’s a SQL Server course delivered by Christian Bolton in December, followed by an Analysis Services course delivered by Chris in February. I’ll be delivering a Master Data Services course in February, before Chris delivers an MDX course in March.&lt;/p&gt;  &lt;p&gt;The details for all the courses are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;SQL Server Internals and Troubleshooting Workshop - Christian Bolton – 6th – 7th December 2011&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;The Advanced Troubleshooting Workshop for SQL Server 2005, 2008 and R2 provides attendees with SQL Server internals knowledge, practical troubleshooting skills and a proven methodical approach to problem solving. The workshop will enable attendees to tackle complex SQL Server problems with confidence.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Full details and registration &lt;a href="http://www.regonline.co.uk/Register/Checkin.aspx?EventID=1016921&amp;amp;trackingcode=ADT" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Real World Cube Design and Performance Tuning with Analysis Services – Chris Webb – February 2012&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;A two day course that takes real world experience in showing you how to build a best practice Analysis Services cube, covering design issues such as data warehouse design and complex cube modelling. Day two then covers performance optimisation for Analysis Services, including MDX optimisation and cube processing.&lt;/p&gt;    &lt;p&gt;Full details and registration &lt;a href="http://www.regonline.co.uk/Register/Checkin.aspx?EventID=1028948&amp;amp;trackingcode=ADT" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Introduction to Master Data Services with Jeremy Kashel – February 2012&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;An end to end look inside Master Data Services, this full day course will begin with a synopsis of Master Data Management before moving on to an overview of Microsoft SQL Server 2008 R2 Master Data Services (MDS). The remainder of the course will cover the major MDS topics, such as modelling and business rules, which will include a number of practical exercises.&lt;/p&gt;    &lt;p&gt;More details and registration for &lt;a href="http://www.regonline.co.uk/Register/Checkin.aspx?EventID=1028960&amp;amp;trackingcode=ADT" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Introduction to MDX with Chris Webb – March 2012&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;The Introduction to MDX course aims to take you from the point of being a complete beginner with no previous knowledge of MDX up to the point where you can write 90% of the MDX calculations and queries you’ll ever need to write. The three day course covers the basics, such as sets, tuples, members to more advanced concepts such as scoped assignments and performance tuning.&lt;/p&gt;    &lt;p&gt;Full details and registration &lt;a href="http://www.regonline.co.uk/Register/Checkin.aspx?EventID=1026958&amp;amp;trackingcode=ADT" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=9986" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDM/default.aspx">MDM</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDS/default.aspx">MDS</category></item><item><title>MDX with Microsoft SQL Server 2008 R2 Analysis Services Cookbook - Book Review</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/10/13/mdx-with-microsoft-sql-server-2008-r2-analysis-services-cookbook-book-review.aspx</link><pubDate>Thu, 13 Oct 2011 16:51:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:9924</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=9924</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/10/13/mdx-with-microsoft-sql-server-2008-r2-analysis-services-cookbook-book-review.aspx#comments</comments><description>&lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p&gt;As you may have already seen, &lt;a href="http://www.packtpub.com/"&gt;Packt&lt;/a&gt; have released a new MDX book, namely &lt;a href="http://www.packtpub.com/mdx-with-microsoft-sql-server-2008-r2-analysis-services/book?utm_source=packtpub.com&amp;amp;utm_medium=article&amp;amp;utm_content=other&amp;amp;utm_campaign=mdb_009103"&gt;MDX with Microsoft SQL Server 2008 R2 Analysis Services Cookbook&lt;/a&gt; by Tomislav Piasevoli.&lt;/p&gt;          &lt;p&gt;The book is written as cookbook, meaning that you can choose the individual ‘recipes’ that apply to whatever problem you’re trying to solve. Each recipe starts off with a section called ‘Getting Ready’, essentially giving you the base query to use, before moving onto ‘How to do it&amp;#39;, which covers the main instructions for the recipe. There are then further sections,&amp;nbsp;which explain how the example works and also suggest other functions/concepts that you may want to consider. This sort of cookbook style makes it really easy to follow, each recipe is displayed very clearly in the book.&lt;/p&gt;          &lt;p&gt;A wide range of MDX problems are covered, from time calculations to context-aware calculations. Not every piece of the MDX functionality is covered, which is to be expected, given the size of the book. It also doesn’t cover the usual introduction to members/sets etc that MDX books tend to cover, but it’s clearly stated that having a working knowledge of MDX is a pre-requisite for the book.&lt;/p&gt;          &lt;p&gt;I found the copy that I’ve been reading in the Adatis office, but I really do like it, so I’ll definitely be ordering my own copy!&lt;/p&gt;       &lt;/td&gt;        &lt;td align="right"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_60CB45AC.png"&gt;&lt;img style="border:0px currentColor;padding-top:0px;padding-right:0px;padding-left:0px;display:inline;background-image:none;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_4E827EEA.png" width="188" height="244" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=9924" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Books/default.aspx">Books</category></item><item><title>Adding a Calculated Field to an Excel Pivot Table With Analysis Services</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/07/01/adding-a-calculated-field-to-an-excel-pivot-table-with-analysis-services.aspx</link><pubDate>Fri, 01 Jul 2011 13:10:17 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:9207</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=9207</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2011/07/01/adding-a-calculated-field-to-an-excel-pivot-table-with-analysis-services.aspx#comments</comments><description>&lt;p&gt;One question that I get asked from time to time is how to add a calculated field to an Excel Pivot Table that’s connected to an Analysis Services cube. I’ve been aware of a workaround to do this for a while, but a quick Bing :-) revealed that the common answer given to this question is that it’s not possible.&lt;/p&gt;  &lt;p&gt;It definitely is possible, it’s just not that obvious and is perhaps a little limited. Here’s how it can be done in Excel 2010:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sample Cube&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First of all, connect to a cube and produce a pivot table report. I’ve connected to the 2008 R2 version of the Adventure Works DW cube and have produced the following report, using the Internet Sales Amount measure:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_7EDE2ECD.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_17D9FF13.png" width="521" height="174" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Adding a Calculated Field&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you now open the Field List, you will see that Internet Sales Amount is selected of course. Here’s the trick – you can select the measure twice by dragging it into the Values area, which will give the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_30D5CF58.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_5EC32210.png" width="405" height="288" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now click the drop down next to Internet Sales Amount2, which will display the following window:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_10BAC29B.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_3EA81553.png" width="311" height="278" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can change the name of the field – I’ve called mine Percent Share. In the Show Values as drop-down, I’ve picked % of Grand Total, so that I can see the share of the sales in each country across all years. So now the report is as follows:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/image_57A3E598.png"&gt;&lt;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://blogs.adatis.co.uk/blogs/jeremykashel/image_thumb_42B26325.png" width="698" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A better approach is to put as many calculations in the cube as possible, but as some calculations requested by users are report-specific, this feature of Pivot Tables allows users to produce the reports that they want.&lt;/p&gt;  &lt;p&gt;The calculations that you can carry out are only those in the ‘Show values as’ drop-down. There’s quite a few in there, especially in Excel 2010, as mentioned &lt;a href="http://blogs.office.com/b/microsoft-excel/archive/2009/10/15/a-few-more-pivottable-improvements-in-excel-2010.aspx"&gt;here&lt;/a&gt;. If that’s not enough, then an alternative is to use the &lt;a href="http://olappivottableextend.codeplex.com/"&gt;OLAP Pivot Table Extensions&lt;/a&gt;, which is available to download on Codeplex.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=9207" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Excel/default.aspx">Excel</category></item><item><title>Analysis Services KPIs and Reporting Services 2008 R2</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/05/25/analysis-services-kpis-and-reporting-services-2008-r2.aspx</link><pubDate>Tue, 25 May 2010 19:40:53 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7662</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7662</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/05/25/analysis-services-kpis-and-reporting-services-2008-r2.aspx#comments</comments><description>&lt;p&gt;There was a comment on &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/04/30/reporting-services-kpis-or-performancepoint-services-kpis.aspx" target="_blank"&gt;my last blog post&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/b/petereb/" target="_blank"&gt;Peter Eb&lt;/a&gt; asking about whether Reporting Services 2008 R2 knows how to render SSAS KPIs automatically. The short answer is that it doesn&amp;#39;t unfortunately, but there are only a few steps needed to get it working.&lt;/p&gt;  &lt;p&gt;For this blog post I&amp;#39;ve built a simple report that uses the Adventure Works DW 2008 R2 Analysis Services database as a data source. The first step is to build a data set that contains a query that references the Month attribute and the Channel Revenue KPI:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_4.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_1.png" width="576" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I&amp;#39;m interested in reporting on the status and trend part of the KPI, so I&amp;#39;ve added the month and value parts of the KPI, plus blank columns for the status and the trend:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_8.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_3.png" width="435" height="63" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For the status and the trend columns, the next step is then to drag on (or right click and insert) an indicator in each of the cells. This is when the manual steps come in:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Right click on the indicator to open the properties window; &lt;/li&gt;    &lt;li&gt;Set the Value of the indicator to be the Status part of the Analysis Services KPI; &lt;/li&gt;    &lt;li&gt;Change the States Measurement Unit to Numeric; &lt;/li&gt;    &lt;li&gt;Configure the indicator Start and End properties to be -1, 0 and 1. &lt;a href="http://msdn.microsoft.com/en-us/library/ms174875.aspx" target="_blank"&gt;SSAS KPIs&lt;/a&gt; can have an unlimited number of status values, so it may be necessary to add more states here if SSAS returns more than 3 values for the Status. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This changes that are needed to the indicator properties window is shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_10.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_4.png" width="390" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Applying the same method to the Trend part of the KPI produces the following simple report:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image25.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image25_thumb.png" width="454" height="220" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This post wasn&amp;#39;t really supposed to compare SSRS Vs PerformancePoint Services, but I&amp;#39;ve found out that PerformancePoint Services does pick up the SSAS KPI meta data (slight mismatch on the colours only), saving you having to set up the indicator yourself:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_6.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb.png" width="388" height="86" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It&amp;#39;s a shame that the KPIs aren&amp;#39;t picked up automatically by SSRS, but then again the above process isn&amp;#39;t too difficult to master. &lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7662" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PerformancePoint+Services/default.aspx">PerformancePoint Services</category></item><item><title>Allocations in PowerPivot Using DAX</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/02/27/allocations-in-powerpivot-using-dax.aspx</link><pubDate>Sat, 27 Feb 2010 14:56:56 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7569</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7569</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/02/27/allocations-in-powerpivot-using-dax.aspx#comments</comments><description>&lt;p align="justify"&gt;Although I didn&amp;#39;t mention it, the inspiration for my &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/02/11/dax-closing-balances.aspx"&gt;last post&lt;/a&gt; was the excellent &lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471748080.html" target="_blank"&gt;MDX Solutions 2nd Edition&lt;/a&gt;. Whilst flicking through the book a while back, I though it would be interesting to see how DAX and PowerPivot could handle the so called &amp;#39;Common Calculations and Selections in MDX&amp;#39;.&lt;/p&gt;  &lt;p align="justify"&gt;This post continues that theme, focusing on one calculation in particular that&amp;#39;s in the aforementioned MDX book, namely &amp;#39;Unweighted Allocations down the Hierarchy&amp;#39;. Essentially this business problem is dealing with allocating data that is entered at a higher level (e.g. Quarter) down to a lower level (e.g. Day). It varies from business to business what the users actually want to see at the day level in this situation. Some expect to see the Quarter amount, some want to see a blank value and then some users want the amount in the quarters allocated down to the day level.&lt;/p&gt;  &lt;p align="justify"&gt;If the expectation is that data should be allocated, then one way of doing the allocation is to use a ratio. In the MDX book, this is achieved by the following MDX:&lt;/p&gt;  &lt;pre class="code"&gt;1.0 / 
&lt;span style="color:blue;"&gt;Descendants&lt;/span&gt;(
            &lt;span style="color:maroon;"&gt;Ancestor&lt;/span&gt;(
                    [Date].[Calendar].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;,
                    [Date].[Calendar].[Calendar Quarter]
                    ),
            [Date].[Calendar].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;Level&lt;/span&gt;,
            &lt;span style="color:blue;"&gt;SELF
            &lt;/span&gt;).&lt;span style="color:blue;"&gt;Count&lt;/span&gt;&lt;/pre&gt;

&lt;p align="justify"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;If we put this into a query and run it against the Calendar hierarchy in AdventureWorksDW we get the following results:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="184" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_thumb_3.png" width="295" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="justify"&gt;Therefore our quarter-entered value can simply be multiplied by this ratio to get the correct value at each level in the Calendar hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PowerPivot&lt;/strong&gt;&lt;/p&gt;

&lt;p align="justify"&gt;So the challenge is how to be able to do this in PowerPivot. I started off by looking for some data in AdventureWorksDW that would fit the bill. A good candidate seems to be the FactSalesQuota table, which I imported into PowerPivot along with its related dimensions:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="267" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_thumb_1.png" width="686" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="justify"&gt;Once in the pivot table, I wanted to be able to calculate the correct ratio at the daily and monthly levels. For the daily level this is 1 / 90, as there are 90 days in the Q1 that year, and for the month level it is 1/3 as there are 3 months in the quarter.&lt;/p&gt;

&lt;p align="justify"&gt;Given that there&amp;#39;s no MDX style Ancestor() function in DAX, I ended up having to have a different calculation at different levels. Something that I learnt from &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sqlkjpowerpivotforexcel/thread/99a73152-bbd5-41f3-88c7-054e8988f395" target="_blank"&gt;this forum post&lt;/a&gt; is that you need to use IF() in order to isolate a calculation at a different level. Therefore the DAX that I came up with was:&lt;/p&gt;

&lt;p&gt;=IF( COUNTROWS(VALUES(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey])) = 1, &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 1 / CALCULATE( COUNTROWS(&amp;#39;DimDate&amp;#39;), ALL(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey], &amp;#39;DimDate&amp;#39;[EnglishMonthName]) ), 
  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 1 / CALCULATE( COUNTROWS( DISTINCT( &amp;#39;DimDate&amp;#39;[EnglishMonthName]) ), ALL(&amp;#39;DimDate&amp;#39;[EnglishMonthName]) ) 

  &lt;br /&gt;&amp;#160;&amp;#160; )&lt;/p&gt;

&lt;p&gt;The COUNTROWS(VALUES(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey])) = 1 allows me to check that we&amp;#39;re at the day level, and if we are at the day level, then count the number of days in the quarter. Otherwise, if we&amp;#39;re at the month level we calculate the number of months in the current quarter. When this DAX is put into a new measure we get the following results:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="206" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_thumb_2.png" width="402" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="justify"&gt;This produces the same results as the MDX statement. The next step was then to apply this ratio to the Sales Amount Quota for the current quarter. This was achieved using the following DAX:&lt;/p&gt;

&lt;p&gt;=IF(
  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; COUNTROWS( VALUES(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey]) ) &amp;lt; 90,

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CALCULATE( Sum(&amp;#39;FactSalesQuota&amp;#39;[SalesAmountQuota]),&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; All(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey], &amp;#39;DimDate&amp;#39;[EnglishMonthName]) ) * &amp;#39;FactSalesQuota&amp;#39;[Ratio],

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Sum(&amp;#39;FactSalesQuota&amp;#39;[SalesAmountQuota])

  &lt;br /&gt;&amp;#160;&amp;#160; )&lt;/p&gt;

&lt;p align="justify"&gt;The &amp;lt; 90 at the start of the statement allows me to check if we&amp;#39;re at the day level or the month level. If we&amp;#39;re at either of these levels, then we want to pick up the Quarter-level SalesAmountQuota and multiply by the ratio. Otherwise, at the Quarter and Year levels, we just apply the original SalesAmountQuota value. This produces the following results:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_10.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="203" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AllocationsinPowerPivotUsingDAX_10A07/image_thumb_4.png" width="542" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="left"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p align="justify"&gt;The use of the &lt;a href="http://msdn.microsoft.com/en-us/library/ms145989.aspx" target="_blank"&gt;MDX Scope statement&lt;/a&gt; would have been nice to pinpoint exactly where I wanted the calculation to occur, but then again, the use of IF() keeps it quite simple, which is better for an Excel power user. Whilst MDX is very very powerful, can you imagine a business user getting to grips with MDX statements such as Scope or Freeze?&lt;/p&gt;

&lt;p align="justify"&gt;The bottom line is that the DAX calculation produces exactly what I want - the new AllocatedSalesQuota measure is correct at all levels in the Calendar hierarchy. Even with an IF() statement, like everything else in PowerPivot, the calculation performs very quickly.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7569" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Excel/default.aspx">Excel</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Gemini/default.aspx">Gemini</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/DAX/default.aspx">DAX</category></item><item><title>DAX Closing Balances</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/02/11/dax-closing-balances.aspx</link><pubDate>Thu, 11 Feb 2010 08:03:03 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7565</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7565</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/02/11/dax-closing-balances.aspx#comments</comments><description>&lt;p&gt;One of the often required calculations for users in reports is to be able to calculate a point-in-time closing balance, which is especially relevant when dealing with stock levels or financial data.&lt;/p&gt;  &lt;p&gt;In the Analysis Services world, at least in the Enterprise Edition, we&amp;#39;re lucky that we have a variety of &lt;a href="http://msdn.microsoft.com/en-us/library/ms365396.aspx" target="_blank"&gt;Aggregation Functions&lt;/a&gt; that can deal with semi-additive measures such as a closing balance. Or we can always turn to MDX if we need to which will achieve the same thing.&lt;/p&gt;  &lt;p&gt;In PowerPivot, we don&amp;#39;t have Aggregation Functions, but there is DAX, which has a variety of time intelligence functions up its sleeve. The idea behind this post is to see how PowerPivot would deal with the requirement of reporting a closing balance measure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DAX Time Intelligence Functions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One of the DAX functions that we can use for our closing balance is called &lt;a href="http://msdn.microsoft.com/en-us/library/ee634215(SQL.105).aspx" target="_blank"&gt;ClosingBalanceMonth()&lt;/a&gt;, which will simply evaluate an expression at the end of a given month. There&amp;#39;s also the similar &lt;a href="http://msdn.microsoft.com/en-us/library/ee634876(SQL.105).aspx" target="_blank"&gt;ClosingBalanceQuarter()&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ee634562(SQL.105).aspx" target="_blank"&gt;ClosingBalanceYear().&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;Having noticed these functions within PowerPivot, my first port of call was to set up a simple PowerPivot model by taking data from the FactInternetSales table in AdventureWorksDW, plus all it&amp;#39;s related dimensions of course. What I ended up with was the following simple pivot table in Excel 2010:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="234" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;Sales Amount obviously isn&amp;#39;t a semi-additive measure, but I&amp;#39;m treating it as one in this example. My first port of call was to use ClosingBalanceMonth() to try and get the value for the month to be equal to the value for last day in the month. I managed to come up with the following formula:&lt;/p&gt;  &lt;p&gt;=CLOSINGBALANCEMONTH(Sum([SalesAmount]), &amp;#39;DimDate&amp;#39;[FullDateAlternateKey], ALL(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey]))&lt;/p&gt;  &lt;p align="left"&gt;This produces the results that are shown below, in the measure called ClosingBalanceFormula:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="469" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_thumb_2.png" width="344" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;It does a good job of calculating a closing balance for each month, but it presents that closing monthly balance on each day. Therefore, I started looking for an alternative approach and found the &lt;a href="http://msdn.microsoft.com/en-us/library/ee634380(SQL.105).aspx" target="_blank"&gt;LastDate()&lt;/a&gt; function. It returns the last date that&amp;#39;s in context for the passed date column. The last date that&amp;#39;s in context at the month level will be the last date in the month, but thankfully the last date that&amp;#39;s in context at the day level will be the current day. Therefore I came up with the following formula:&lt;/p&gt;  &lt;p&gt;=&amp;#39;FactInternetSales&amp;#39;[Sum of SalesAmount](LASTDATE(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey]))&lt;/p&gt;  &lt;p align="left"&gt;This produced the results that I wanted - the daily closing balance at the day level and the monthly closing balance at the month level:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="326" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/DAXClosingBalances_E850/image_thumb_3.png" width="500" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;A bit more digging lead me to find out that a combination of the Calculate() and LastDate() functions gets to the same result, as an alternative. That formula is:&lt;/p&gt;  &lt;p&gt;=CALCULATE(Sum(&amp;#39;FactInternetSales&amp;#39;[SalesAmount]), LASTDATE(&amp;#39;DimDate&amp;#39;[FullDateAlternateKey]))&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It&amp;#39;s a shame that the ClosingBalanceMonth() formula didn&amp;#39;t quite work, but perhaps getting that approach to work will come out in the wash with more DAX experience. However, as with MDX or any kind of expression language, there&amp;#39;s always going to be a load of different ways to get to the same result. It&amp;#39;s much more efficient to work knowing that you&amp;#39;ve got several ways around a particular problem, rather than being forced down a particular path, and in fact, I think the range of calculation functions available shows the richness of the DAX language.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ee5c5cde-dce9-4dee-91e0-948dabcbe160" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PowerPivot" rel="tag"&gt;PowerPivot&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Gemini" rel="tag"&gt;Gemini&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DAX" rel="tag"&gt;DAX&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7565" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Excel/default.aspx">Excel</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Gemini/default.aspx">Gemini</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/DAX/default.aspx">DAX</category></item><item><title>XLCubed Version 5 Released</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2009/03/13/xlcubed-version-5-released.aspx</link><pubDate>Fri, 13 Mar 2009 12:18:32 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7521</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7521</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2009/03/13/xlcubed-version-5-released.aspx#comments</comments><description>&lt;p&gt;Interesting to see yesterday that XLCubed have released version 5 of their popular OLAP reporting tool. As I&amp;#39;ve mentioned &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/06/11/xlcubed-version-4-released.aspx" target="_blank"&gt;before&lt;/a&gt;, I&amp;#39;ve always found XLCubed to be very powerful and easy to use, and therefore, in my opinion, it&amp;#39;s definitely one of the best Excel OLAP reporting tools out there.&lt;/p&gt;  &lt;p&gt;Version 5 sees the introduction of some new features in the Excel/web editions, namely:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enhanced Excel integration with &amp;#39;MicroCharts&amp;#39;;&lt;/li&gt;    &lt;li&gt;An improved user interface in the Web Edition;&lt;/li&gt;    &lt;li&gt;Print to PDF and enhanced save to Excel options in the Web Edition; &lt;/li&gt;    &lt;li&gt;Fine grain control over publishing Excel reports to the web.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Personally, I&amp;#39;m used to using the Excel Edition to slice and dice cubes to get what I want quite easily. Although it&amp;#39;s not entirely new to V5, you can carry out the same kind of ad-hoc analysis in the Web Edition, as shown in the following &lt;a href="http://www.xlcubed.com/en/web_youtube2.html" target="_blank"&gt;video&lt;/a&gt;. The end result is that you are able to build the kind of dashboards as shown below, whether in the web or the Excel edition:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/XLCubedVersion5Released_8979/Excel_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="360" alt="Excel" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/XLCubedVersion5Released_8979/Excel_thumb.jpg" width="484" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As usual, the evaluation editions for the Excel and Web versions can be downloaded &lt;a href="http://www.xlcubed.com/en/download.html" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:04c46cbb-9077-499d-a400-2aa3ada083c0" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Excel" rel="tag"&gt;Excel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Dashboards" rel="tag"&gt;Dashboards&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XLCubed" rel="tag"&gt;XLCubed&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7521" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Dashboards/default.aspx">Dashboards</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Excel/default.aspx">Excel</category></item><item><title>Analysis Services 2008 Performance Guide</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/11/17/analysis-services-2008-performance-guide.aspx</link><pubDate>Mon, 17 Nov 2008 22:03:43 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7461</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7461</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/11/17/analysis-services-2008-performance-guide.aspx#comments</comments><description>&lt;p&gt;As &lt;a href="http://cwebbbi.spaces.live.com/" target="_blank"&gt;Chris Webb&lt;/a&gt; has already blogged, the Analysis Services 2008 Performance Guide has now been released.&lt;/p&gt;  &lt;p&gt;Like the 2005 version, the 2008 guide contains a wealth of information and is a must read if you are trying to tune either query or processing performance in Analysis Services.&lt;/p&gt;  &lt;p&gt;The document can be downloaded &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3be0488d-e7aa-4078-a050-ae39912d2e43&amp;amp;DisplayLang=en" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ff0f6d5d-e2df-4db9-9fb2-de0db07965cb" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MDX" rel="tag"&gt;MDX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Processing" rel="tag"&gt;Processing&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7461" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Analysis Services Properties for PerformancePoint MDX Rules</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/09/07/analysis-services-properties-for-performancepoint-mdx-rules.aspx</link><pubDate>Sun, 07 Sep 2008 20:55:05 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7405</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7405</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/09/07/analysis-services-properties-for-performancepoint-mdx-rules.aspx#comments</comments><description>&lt;p&gt;One of the great features of PEL is that you can choose either a SQL or &lt;a href="http://msdn.microsoft.com/en-us/library/bb839261.aspx" target="_blank"&gt;MDX implementation&lt;/a&gt; for your rules, depending on what you want to achieve. Whilst the MDX rules are much less restrictive than the SQL rules, they can sometimes run slower, depending of course on how your environment is set up.&lt;/p&gt;  &lt;p align="left"&gt;When the MDX rules do take a long time to run, it&amp;#39;s possible that you might see this message:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesPropertiesforPerformance_11E76/clip_image002_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="182" alt="clip_image002" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesPropertiesforPerformance_11E76/clip_image002_thumb.jpg" width="420" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What has essentially happened within Analysis Services is that an object (e.g. a cube or dimension) has been processed and is waiting to commit. Unfortunately this is not possible whilst an existing query is running, so therefore AS waits for the query to complete. It will, however, only wait so long, which is defined by one of the &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/ssasproperties.mspx" target="_blank"&gt;Analysis Services Properties&lt;/a&gt; called ForceCommitTimeout. Once this threshold has been reached, then the offending query is canceled, resulting in the error message above.&lt;/p&gt;  &lt;p&gt;Finding the right balance for the Analysis Services ForceCommitTimeout and the PerformancePoint PAC &amp;#39;OLAP Cube Refresh Interval&amp;#39; setting is key. If you have set PPS to re-process its cubes too often then you may well see the above message. On the other hand, if you set the ForceCommitTimeout too high, then queries executed whilst the cube is waiting to commit will be made to wait, meaning your big query will get though ok, but other users may see bad performance.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/darrengosbell/Default.aspx" target="_blank"&gt;Darren Gosbell&lt;/a&gt; has written an excellent post &lt;a href="http://geekswithblogs.net/darrengosbell/archive/2007/04/24/SSAS-Processing-ForceCommitTimeout-and-quotthe-operation-has-been-cancelledquot.aspx" target="_blank"&gt;here&lt;/a&gt; that provides a thorough explanation of ForceCommitTimeout and other related properties.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:93433136-881d-4785-93d0-9fce7e82b0f8" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MDX" rel="tag"&gt;MDX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PerformancePoint" rel="tag"&gt;PerformancePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PPS" rel="tag"&gt;PPS&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7405" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/MDX/default.aspx">MDX</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PEL/default.aspx">PEL</category></item><item><title>SQL Server 2005 Cumulative Update 8 for Service Pack 2</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/06/19/sql-server-2005-cumulative-update-8-for-service-pack-2.aspx</link><pubDate>Thu, 19 Jun 2008 08:04:36 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:6526</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=6526</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/06/19/sql-server-2005-cumulative-update-8-for-service-pack-2.aspx#comments</comments><description>&lt;p&gt;Microsoft have just released Cumulative Update 8 for SQL Server 2005 Service Pack 2.&lt;/p&gt;  &lt;p&gt;Amongst the changes are a few fixes for small problems in Analysis Services, such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Infinite recursion occurs in the CalculationPassValue function in SQL Server 2005 Analysis Services;&lt;/li&gt;    &lt;li&gt;A data source view that connects to an Oracle database generates incorrect relationships when you develop a Microsoft SQL Server 2005 Analysis Services project by using BIDS;&lt;/li&gt;    &lt;li&gt;The MeasureGroupMeasures function does not work correctly in SQL Server 2005 Analysis Services;&lt;/li&gt;    &lt;li&gt;All the MDX queries that are running on an instance of SQL Server 2005 Analysis Services are canceled when you start or stop a SQL Server Profiler trace for the instance.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Details the above fixes and many more can be found &lt;a href="http://support.microsoft.com/kb/951217/en-us" target="_blank"&gt;here&lt;/a&gt;, as well as details of how to download the update. As usual, you can only apply the hotfix if you have Service Pack 2 installed.&lt;/p&gt;  &lt;p&gt;Details of all SQL Server 2005 builds released after Service Pack 2 can be found &lt;a href="http://support.microsoft.com/kb/937137/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:54322ff3-a90a-4485-914d-1ad43bc591f7" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SQL%20Server%202005" rel="tag"&gt;SQL Server 2005&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Analysis%20Services" rel="tag"&gt;Analysis Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Service%20Pack%202" rel="tag"&gt;Service Pack 2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cumulative%20Update%208" rel="tag"&gt;Cumulative Update 8&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=6526" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/SQL+Server/default.aspx">SQL Server</category></item></channel></rss>