<?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 : PEL</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PEL/default.aspx</link><description>Tags: PEL</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><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>Troubleshooting the PEL Allocate Statement</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/08/13/troubleshooting-the-pel-allocate-statement.aspx</link><pubDate>Wed, 13 Aug 2008 22:01:15 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7383</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7383</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/08/13/troubleshooting-the-pel-allocate-statement.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/bb839191.aspx" target="_blank"&gt;PEL Allocate statement&lt;/a&gt; can sometimes throw unexpected error messages, especially when you&amp;#39;re setting up a pull or push cross model allocation rule.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ve been keeping track of a few of the more obscure ones, which I&amp;#39;ve listed in the table below. Hopefully this will help anyone out there who&amp;#39;s struggling to get the cross model rules working.&lt;/p&gt;  &lt;p&gt;   &lt;table class="LightList-Accent1" style="border-right:medium none;border-top:medium none;border-left:medium none;border-bottom:medium none;border-collapse:collapse;mso-border-alt:solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext;" cellspacing="0" cellpadding="0" align="center"&gt;       &lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:windowtext 1pt solid;padding-left:5.4pt;background:#4f81bd;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-background-themecolor:accent1;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:5;"&gt;&lt;b&gt;&lt;span style="font-size:8pt;color:white;mso-themecolor:background1;"&gt;Error Message&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;color:white;mso-themecolor:background1;mso-bidi-font-weight:bold;"&gt; &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:windowtext 1pt solid;padding-left:5.4pt;background:#4f81bd;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-background-themecolor:accent1;mso-border-left-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:1;"&gt;&lt;b&gt;&lt;span style="font-size:8pt;color:white;mso-themecolor:background1;"&gt;Solution/Explanation&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:8pt;color:white;mso-themecolor:background1;mso-bidi-font-weight:bold;"&gt; &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:0;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;No hierarchy &amp;#8216;xyz&amp;#8217; exists in [dimension] &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="font-size:8pt;"&gt;Check that you have specified the correct member set in the source, target and scope parts of the rule. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:1;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:4;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;mso-ansi-language:en-us;"&gt;Member set is not defined correctly for cross model mapping. The number of members in source and target member sets in cross model mapping must match.&lt;/span&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt; &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;"&gt;This message can have 2 meanings. Firstly, as it suggests, it can be that the number of members in the source and target mapping arguments do not match. Or, prior to SP1, it can be this rather more serious problem - &lt;a href="http://support.microsoft.com/kb/942640"&gt;http://support.microsoft.com/kb/942640&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:2;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;mso-bidi-font-family:tahoma;"&gt;Execution of rule &amp;#8216;xyz&amp;#8217; failed.&lt;span style="mso-spacerun:yes;"&gt;&amp;#160; &lt;/span&gt;This may have occurred because changes have been made to the model structure without redeploying the model site. &lt;/span&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="font-size:8pt;"&gt;This can occur at execution time when you try and map two members twice. E.g. if your source is {2009, 2009} and your target is {Jan, Feb}. It doesn&amp;#8217;t like the 2009 in there twice. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:3;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:4;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;Each dimension scope in cross model mapping must be a list of concrete dimension members &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;"&gt;Unfortunate but true &amp;#8211; you can&amp;#8217;t use relative member functions such as Descendants in the 4&lt;sup&gt;th&lt;/sup&gt; and 5&lt;sup&gt;th&lt;/sup&gt; arguments of an allocate statement. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:4;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;Some of the model&amp;#39;s dimension members are invalid or missing. The model may need to be redeployed. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="font-size:8pt;"&gt;This is a run time error that can occur when you are trying to write to non-leaf members. The first argument of the allocate statement will contain the problem, as this is where the cells to receive the allocation are specified. Often it&amp;#8217;s because &amp;#8216;this&amp;#8217; has been entered as the first argument, which could result in using non-leafs for the argument, as it will inherit any non-leafs specified in the rule&amp;#8217;s scope statement. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:5;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:4;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;Allocation statement must have 5 parameters when they appear in Cross Model Allocation Rule. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;"&gt;&lt;span style="font-size:8pt;"&gt;Cross model allocation rules expect 5 parameters, in the correct format. So if you don&amp;#8217;t have 5 parameters, then there&amp;#8217;s the problem. However, be careful how you specify the parameters. For example, if you specify 2 members in the source mappings, such as [Time].[Monthly].[2007], [Time].[Monthly].[2008], then be sure to enclose them in brackets, otherwise the 2&lt;sup&gt;nd&lt;/sup&gt; member will be interpreted as your 5&lt;sup&gt;th&lt;/sup&gt; argument. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr style="mso-yfti-irow:6;mso-yfti-lastrow:yes;"&gt;         &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:windowtext 1pt solid;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:68;"&gt;&lt;span style="font-size:8pt;mso-bidi-font-weight:bold;"&gt;Unable to compile the cross model allocation rule. The target contains the dimension &amp;#8216;xyx&amp;#8217; but no explicit mapping has been provided. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;          &lt;td style="border-right:windowtext 1pt solid;padding-right:5.4pt;border-top:medium none;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:231.05pt;padding-top:0cm;border-bottom:windowtext 1pt solid;mso-border-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;"&gt;           &lt;p class="MsoNormal" style="margin-bottom:0pt;line-height:normal;mso-yfti-cnfc:64;"&gt;&lt;span style="font-size:8pt;"&gt;If an extra dimension(s) exists in the target model, the allocate statement requires you to specify what member you expect the data to be written to in that dimension. &lt;/span&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;            &lt;p&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0bc8b5b0-fff8-4077-9fbd-b7b3e690e62f" 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/PerformancePoint" rel="tag"&gt;PerformancePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PPS" rel="tag"&gt;PPS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PEL" rel="tag"&gt;PEL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cross%20Model%20Allocation" rel="tag"&gt;Cross Model Allocation&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7383" width="1" height="1"&gt;</description><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>BI Evening, TVP, 17th July 2008</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/07/04/bi-evening-tvp-17th-july-2008.aspx</link><pubDate>Fri, 04 Jul 2008 09:06:01 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:6994</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=6994</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/07/04/bi-evening-tvp-17th-july-2008.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ll be giving a talk titled &lt;strong&gt;&amp;#39;PEL Vs MDX&amp;#39;&lt;/strong&gt; at the UK SQL Server Community&amp;#39;s BI Evening on the 17th July at Microsoft&amp;#39;s TVP offices in Reading.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The content will be geared towards MS BI developers, and will highlight the differences between the two languages, with the aim that those with MDX experience will be able to make a fast start with PEL.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Also speaking is Jeremy Kirkup from TAH, on &lt;strong&gt;&amp;#39;Using Excel Services with Analysis Services and MOSS&amp;#39;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;If you are just starting to explore delivering BI solutions with Excel Services and SharePoint then there are some issues that it is wise to be aware of in advance. This session will describe some real world lessons gained while creating BI solutions which expose Analysis Services data through the Excel Web Access web part.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The Excel 2007 client has first class support for the some of the advanced features of Analysis services such as drill-through.&amp;#160; However, when exposing pivot tables to a browser through the Excel Web Access web part this feature is not available. The session will discuss a couple of approaches to implementing drill-through functionality for EWA based pivot tables using the MOSS SmartPart, AJAX and the Excel Web Services.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;You can register for the event &lt;a href="http://www.sqlserverfaq.com/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:74e8e948-e9f8-448b-a4d0-b652f3f84af3" 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/PEL" rel="tag"&gt;PEL&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/BI%20Evening" rel="tag"&gt;BI Evening&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=6994" 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/PEL/default.aspx">PEL</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Events/default.aspx">Events</category></item><item><title>Executing Rule Sets in PerformancePoint to Move Data</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/05/16/executing-rule-sets-in-performancepoint-to-move-data.aspx</link><pubDate>Fri, 16 May 2008 09:15:59 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:5542</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=5542</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/05/16/executing-rule-sets-in-performancepoint-to-move-data.aspx#comments</comments><description>&lt;p&gt;As I mentioned in my &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/04/06/pel-allocate-statement-vs-associations.aspx" target="_blank"&gt;post&lt;/a&gt; a few weeks a ago, the PEL Allocate statement is a powerful method of moving data between PerformancePoint models.&lt;/p&gt;  &lt;p&gt;Although it&amp;#39;s powerful, the end result of an Allocate statement is simply that the destination model will contain data that has been queried from the source model. What if the destination model already contains data for the target scope? If this is the case, then you will have double counting. When creating the Allocate rule, there is unfortunately no option that lets you decide what you want to do with existing data. Ideally you need to have the &amp;#39;Existing Data&amp;#39; option that you get when running an association, which gives you the &amp;#39;Append&amp;#39;, &amp;#39;Scoped Replacement&amp;#39; and &amp;#39;Full Replacement&amp;#39; options.&lt;/p&gt;  &lt;p align="left"&gt;To get around this, I tend to place two rules inside a rule set. The first rule is a SQL implementation assignment rule with the same scope as the allocate rule, and deletes existing data by using the PEL statement this = NULL inside the rule. Then the second rule is the allocate statement, which appends the data. This is shown below:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/ExecutingRuleSetsinPerformancePoint_76DD/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="158" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/ExecutingRuleSetsinPerformancePoint_76DD/image_thumb_1.png" width="539" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="left"&gt;The idea is then to execute the rule set, which will execute each of its rules in order. The advantage to doing this is that your whole data movement process can be executed in one clean step (perhaps scheduled or via Excel), without the hassle of executing several individual rules.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:14af93a3-f5ed-4bb5-a7d0-b7deeaa61a6e" 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/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=5542" width="1" height="1"&gt;</description><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>Assumption Model Design Techniques and Business Rules</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/05/08/assumption-model-design-techniques-and-business-rules.aspx</link><pubDate>Thu, 08 May 2008 13:57:05 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:5163</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=5163</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/05/08/assumption-model-design-techniques-and-business-rules.aspx#comments</comments><description>&lt;p&gt;PerformancePoint assumption models are very useful if you want the data in one model to drive and affect another model. However, if you&amp;#8217;ve been using assumption models, then the chances are that you may have noticed that they can sometimes be a bit awkward to use. This post highlights a couple of issues that I&amp;#8217;ve experienced with assumption models, and provides a few workarounds.&lt;/p&gt;  &lt;p align="left"&gt;Firstly, when you initially link the assumption model to the main model, you may get the error message &amp;#8216;the assumption model uses different member sets for the following dimensions&amp;#8217;, as shown below:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/PPSAssumptionModelDesignTechniques_143DC/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="132" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/PPSAssumptionModelDesignTechniques_143DC/image_thumb.png" width="382" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;Lets presume that you ignore this warning and continue to link to the assumption model. Further down the line, when you come to write your PEL rule to pick up the assumption model data, you may find that you get an error when validating the rule. This will occur if you want to populate a member in one member set by referencing a member in another member set, which resides in the assumption model.&lt;/p&gt;  &lt;p align="left"&gt;To illustrate this, if we want to populate an account called &amp;#8216;Total Sales&amp;#8217; in the &amp;#8216;Operational&amp;#8217; member set of the main model by using an account called &amp;#8216;Price&amp;#8217; in the &amp;#8216;Drivers&amp;#8217; member set in the assumption model, then we would have the following PEL rule:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:white;color:blue;"&gt;scope &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(
&lt;/span&gt;&lt;span style="background:white;color:purple;"&gt;[Scenario].[All Members].[Forecast]&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;,
&lt;/span&gt;&lt;span style="background:white;color:purple;"&gt;[Account].[Operational].[Sales]&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;) ;
     
&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;this &lt;/span&gt;&lt;span style="background:white;color:gray;"&gt;= &lt;/span&gt;&lt;span style="background:white;color:purple;"&gt;[Account].[Operational].[Volume] &lt;/span&gt;&lt;span style="background:white;color:gray;"&gt;* &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;MODEL&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;(&lt;/span&gt;&lt;span style="background:white;color:purple;"&gt;[Sales Assumptions]&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;), &lt;/span&gt;&lt;span style="background:white;color:purple;"&gt;[Account].[Drivers].[Price]&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;);

&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;end scope&lt;/span&gt;&lt;span style="background:white;color:black;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;However, when validating this rule we get told &amp;#8220;No hierarchy Drivers exists in dimension Account&amp;#8221;. The only account member set that PerformancePoint will let you use in the above rule is &amp;#39;Operational&amp;#39;. Note: you&amp;#39;ll be ok if &amp;#39;Price&amp;#39; exists in the main model, but you will just need to refer to it as [Account].[Operational].[Price]. But if &amp;#39;Price&amp;#39; doesn&amp;#39;t exist in the main model, then a different approach is needed..... &lt;/p&gt;

&lt;p&gt;The simple way around it is to use an approach found in the Alpine Ski House sample application. Add the accounts (if that&amp;#8217;s the dimension causing you problems) into another dimension called Business Driver. You can then use the Business Driver dimension in your PEL rule, as PerformancePoint is more than happy for you to reference assumption model specific dimensions. This is shown below:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;scope &lt;/span&gt;&lt;span style="color:black;"&gt;(
&lt;/span&gt;&lt;span style="color:purple;"&gt;[Scenario].[All Members].[Forecast]&lt;/span&gt;&lt;span style="color:black;"&gt;,
&lt;/span&gt;&lt;span style="color:purple;"&gt;[Account].[Operational].[Sales]&lt;/span&gt;&lt;span style="color:black;"&gt;) ;

&lt;/span&gt;&lt;span style="color:green;"&gt;//The rule is almost identical, but validates ok as we&amp;#39;re using the BusinessDriver dimension.     
&lt;/span&gt;&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;[Account].[Operational].[Volume] &lt;/span&gt;&lt;span style="color:gray;"&gt;* &lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;MODEL&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;[Sales Assumptions]&lt;/span&gt;&lt;span style="color:black;"&gt;), &lt;/span&gt;&lt;span style="color:purple;"&gt;[BusinessDriver].[Drivers].[Price]&lt;/span&gt;&lt;span style="color:black;"&gt;);

&lt;/span&gt;&lt;span style="color:blue;"&gt;end scope&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Another problem that you may experience is when you have a difference in granularity between member sets used in the assumption model and the main model. For example, you may have an Entity member set called &amp;#8216;Regional&amp;#8217; used in the assumption model, but a more detailed member set used for the Entity dimension in the main model.&lt;/p&gt;

&lt;p&gt;So in the above example, we want to populate members in the more detailed &amp;#39;Company&amp;#39; member set by using a value from the member&amp;#39;s parent in the higher level &amp;#39;Regional&amp;#39; member set. In order to do this, we can just use the Parent function on the current member of the main model&amp;#39;s entity member set. Even though we&amp;#39;ve referenced the main model member set inside the MODEL function, if the current member&amp;#39;s parent exists in the assumption model, then it will pick it up without any problems:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;scope &lt;/span&gt;&lt;span style="color:black;"&gt;(
&lt;/span&gt;&lt;span style="color:purple;"&gt;[Scenario].[All Members].[Forecast]&lt;/span&gt;&lt;span style="color:black;"&gt;,
&lt;/span&gt;&lt;span style="color:purple;"&gt;[Account].[Operational].[Sales],
&lt;/span&gt;&lt;span style="color:black;"&gt;Descendants(&lt;/span&gt;&lt;span style="color:purple;"&gt;[Entity].[Company].[TOT]&lt;/span&gt;&lt;span style="color:black;"&gt;, 1073741823, &lt;/span&gt;&lt;span style="color:blue;"&gt;leaves&lt;/span&gt;&lt;span style="color:black;"&gt;)) ;
     
&lt;/span&gt;&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;[Account].[Operational].[Volume] &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
      &lt;/span&gt;&lt;span style="color:green;"&gt;//Its ok here to use [Dimension].[Main Model Member Set].CurrentMember.Parent
      &lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;MODEL&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;[Sales Assumptions]&lt;/span&gt;&lt;span style="color:black;"&gt;), &lt;/span&gt;&lt;span style="color:purple;"&gt;[Entity].[Company]&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:black;"&gt;CurrentMember&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:black;"&gt;Parent,
      &lt;/span&gt;&lt;span style="color:purple;"&gt;[BusinessDriver].[Drivers].[Price]&lt;/span&gt;&lt;span style="color:black;"&gt;)

&lt;/span&gt;&lt;span style="color:blue;"&gt;end scope&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;So both very simple design techniques, but it&amp;#8217;s worth being aware of them before you actually start building your models.&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6b6042cd-b333-49fa-8be1-119f76c5d75a" 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/Assumptions" rel="tag"&gt;Assumptions&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;a href="http://technorati.com/tags/PEL" rel="tag"&gt;PEL&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=5163" width="1" height="1"&gt;</description><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><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Assumptions/default.aspx">Assumptions</category></item><item><title>PEL Allocate Statement Vs Associations</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/04/06/pel-allocate-statement-vs-associations.aspx</link><pubDate>Sun, 06 Apr 2008 22:33:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:3382</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=3382</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/04/06/pel-allocate-statement-vs-associations.aspx#comments</comments><description>&lt;p&gt;PerformancePoint provides you with a few options when you want to move data between models, the most obvious of which is Associations. However, there is also the powerful PEL Allocate statement....&lt;/p&gt;
&lt;p&gt;So which method should you use to move data? Associations are very easy to setup and will transfer your data for you - all out of the box. However, they do have a few limitations, namely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can only apply a minimum, maximum or total aggregation to the source data; &lt;/li&gt;
&lt;li&gt;You can&amp;#39;t have parameters to dynamically select members;&lt;/li&gt;
&lt;li&gt;If you delete a dimension that&amp;#39;s used in an association, then you can&amp;#39;t view or edit the association. Although there should hopefully be no need to do this in production(!), it can be a bit annoying during development.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;By writing a PEL Data Movement rule of type PushCrossModelAllocation or PullCrossModelAllocation, we get bit more flexibility. With the PEL Allocate statement you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use PEL functions or operators to alter the source value that gets written to the target model; &lt;/li&gt;
&lt;li&gt;Similarly, apply a ratio to the source value so that we only transfer the relevant portion of the whole data value. E.g. we can transfer 20% of head office costs; &lt;/li&gt;
&lt;li&gt;Use rule parameters to dynamically select members. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So if you find that Associations don&amp;#39;t quite do what you need, then how do you use a PEL Allocate rule? The following is an example of a simple PushCrossModelAllocation PEL Allocate statement:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;scope 
&lt;/span&gt;&lt;span style="COLOR:black;"&gt;(
  &lt;/span&gt;&lt;span style="COLOR:teal;"&gt;$TransferScenario$&lt;/span&gt;&lt;span style="COLOR:black;"&gt;,
  &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Time].[Monthly].[All]&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;.&lt;/span&gt;&lt;span style="COLOR:black;"&gt;LeafMembers,
  &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Organisation].[Europe].[France]&lt;/span&gt;&lt;span style="COLOR:black;"&gt;,
  &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Account].[All Members].[Total Cost]&lt;/span&gt;&lt;span style="COLOR:black;"&gt;
&lt;/span&gt;&lt;span style="COLOR:black;"&gt;) ;
     
  &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;Allocate
  &lt;/span&gt;&lt;span style="COLOR:black;"&gt;(
    &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//The scope of cells that will receive the data
    //The this keyword indicates the target is the same cells as defined in the scope
    &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;&lt;span style="COLOR:black;"&gt;,
    &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//The source value. If its the same as the scope then we just use ()
    //Or we can apply a simple calculation
    &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Account].[All Members].[Volume] &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;* &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Account].[All Members].[Cost Per Unit]&lt;/span&gt;&lt;span style="COLOR:black;"&gt;,
    &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//The scaling ratio that gets applied to the source value
    //0.2 indicates that we only want to apply a fraction of the source value
    &lt;/span&gt;&lt;span style="COLOR:black;"&gt;0.2,
    &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//The last two arguments are only relevant for Push and PullCrossModelAllocation
    //They specify the mappings between the source and target members
    //Here I want France (in the source) to be mapped to France (in the target)
    &lt;/span&gt;&lt;span style="COLOR:black;"&gt;(
      &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Organisation].[Europe].[France]  
    &lt;/span&gt;&lt;span style="COLOR:black;"&gt;),
    (
      &lt;/span&gt;&lt;span style="COLOR:purple;"&gt;[Organisation].[Group].[France]
    &lt;/span&gt;&lt;span style="COLOR:black;"&gt;)
  ) ;

&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;end scope&lt;/span&gt;&lt;span style="COLOR:black;"&gt;;
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;There are a fair few arguments to the Allocate statement, but I&amp;#39;ve found that a good way to learn what its doing is to debug the rule in order to see the MDX statement that gets generated. The MDX query that gets generated for the above PEL statement is as follows:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:blue;"&gt;WITH CELL CALCULATION &lt;/span&gt;queryCalc 
&lt;span style="COLOR:blue;"&gt;FOR
 &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//This part of the MDX comes from the 1st argument in the PEL statement
 &lt;/span&gt;&amp;#39;([Account].[All Members].[Account].&amp;amp;[5005],
 [Measures].[Value],
 [Scenario].[All Members].[Scenario].&amp;amp;[1],
 Descendants([Time].[Monthly].[(All)].&amp;amp;[0], 1073741823, LEAVES),
 [Organisation].[Europe].[Level 02].&amp;amp;[11])&amp;#39; 
&lt;span style="COLOR:blue;"&gt;AS
 &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//This is arguments 2 and 3 of the PEL Allocate statement
 //Namely the simple A*B calculation and then multiplying the value by the ratio
 &lt;/span&gt;((([Account].[All Members].[Account].&amp;amp;[5003],[Measures].[Value]) *
 ([Account].[All Members].[Account].&amp;amp;[5004],[Measures].[Value])) * 0.2)
&lt;span style="COLOR:blue;"&gt;SELECT NON EMPTY 
 &lt;/span&gt;([Account].[All Members].[Account].&amp;amp;[5005],
 [Measures].[Value], 
 &lt;span style="COLOR:maroon;"&gt;NonEmpty&lt;/span&gt;(({[Scenario].[All Members].[Scenario].&amp;amp;[1]},
 {&lt;span style="COLOR:blue;"&gt;Descendants&lt;/span&gt;([Time].[Monthly].[(All)].&amp;amp;[0], 1073741823, &lt;span style="COLOR:blue;"&gt;LEAVES&lt;/span&gt;)},
 {[Organisation].[Europe].[Level 02].&amp;amp;[11]}))) 
 &lt;span style="COLOR:blue;"&gt;properties &lt;/span&gt;[Scenario].[All Members].&lt;span style="COLOR:blue;"&gt;Key &lt;/span&gt;,
 [Time].[Monthly].&lt;span style="COLOR:blue;"&gt;Key &lt;/span&gt;,
 [Organisation].[Europe].&lt;span style="COLOR:blue;"&gt;Key &lt;/span&gt;,
 [Account].[All Members].&lt;span style="COLOR:blue;"&gt;Key 
ON COLUMNS 
FROM &lt;/span&gt;[Europe]&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Here we can clearly tell (as marked in the above MDX code) how the first, second and third PEL arguments translate into MDX. If you find that the allocate statement is not quite doing what you want, then its quite useful to execute the MDX within SSMS to figure out exactly how the source model is being queried.&lt;/p&gt;
&lt;p&gt;Once you&amp;#39;re finished coding your business rule it can be executed via a scheduled job, manually, or via Excel.&lt;/p&gt;
&lt;p&gt;To be fair to Associations, you&amp;#39;re probably more likely to use them&amp;nbsp;for bulk transfer of data, perhaps to facilitate cross model&amp;nbsp;consolidation -&amp;nbsp;and they&amp;#39;re&amp;nbsp;extremely useful for this purpose.&amp;nbsp;The Allocate statement is perhaps more relevant for specific pieces of data that need to be adjusted in some way before being transferred to the destination. Despite this, the Allocate statement is the more flexible method and will allow you to support more&amp;nbsp;sophisticated cross model data transfer - if it’s needed.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:71deb226-5f21-49c0-8576-2e6fd7f2ba57" 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/PerformancePoint" rel="tag"&gt;PerformancePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Allocate" rel="tag"&gt;Allocate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PEL" rel="tag"&gt;PEL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MDX" rel="tag"&gt;MDX&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=3382" 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/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PEL/default.aspx">PEL</category></item></channel></rss>