<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Sacha Tomey&amp;#39;s blog</title><link>http://blogs.adatis.co.uk/blogs/sachatomey/default.aspx</link><description>Molding the Microsoft BI Stack</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/SachaTomey" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Creating a Custom Gemini/PowerPivot Data Feed – Method 1 – ADO.NET Data Services</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/_mI4w23f4ck/creating-a-custom-gemini-powerpivot-data-feed-method-1-ado-net-data-services.aspx</link><pubDate>Tue, 20 Oct 2009 15:43:31 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7543</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7543</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/20/creating-a-custom-gemini-powerpivot-data-feed-method-1-ado-net-data-services.aspx#comments</comments><description>&lt;p&gt;There are already a few good Gemini/PowerPivot blogs that provide an introduction into what it is and does so there is no need for repetition.&amp;#160; What I haven’t seen are examples of how existing investments can be harnessed for Gemini/PowerPivot based self-service analytics.&lt;/p&gt;  &lt;p&gt;This series of posts focuses on various ways of creating Custom Data Feeds that can be used by Gemini/PowerPivot natively – Providing a direct feed from otherwise closed systems opens up new channels of analytics to the end user.&lt;/p&gt;  &lt;p&gt;Gemini/PowerPivot supports reading data from Atom-based data feeds, this post looks at a quick way of creating an Atom-based feed that can be consumed by Gemini/PowerPivot.&amp;#160; By far the simplest way to develop an Atom-based data feed is to employ &lt;a href="http://msdn.microsoft.com/en-us/data/bb931106.aspx" target="_blank"&gt;ADO.NET Data Services&lt;/a&gt; in conjunction with &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank"&gt;ADO.NET Entity Framework&lt;/a&gt;.&amp;#160; With very few (in fact one and a bit!) lines of code, a data source can be exposed as a feed that Gemini/PowerPivot can read natively.&amp;#160; &lt;/p&gt;  &lt;p&gt;I am going to use the AdventureWorksDW sample hosted by a SQL Server 2008 R2 instance for this – obviously Gemini/PowerPivot natively reads SQL Server databases, so creating a custom feed over the top may seems a little pointless.&amp;#160; However, this technique may be useful for quick wins in several scenarios, including:&lt;/p&gt;  &lt;p&gt;- Preventing the need for users to connect directly to the underlying data source.    &lt;br /&gt;- Restricting access to various elements of the data source (tables/columns etc)     &lt;br /&gt;- Applying simple business logic to raw data.&lt;/p&gt;  &lt;p&gt;ADO.NET Data Services are a form of Windows Communication Foundation (WCF) services, and therefore can be hosted in various environments.&amp;#160; Here, I will simply host the ADO.NET Data Service inside an ASP.NET site.&lt;/p&gt;  &lt;p&gt;To create a Native Gemini/PowerPivot feed, you take seven steps:&lt;/p&gt;  &lt;p&gt;1 - Create ASP.NET Web Application    &lt;br /&gt;2 - Create Entity Data Model     &lt;br /&gt;3 - Create the Schema     &lt;br /&gt;4 - Create the Data Service     &lt;br /&gt;5 - Load From Data Feed     &lt;br /&gt;6 - Create Relationships     &lt;br /&gt;7 - Test&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1) Create ASP.NET Web Application&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m using Visual Studio 2008 here to create an &lt;strong&gt;ASP.NET Web Application&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_0ACF3FCE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_319D560E.png" width="504" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2) Create Entity Data Model&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Add an &lt;strong&gt;ADO.NET Entity Data Model&lt;/strong&gt; item to the project, these files have a .edmx extension and allow us to create a schema that maps to the underlying database objects.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_4A992653.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_2A7E1996.png" width="504" height="304" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3) Create the Schema&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We simply require a 1:1 mapping so will ‘&lt;strong&gt;Generate from Database&lt;/strong&gt;’.&amp;#160; Incidentally, the ‘Empty Model’ option allows you to build a conceptual model of the database resulting in custom classes that can be optionally mapped to the database objects later. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_71673C93.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_0A630CD9.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Create a &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; connection to AdventureWorksDW2008.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_235EDD1E.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_6A48001B.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select the appropriate database objects, I’ve selected the following tables:&lt;/p&gt;  &lt;p&gt;- DimCurrency    &lt;br /&gt;- DimCustomer     &lt;br /&gt;- DimDate     &lt;br /&gt;- DimProduct     &lt;br /&gt;- DimPromotion     &lt;br /&gt;- DimSalesTerritory     &lt;br /&gt;- FactInternetSales&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_353B70EB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_1116165C.png" width="504" height="448" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once the wizard has completed, a new .edmx and associated cs file is created that respectively contain an Entity Relationship Diagram and a set of Auto Generated Classes that represent the database objects.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Due to the way the Entity Framework handles Foreign Key Constraints we have to apply a workaround to ensure the Foreign Keys on the FactInternetSales table are exposed and brought into Gemini/PowerPivot.&amp;#160; A previous post &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/16/hack-exposing-foreign-keys-as-properties-through-the-ado-net-entity-framework.aspx" target="_blank"&gt;Exposing Foreign Keys as Properties through ADO.NET Entity Framework&lt;/a&gt; walks through the workaround.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image31_67E515EB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image31_thumb_156635AF.png" width="504" height="454" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image21_3C344BEF.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image21_thumb_2742C97C.png" width="238" height="43" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4) Create the Data Service&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Add an &lt;strong&gt;ADO.NET Data Service&lt;/strong&gt; item to the project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_1BD36DB1.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_62BC90AE.png" width="504" height="304" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The service class inherits from a generic version of the System.Data.Services.DataService object, so we need to inform the compiler what class to base the generic object on.&amp;#160; We essentially want to base our Data Service on the class representing our newly created Entity Data Model.&amp;#160; The class name is derived from the database name, unless changed when the Entity Data Model was created, so in our case the class name is AdventureWorksDW2008Entities.&lt;/p&gt;  &lt;p&gt;The auto generated service class contains a ‘TODO’ comment that asks you to ‘put your data source class name here’.&amp;#160; The comment needs replacing with AdventureWorksDW2008Entities.&lt;/p&gt;  &lt;p&gt;The final step is to expose the resources in the Entity Data Model.&amp;#160; For security reasons, a data service does not expose any resources by default.&amp;#160; Resources need to be explicitly enabled.&lt;/p&gt;  &lt;p&gt;To allow read only access to the resources in the Entity Data Model the InitializeService method needs updating with a single line of code.&amp;#160; The code snippet below details the final class implementation, notice the AdventureWorksDW2008Entities reference at line 1 and the the explicit resource enablement at line 6. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0faa6294-0c75-484d-b329-40b8a7e39245" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GeminiDataService&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;DataService&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;AdventureWorksDW2008Entities&lt;/span&gt;&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;// This method is called only once to initialize service-wide policies.&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; InitializeService(&lt;span style="color:#2b91af;"&gt;IDataServiceConfiguration&lt;/span&gt; config)&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;config.SetEntitySetAccessRule(&lt;span style="color:#a31515;"&gt;&amp;quot;*&amp;quot;&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;EntitySetRights&lt;/span&gt;.AllRead);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;That’s all that’s needed, by default, ADO.NET Data Services conform to the Atom standard, so in theory the Service is ready to be consumed by Gemini/PowerPivot.&lt;/p&gt;  &lt;p&gt;Before we try, it’s worth giving the service a quick test, building and running the solution (F5) launches Internet Explorer navigating to the Service hosted by the ASP.NET Development Server.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_7BB860F3.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_14B43139.png" width="504" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;You are first presented with an XML document containing elements that represent database objects, you can further drill into the objects by amending the URL.&amp;#160; For example, if you want to see the contents of the DimPromotion table then append DimPromotion to the end of the URL: &lt;strong&gt;http://localhost:56867/GeminiDataService.svc/DimPromotion&lt;/strong&gt; (Case sensitive)&lt;/p&gt;  &lt;p&gt;Note:&amp;#160; You may need to turn off Feed Reader View in Internet Explorer to see the raw XML (Tools-&amp;gt;Internet Options–&amp;gt;Content-&amp;gt;Settings–&amp;gt;Turn On Feed Reader View – make sure this is unchecked)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_708ED6A9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5073C9EC.png" width="504" height="450" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;As a slight aside, the URL can be further enhanced to, filter, top n rows, extract certain properties etc etc. Here are a couple of examples:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;URL&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Effect&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer?$top=5&lt;/td&gt;        &lt;td&gt;Return the top 5 Customers&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer(11002)&lt;/td&gt;        &lt;td&gt;Return Customer with id 11002&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimCustomer(11002)/FirstName&lt;/td&gt;        &lt;td&gt;Return the First Name of Customer 11002&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;http://localhost:56867/GeminiDataService.svc/DimProduct(310)?$exapnd=FactInternetSales&lt;/td&gt;        &lt;td&gt;Returns Product with id 310 and all related Internet Sales Records&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;Confident that the feed is working, we can now deploy the service, and start using the feed in Gemini/PowerPivot.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 5) Load From Data Feed&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Open up Excel 2010, launch the Gemini/PowerPivot Client (by selecting ‘Load &amp;amp; Prepare Data’)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_3058BD2F.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_49548D74.png" width="332" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select ‘From Data Feed’ from the ‘Get External Data’ section of the Gemini/PowerPivot Home Ribbon to launch the Table Import Wizard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_34630B01.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_103DB072.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Specify the Url from the ADO.NET Data Services feed created earlier, in my case: &lt;a href="http://localhost:56867/GeminiDataService.svc"&gt;http://localhost:56867/GeminiDataService.svc&lt;/a&gt; as the &amp;#39;Data Feed Url’ and click Next.&lt;/p&gt;  &lt;p&gt;Incidentally, you can use the majority of the enhanced Urls to, for example only select the DimProduct table should you so wish, however by specifying the root Url for the service you have access to all objects exposed by the service.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_1447FE44.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5B312141.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;From the Table Import Wizard Select the required tables, in my case I’ll select them all.&amp;#160; (You can optionally rename and filter the feed objects here too).&lt;/p&gt;  &lt;p&gt;Following the summary screen, the Gemini/PowerPivot Client then gets to work importing the data from the ADO.NET Data Service:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_742CF186.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_6903673C.png" width="504" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once completed, Gemini/PowerPivot displays all the data from all of the feed objects as if it came directly from the underlying database.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_2FEC8A3A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_61E42AC4.png" width="504" height="479" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 6) Create Relationships&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There is one final step before we can test our model using an Excel Pivot Table.&amp;#160; We need to create the relationships between the tables we have imported.&amp;#160; The Gemini/PowerPivot Client provides a simple, if a little onerous way of creating relationships, the ‘Create Relationship’ action on the Relationships section of the Home Ribbon launches the Create Relationship wizard:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_41C91E07.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_5AC4EE4C.png" width="504" height="192" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Each table needs relating back to the primary Fact table which results in the following relationships:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_73C0BE91.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_21AE114A.png" width="504" height="329" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 7) Test&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We are now ready to start our analysis, selecting PivotTable from the View section of the Gemini/PowerPivot Client Home ribbon creates a pivot table in the underlying Excel workbook attached to your custom fed Gemini/PowerPivot data model.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_53A5B1D4.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="image" border="0" alt="image" align="left" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_0193048D.png" width="154" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/image_2F805745.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/image_thumb_487C278A.png" width="944" height="205" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So, to allow fast access to, for example, potentially sensitive data, through Gemini/PowerPivot you can quickly build a custom data feed that can be consumed natively by the Gemini/PowerPivot Client data feed functionality.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7543" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/_mI4w23f4ck" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Excel/default.aspx">Excel</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Gemini/default.aspx">Gemini</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/ADO.NET/default.aspx">ADO.NET</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Data+Service/default.aspx">Data Service</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PowerPivot/default.aspx">PowerPivot</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Atom/default.aspx">Atom</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Feed/default.aspx">Feed</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/20/creating-a-custom-gemini-powerpivot-data-feed-method-1-ado-net-data-services.aspx</feedburner:origLink></item><item><title>HACK: Exposing Foreign Keys as Properties through the ADO.NET Entity Framework</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/2iB3ko2vals/hack-exposing-foreign-keys-as-properties-through-the-ado-net-entity-framework.aspx</link><pubDate>Fri, 16 Oct 2009 15:39:20 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7541</guid><dc:creator>sachatomey</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7541</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/16/hack-exposing-foreign-keys-as-properties-through-the-ado-net-entity-framework.aspx#comments</comments><description>&lt;p&gt;First post for months; the &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/01/29/rip-performancepoint-planning.aspx" target="_blank"&gt;PerformancePoint Planning&lt;/a&gt; announcement forced some redirection and rebuilding.&amp;#160; We’ve grieved, we’ve moaned, but at some point, you just have to move on.&lt;/p&gt;  &lt;p&gt;-----------------&lt;/p&gt;  &lt;p&gt;I’m not a fan of hacks – it normally means you are doing something wrong, but in this case, where I’m after a quick win, I’ve had to work out and resort to a bit of a hack.&amp;#160; It actually looks like the issue I’m facing maybe addressed in Entity Framework v2 (Microsoft .NET 4.0) – so maybe it’s more of a workaround than a hack after all ;o)&lt;/p&gt;  &lt;p&gt;I’m using the ADO.NET Entity Framework and ADO.NET Data Services to expose a subsection of a database for consumption by Gemini.&amp;#160; In order to relate the exposed database objects together in Gemini, I need to apply this hack to ensure I have Foreign Keys available in my Gemini models to support creating the relationships.&amp;#160; By default, the Entity Framework exposes Foreign Keys as Navigation Properties rather than Scalar Properties.&amp;#160; Gemini does not consume Navigation Properties.&lt;/p&gt;  &lt;p&gt;Lets take the scenario where I want to create an Entity Framework Model based on the following tables from the AdventureWorksDW2008 sample database:&lt;/p&gt;  &lt;p&gt;-FactInternetSales    &lt;br /&gt;-DimCustomer     &lt;br /&gt;-DimProduct     &lt;br /&gt;-DimSalesTerritory&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1)&amp;#160; Identify the table(s) that contain Foreign Keys.&lt;/strong&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;In this case FactInternetSales.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2)&amp;#160; Load those table(s) into the Entity Framework Model on their own.&lt;/strong&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;This ensures the Foreign Keys are set as Scalar Properties.&amp;#160; If you load in all the tables at once, the Foreign Keys are not exposed as Scalar Properties.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3)&amp;#160; Load in the related tables. (DimCustomer, DimProduct, DimSalesTerritory)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;At this point a bunch of Navigation Properties would have been set up, along with relationships between the related tables but the trouble now is the project will no longer build.&amp;#160; If you try you receive the following error for each relationship:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;Error 3007: Problem in Mapping Fragments starting at lines 322, 428: Non-Primary-Key column(s) [CustomerKey] are being mapped in both fragments to different conceptual side properties - data inconsistency is possible because the corresponding conceptual side properties can be independently modified.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4) Manually remove the relationships between tables.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Clicking on the relationship line on the diagram and hitting delete, removes the relationship.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 5) Remove all Association Sets&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By editing the edmx file manually in a text or XML editor you need to remove all &amp;lt;AssociationSet&amp;gt;…&amp;lt;/AssociationSet&amp;gt; occurrences from the &amp;lt;EntityContainer&amp;gt; section: &lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&amp;lt;EntityContainer Name=&amp;quot;AdventureWorksDW2008Model1StoreContainer&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntitySet Name=&amp;quot;DimCustomer&amp;quot; EntityType=&amp;quot;AdventureWorksDW2008Model1.Store.DimCustomer&amp;quot; … /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntitySet Name=&amp;quot;DimProduct&amp;quot; EntityType=&amp;quot;AdventureWorksDW2008Model1.Store.DimProduct&amp;quot; … /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntitySet Name=&amp;quot;DimSalesTerritory&amp;quot; EntityType=&amp;quot;AdventureWorksDW2008Model1.Store.DimSalesTerritory&amp;quot; … /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntitySet Name=&amp;quot;FactInternetSales&amp;quot; EntityType=&amp;quot;AdventureWorksDW2008Model1.Store.FactInternetSales&amp;quot; … /&amp;gt;       &lt;br /&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;AssociationSet Name=&amp;quot;FK_FactInternetSales_DimCustomer&amp;quot; Association=&amp;quot;AWDW08.FK_FactInternetSales_DimCustomer&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;DimCustomer&amp;quot; EntitySet=&amp;quot;DimCustomer&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;FactInternetSales&amp;quot; EntitySet=&amp;quot;FactInternetSales&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/AssociationSet&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;AssociationSet Name=&amp;quot;FK_FactInternetSales_DimProduct&amp;quot; Association=&amp;quot;AWDW08.FK_FactInternetSales_DimProduct&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;DimProduct&amp;quot; EntitySet=&amp;quot;DimProduct&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;FactInternetSales&amp;quot; EntitySet=&amp;quot;FactInternetSales&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/AssociationSet&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;AssociationSet Name=&amp;quot;FK_FactInternetSales_DimSalesTerritory&amp;quot; Association=&amp;quot;ADW08.FK_FactInternetSales_DimSalesTerritory&amp;quot;&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;DimSalesTerritory&amp;quot; EntitySet=&amp;quot;DimSalesTerritory&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;End Role=&amp;quot;FactInternetSales&amp;quot; EntitySet=&amp;quot;FactInternetSales&amp;quot; /&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/AssociationSet&amp;gt;&lt;/font&gt;       &lt;br /&gt;&amp;lt;/EntityContainer&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The project should now build, with the foreign keys exposed as Scalar Properties.&amp;#160; Obviously no inherent relationships exist, so this could be dangerous in certain applications.&amp;#160; For Gemini however, providing you setup the relationships manually, it works a treat.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7541" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/2iB3ko2vals" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Gemini/default.aspx">Gemini</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/10/16/hack-exposing-foreign-keys-as-properties-through-the-ado-net-entity-framework.aspx</feedburner:origLink></item><item><title>RIP PerformancePoint Planning</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/W0JbBZndO6A/rip-performancepoint-planning.aspx</link><pubDate>Thu, 29 Jan 2009 10:55:03 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7506</guid><dc:creator>sachatomey</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7506</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/01/29/rip-performancepoint-planning.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s nearly a week since the announcement that shook the (PPS) world !&amp;#160; It&amp;#39;s been a bit difficult to report on; generally the Adatis blogs try and offer solutions to problems we have encountered out in the real-world.&amp;#160; Now I could say something crass here about the real-world and the decision makers involved...but that would be childish right?&lt;/p&gt;  &lt;p&gt;If I was to offer up my feelings, they wouldn&amp;#39;t be that far from &lt;a href="http://alanwhitehouse.wordpress.com/2009/01/26/pps-planning-being-discontinued/#more-526"&gt;Alan Whitehouse&amp;#39;s excellent post on the subject&lt;/a&gt;.&amp;#160; If I had an ounce of class about me, it would be much more aligned with &lt;a href="http://adriandownes.blogspot.com/2009/01/on-2009-goto-2006.html"&gt;Adrian&amp;#39;s poignant discussion opener&lt;/a&gt;, the one with the sharp-witted title, but alas....&lt;/p&gt;  &lt;p&gt;We&amp;#39;ve spent the best part of the week speaking to customers, partners and Microsoft about what to do next.&amp;#160; The timing was choice - would you believe, we actually had three new PerformancePoint Planning phases kicking off this week, according to my project plan - I should be setting up Kerberos as we speak..&amp;#160; [There is always a positive right?]&lt;/p&gt;  &lt;p&gt;Some customers are carrying on regardless, they... &lt;/p&gt;  &lt;p&gt;...already have planning deployments and are too far invested and dependent to back out at this stage or,&amp;#160; &lt;/p&gt;  &lt;p&gt;...have a short-term view (That&amp;#39;s not a criticism) and need a &amp;quot;quick&amp;quot; fix with a low TCO to get them through some initial grief.&amp;#160; (Typically these customers are going through rapid organisational change, or form part of a recent acquisition and, to help them see the wood from the trees during the transition, require short/sharp solutions)&lt;/p&gt;  &lt;p&gt;Other customers, with longer-term views, feel the product, or more importantly, the suitably skilled resource pool, will drain away far quicker than the life-span of the much touted Microsoft product support.&amp;#160; I have to agree - Fact - Adatis will not be employing or training anymore PerformancePoint Planning Consultants.&amp;#160; I doubt many other consulting firms will either.&lt;/p&gt;  &lt;p&gt;It&amp;#39;s those customers with the longer-term view that are the ones currently in limbo - they are experiencing pain, they need pain relief, what should they do - wait and see what Office 14/15 offers? (There is talk of some planning functionality appearing in future Office versions - what truth there is in that..?).&lt;/p&gt;  &lt;p&gt;The Dynamics customers could wait for the resurrection of Forecaster - I do have information on good authority that they will be developing Forecaster to be closer, in terms of flexibility, to PPS Planning.&amp;#160; I had originally heard the opposite view in that Forecaster will be replaced with a cut down version of PPS Planning.&amp;#160; Either way, I&amp;#39;m sure some of the PPS Planning code-base will be utilised, which could end rumours of PPS Planning being &amp;#39;given&amp;#39; to the community as some form of community/open-source arrangement.&amp;#160; An arrangement that is, in my opinion, a non-starter anyway, &amp;quot;Hey, Mr FD, We&amp;#39;ve got this great open-source budgeting and forecasting product we think you should implement!&amp;quot; - yeah right !&lt;/p&gt;  &lt;p&gt;Another rumour (and mixed message) is that Service Pack 3 will contain some of the requested features that were earmarked for version 2 (After all, the code has already been written, right?) this rumour was actually started by Guy Weismantel in his &lt;a href="http://download.microsoft.com/download/A/E/E/AEEE26CB-1536-4EC9-809E-536F6E49A1BB/Guy_Weismantel_BI_Announcement_MBR.wmv" target="_blank"&gt;Announcement Video&lt;/a&gt;.&amp;#160; However, the information I have since received, clearly states that Service Pack 3 will contain stability and bug fixes only - so which is it to be?&amp;#160; It&amp;#39;s unlikely for a service pack to contain new features, but it&amp;#39;s not unheard of; anyone remember the original release of Reporting Services?&amp;#160; That arrived as part of a service pack for SQL Server 2000.&lt;/p&gt;  &lt;p&gt;The burning question I cannot get answered is, have Microsoft actually stepped out of the BPM market for good?&amp;#160; We are told that Excel, Sharepoint and SQL Server provide BPM - I can&amp;#39;t see, without Planning, how they can.&amp;#160; Short of hard-coded values, renewed Sharepoint/Excel hell, another vendor or bespoke planning solution, businesses can&amp;#39;t set plans which have further reaching implications; effectively Planning&amp;#39;s demise is also, effectively, shelving the Scorecard/KPI functionality from the M&amp;amp;A toolset too !&amp;#160; It will be interesting to see the new Monitoring &amp;amp; Analytics Marketing, will they still demo Strategy Maps and Scorecards, or will they now focus on Decomposition trees and Heat maps? Monitoring &amp;amp; Analytics may, in practice, just become Analytics..&lt;/p&gt;  &lt;p&gt;I would have thought the cost of continuing to develop the product (even if it were a lemon, which Planning certainly wasn&amp;#39;t)&amp;#160; is far less than the potential loss of revenue that Microsoft will face due not only to the loss of confidence by its customers (who are going to think twice about investing in any Microsoft product now, let alone a V1) but perhaps more significantly, the doors it opens to it&amp;#39;s competitors who can offer a complete BI\BPM stack.&amp;#160; &lt;/p&gt;  &lt;p&gt;Planning was foot in the customer&amp;#39;s door for BI - once you put planning in, the customer had already bought the full BI stack, and in most cases, our customers were wowed by what they could now achieve.&amp;#160; &lt;/p&gt;  &lt;p&gt;I suspect Cognos and SAP are still partying now!&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7506" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/W0JbBZndO6A" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/News/default.aspx">News</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Excel/default.aspx">Excel</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2009/01/29/rip-performancepoint-planning.aspx</feedburner:origLink></item><item><title>PerformancePoint SP2 - Planning Fixes and a mini-feature</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/ES3Oh9N6Tnk/performancepoint-sp2-planning-fixes-and-a-mini-feature.aspx</link><pubDate>Tue, 09 Dec 2008 16:58:02 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7481</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7481</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/12/09/performancepoint-sp2-planning-fixes-and-a-mini-feature.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/12/08/performancepoint-sp2-released.aspx" target="_blank"&gt;Jeremy has already announced the release of PerformancePoint Server SP2&lt;/a&gt; and it&amp;#39;s great to see that the PPS dev team hit their &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/12/01/performancepoint-server-sp2-target-release-date-8th-december-2008.aspx" target="_blank"&gt;target release date&lt;/a&gt; !&amp;#160; I&amp;#39;ve spent a little commute time this morning checking out the documentation, admittedly I&amp;#39;ve initially focused on the Planning component and there are no great surprises (&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/12/08/what-s-fixed-in-performancepoint-sp2.aspx" target="_blank"&gt;Tim has already told you about the new bits&lt;/a&gt;) but I have spotted what could arguably be described as a mini-feature surrounding form validation that I&amp;#39;m sure that will come in useful.&lt;/p&gt;  &lt;p&gt;As you would expect, previously released hot fixes have been packaged up into this service pack:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/954710/"&gt;954710&lt;/a&gt; Description of the PerformancePoint Server 2007 hotfix package: July 1, 2008 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/955432/"&gt;955432&lt;/a&gt; Description of the PerformancePoint Server 2007 hotfix package: July 14, 2008 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/955751/"&gt;955751&lt;/a&gt; Description of the PerformancePoint Server 2007 hotfix package: July 28, 2008 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/956553/"&gt;956553&lt;/a&gt; Description of the PerformancePoint Server 2007 hotfix package: August 21, 2008 &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Plus fixes to issues not previously addressed:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Excel Add-In Related&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You locally save and close a form in PerformancePoint Add-in for Excel. When you reopen the form, you are prompted to update the form. However, you expect that you are not prompted to update the form because the form is already up to date. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;In PerformancePoint Add-in for Excel, you open an offline form assignment. In the form assignment, you add a link to an external Excel worksheet in a cell. Then, you submit the changes to the PerformancePoint Planning Server database. However, when you reopen the assignment, the link that you added is not retained. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;After you install PerformancePoint Server 2007 Service Pack 1, you create a page filter in PerformancePoint Add-in for Excel. You have a user in PerformancePoint Server 2007 that does not have permission to the default member of the page filter. However, the user has permission to other leaf members in the page filter. When the user opens a report that uses this page filter, the user receives the following error message:      &lt;br /&gt;      &lt;br /&gt;&lt;font face="Courier" size="1"&gt;Cannot render the &amp;lt;MatrixName&amp;gt; matrix. The server returned the following error: The &amp;lt;CubeName&amp;gt; cube either does not exist or has not been processed.        &lt;br /&gt;&lt;/font&gt;      &lt;br /&gt;However, in the release version of PerformancePoint Server 2007, the next member that the user has access to will be automatically selected for use in the page filter. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;You define data validation in a worksheet of Excel. However, you can still submit a form in PerformancePoint Add-in for Excel if data in the form is not validated. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;You have a matrix that is based on a large and complex model in PerformancePoint Add-in for Excel. You open the Select Filters dialog box to change a page filter for this matrix. When you click the Value column of the filter, the dialog box that displays the dimension members takes a long time to display. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Business Rules Related&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;After you migrate an application in PerformancePoint Server 2007 from one server to another server, the order of user-defined business rules and system business rules in models is not preserved. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;You cannot use the datamember function in the ALLOCATE statement and in the TRANSFER statement. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Consider the following scenario. You create an automatic rule that uses MdxQuery implementation or Native MdxQuery implementation in Planning Business Modeler. Then you submit changes to the source data that the rule uses from an assignment form. The submission causes the model to be reprocessed. Because model reprocess causes rules in the automatic rule set to be executed, you expect that the target data of the automatic rule will reflect the change by the form submission. However, after the model is reprocessed, the target data of the automatic rule does not reflect the change. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Rule expression of system business rules uses dimension member names instead of dimension member labels in PerformancePoint Server 2007. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Planning Business Modeler Related&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You have a model that contains many form templates and assignments. When you try to change objects in the model in Planning Business Modeler, Planning Business Modeler crashes. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;You create a member property of the Date data type in a dimension in PerformancePoint Server 2007. Additionally, you specify the Set value to Null option when you create the member property. When you retrieve the value of this member property, you obtain a value of 1899-12-31T00:00:00. However, you expect that you obtain a value of blank. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;You cannot schedule recurring jobs for a frequency that is less than an hour. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;When a user updates a business rule in Planning Business Modeler, the audit log file of PerformancePoint Server 2007 logs the user ID of the user that created the rule. However, you expect that the audit log file logs the user ID of the user that updated the rule. &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Consider the following scenario. You create a dimension that has no hierarchy in a localized version of PerformancePoint Server 2007. Then you perform one of the following operations:      &lt;ul&gt;       &lt;li&gt;You run the bsp_DI_CreateHierarchyLabelTableForDimension stored procedure to create label-based hierarchy table for the dimension. &lt;/li&gt;        &lt;li&gt;You perform the Prepare the Staging DB operation in PerformancePoint Planning Data Migration Tool.          &lt;br /&gt;In this scenario, you receive the following error message:           &lt;br /&gt;A problem was encountered while attempting to connect to, or Execute BSP on, the specified Database           &lt;br /&gt;For more information regarding this error please review the Application Event Log on the SQL Server for any &amp;quot;MSSQLSERVER ERRORS&amp;quot;           &lt;br /&gt;and\or           &lt;br /&gt;Please check that all parameters in the UI are correct and try again &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7481" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/ES3Oh9N6Tnk" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/News/default.aspx">News</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/12/09/performancepoint-sp2-planning-fixes-and-a-mini-feature.aspx</feedburner:origLink></item><item><title>PerformancePoint Server SP2 - Target Release Date 8th December 2008</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/XQfMYD6ywLU/performancepoint-server-sp2-target-release-date-8th-december-2008.aspx</link><pubDate>Mon, 01 Dec 2008 20:03:44 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7476</guid><dc:creator>sachatomey</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7476</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/12/01/performancepoint-server-sp2-target-release-date-8th-december-2008.aspx#comments</comments><description>&lt;p&gt;Word on the street is that next Monday, 8th December 2008, the second Service Pack for PerformancePoint Server 2007 will be released.&amp;#160; Less than a week !&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7476" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/XQfMYD6ywLU" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/News/default.aspx">News</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/12/01/performancepoint-server-sp2-target-release-date-8th-december-2008.aspx</feedburner:origLink></item><item><title>PerformancePoint Planning: Deleting a Custom Member Property - A Solution</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/q6QFKjJce4Y/performancepoint-planning-deleting-a-custom-member-property-a-solution.aspx</link><pubDate>Wed, 26 Nov 2008 18:43:36 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7468</guid><dc:creator>sachatomey</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7468</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/26/performancepoint-planning-deleting-a-custom-member-property-a-solution.aspx#comments</comments><description>&lt;p&gt;I had a &lt;font color="#ff0000"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/25/performancepoint-planning-deleting-a-custom-member-property.aspx" target="_blank"&gt;bit of a rant&lt;/a&gt;&lt;/font&gt; yesterday about the fact I have had to compromise naming member properties when I&amp;#39;ve inadvertently created them with the wrong data type.&amp;#160; As I mentioned, I found a Dimension attribute collection method in the Planning client assemblies that hinted that it might allow me to delete a member property so I decided to give it a go.&lt;/p&gt;  &lt;p&gt;Below is some really rough and ready C# code that actually does delete a dimension member property.&amp;#160; I will improve the code and probably add it in to my &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/27/performancepoint-server-2007-ppscmd-gui.aspx" target="_blank"&gt;PPSCMD GUI&lt;/a&gt; interface as a &amp;#39;feature pack&amp;#39; bonus at some stage, however, if you are in desperate need for the code to delete a member property, and you can&amp;#39;t wait for PPSCMD GUI v0.2 or PerformancePoint Version 2 (I&amp;#39;m not sure which will come first !) the code is below (&lt;strong&gt;Use at your own risk !!&lt;/strong&gt;)&lt;/p&gt;  &lt;p&gt;Note:&amp;#160; Replace &amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyApp&lt;/strong&gt;&lt;/font&gt;&amp;quot;, &amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyDimension&lt;/strong&gt;&lt;/font&gt;&amp;quot;, &amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyAttribute&lt;/strong&gt;&lt;/font&gt;&amp;quot;, oh, and the &lt;font color="#ff0000"&gt;&lt;strong&gt;server address&lt;/strong&gt;&lt;/font&gt;, accordingly..&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;    using &lt;/span&gt;Microsoft.PerformancePoint.Planning.Client.Common;
&lt;span style="color:blue;"&gt;    using &lt;/span&gt;Microsoft.PerformancePoint.Planning.Bmo.Core;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    ..&lt;br /&gt;&lt;span style="color:green;"&gt;    // Setup the PPS Application Metadata Manager
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    ServerHandler &lt;/span&gt;serverHandler = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServerHandler&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;http://localhost:46787&lt;/strong&gt;&lt;/font&gt;&amp;quot;&lt;/span&gt;);
&lt;span style="color:#2b91af;"&gt;    MetadataManager &lt;/span&gt;manager = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MetadataManager&lt;/span&gt;();
    manager.ServerHandler = serverHandler;
    manager.ServerHandler.Connect();

&lt;span style="color:green;"&gt;    // Get the system metadata
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    BizSystem &lt;/span&gt;system = manager.GetSystem(&lt;span style="color:blue;"&gt;true&lt;/span&gt;);

&lt;span style="color:green;"&gt;    // Get hold of the PPS Application
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    BizApplication &lt;/span&gt;ppsApp = system.Applications[&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyApp&lt;/strong&gt;&lt;/font&gt;&amp;quot;&lt;/span&gt;];

&lt;span style="color:green;"&gt;    // Obtain the root model site from the application
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    BizModelSite &lt;/span&gt;site = ppsApp.RootModelSite;

&lt;span style="color:green;"&gt;    // Obtain the dimension that contains the member property
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    BizDimension &lt;/span&gt;dimension = site.Dimensions[&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyDimension&lt;/strong&gt;&lt;/font&gt;&amp;quot;&lt;/span&gt;];

&lt;span style="color:green;"&gt;    // Obtain the member property
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;    BizDimensionAttribute &lt;/span&gt;attribute = dimension.Attributes[&lt;span style="color:#a31515;"&gt;&amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;MyAttribute&lt;/strong&gt;&lt;/font&gt;&amp;quot;&lt;/span&gt;];

&lt;span style="color:green;"&gt;    // Check out the dimension
&lt;/span&gt;    manager.CheckOut(dimension.Id, dimension.ParentModelSite.Id);

&lt;span style="color:green;"&gt;    // Perform the delete
&lt;/span&gt;    dimension.DeleteDimensionAttribute(attribute, &lt;span style="color:blue;"&gt;null&lt;/span&gt;);

&lt;span style="color:green;"&gt;    // Submit the change
&lt;/span&gt;    manager.SubmitModelSite(ppsApp.Id, dimension.ParentModelSite, Microsoft.PerformancePoint.Planning.Bmo.Interfaces.&lt;span style="color:#2b91af;"&gt;SubmissionType&lt;/span&gt;.Update);

&lt;span style="color:green;"&gt;    // Check in the dimension
&lt;/span&gt;    manager.CheckIn(dimension.Id, dimension.ParentModelSite.Id);&lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;font face="Trebuchet MS"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;font color="#ff0000"&gt;&lt;font face="Trebuchet MS"&gt;Update:&amp;#160; I&amp;#39;ve since discovered that you can obtain an unsupported utility from Microsoft Support that reportedly does the same thing, doh !  &lt;br /&gt;&lt;/font&gt;&lt;font face="Trebuchet MS"&gt;Oh well, always nice to have the code ..&lt;/font&gt;&lt;font face="Wingdings" size="3"&gt;&lt;strong&gt;J&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;font face="Trebuchet MS" color="#ff0000"&gt;&lt;/font&gt;&lt;/pre&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7468" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/q6QFKjJce4Y" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+2.0/default.aspx">.Net 2.0</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net/default.aspx">.Net</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Utilities/default.aspx">Utilities</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/26/performancepoint-planning-deleting-a-custom-member-property-a-solution.aspx</feedburner:origLink></item><item><title>PerformancePoint Planning: Deleting a Custom Member Property..</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/BEv3V2eRTYw/performancepoint-planning-deleting-a-custom-member-property.aspx</link><pubDate>Tue, 25 Nov 2008 20:15:37 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7466</guid><dc:creator>sachatomey</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7466</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/25/performancepoint-planning-deleting-a-custom-member-property.aspx#comments</comments><description>&lt;p&gt;&lt;font color="#ff0000"&gt;Update:&amp;#160; I&amp;#39;ve posted a solution to Deleting a Custom Member Property &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/26/performancepoint-planning-deleting-a-custom-member-property-a-solution.aspx" target="_blank"&gt;here&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I&amp;#39;ve done this countless times; I&amp;#39;ve created my perfectly named Custom Member Property when it suddenly dawns on me that I&amp;#39;ve forgotten to give it the right data type.&amp;#160; No problem, right?&amp;#160; Wrong!&amp;#160; From within PBM, can you change the data type?&amp;#160; No!&amp;#160; Can you delete the member property? No!&amp;#160; Can you rename the member property?&amp;#160; No!&lt;/p&gt;  &lt;p&gt;So, what are the options?&amp;#160; Well, you could wait for version 2 (I truly hope you can edit/delete member properties in V2!), you could hack the back end database in the vague hope of removing the member property safely, or, as I have been doing in the past, create a new member property with a less than perfect name and try not to clench teeth and fists every time I glance at the original.&lt;/p&gt;  &lt;p&gt;Well, I&amp;#39;ve had enough, and decided I&amp;#39;m going to take action.&lt;/p&gt;  &lt;p&gt;Strangely, the Microsoft.PerformancePoint.Planning.BMO assembly contains a method called DeleteDimensionAttribute on the Dimension attribute collection.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningDeletingaCustomM_F52B/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="490" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningDeletingaCustomM_F52B/image_thumb.png" width="808" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I wonder...&lt;/p&gt;  &lt;p&gt;Anyone tried?&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7466" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/BEv3V2eRTYw" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+2.0/default.aspx">.Net 2.0</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Utilities/default.aspx">Utilities</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/25/performancepoint-planning-deleting-a-custom-member-property.aspx</feedburner:origLink></item><item><title>New PerformancePoint Contoso Demo - Released</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/xppqwCNaTfs/new-performancepoint-contoso-demo-released.aspx</link><pubDate>Wed, 05 Nov 2008 13:41:37 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7446</guid><dc:creator>sachatomey</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7446</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/05/new-performancepoint-contoso-demo-released.aspx#comments</comments><description>&lt;p&gt;Amidst my write up of the &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-1-6th-october-2008.aspx" target="_blank"&gt;first day of the Microsoft BI Conference&lt;/a&gt;, I mentioned a new planning demo suite was imminent, and I would post more information about the demos soon.&amp;#160; Well, as it has now been officially released (27th October) I can spill the beans...&lt;/p&gt;  &lt;p&gt;Taken directly from the &lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=4086178&amp;amp;SiteID=17" target="_blank"&gt;PPS Planning Forum announcement&lt;/a&gt;, the demo..&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font color="#808080"&gt;.. consists of Planning and Financial Consolidation demo. It shows how the fictitious Contoso Group uses Microsoft Office PerformancePoint Server for planning, statutory consolidation and data analysis.&lt;/font&gt;&lt;/em&gt; &lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Well, I&amp;#39;m proud to announce that Adatis, in the shape of my colleague &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/default.aspx" target="_blank"&gt;Jeremy Kashel&lt;/a&gt;, designed and built the PerformancePoint Planning element of the suite.&amp;#160; The PerformancePoint Financial Consolidation element was conceived and developed by our friends at &lt;a href="http://www.solitwork.com/" target="_blank"&gt;Solitwork&lt;/a&gt; of Denmark.&lt;/p&gt;  &lt;p&gt;The demo can be downloaded from here...&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=00B97AC5-8B69-4F4D-AA0C-ACBFBFB9B48E&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=00B97AC5-8B69-4F4D-AA0C-ACBFBFB9B48E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=00B97AC5-8B69-4F4D-AA0C-ACBFBFB9B48E&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;...and is part of the next &amp;#39;All Up BI VPC&amp;#39; (Version 7).&lt;/p&gt;  &lt;p&gt;Great work guys!&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7446" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/xppqwCNaTfs" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/News/default.aspx">News</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Financial+Consolidation/default.aspx">Financial Consolidation</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/11/05/new-performancepoint-contoso-demo-released.aspx</feedburner:origLink></item><item><title>Microsoft BI Conference - Day 3 - 8th October 2008</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/I8aSoxFmptI/microsoft-bi-conference-day-3-8th-october-2008.aspx</link><pubDate>Fri, 10 Oct 2008 15:22:18 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7432</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7432</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-3-8th-october-2008.aspx#comments</comments><description>&lt;p&gt;The last day of the conference came round quickly and due to my relatively early flight I only attended a couple of sessions and spent most of the day meeting more people in and around the BI community.&amp;#160; Shout out to &lt;a href="http://blogs.msdn.com/petereb/" target="_blank"&gt;Peter Eberhardy&lt;/a&gt; (PeterEb), a real highlight.&amp;#160; Barry Tousley, Test Dev on the PPS Server; thanks for listening to my grumbles about the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FA1C6CAD-45BD-4E5C-A257-4BBA84FA4224&amp;amp;displaylang=en" target="_blank"&gt;PPS Data Migration Tool&lt;/a&gt; and explaining why it does what it does.&amp;#160; Norm Warren of &lt;a href="http://blogs.msdn.com/normbi/Default.aspx" target="_blank"&gt;NormBI&lt;/a&gt; fame.&amp;#160; &lt;a href="http://bimvp.com/blogs/bsm/default.aspx" target="_blank"&gt;Patrick Husting&lt;/a&gt;, who I actually met on Day 2 and Brian Berry of &lt;a href="http://www.blumshapiro.com" target="_blank"&gt;BlumShapiro&lt;/a&gt;, who I met on Day 1 and reportedly follows this blog ! &lt;/p&gt;  &lt;p&gt;I thought the conference was great.&amp;#160; The organisation was slick and right on the button, from registration, meals, session offerings right up to the party.&amp;#160; I think last year, the main criticism was the sessions were not technical enough, they appear to have raised the technical level of some of the sessions but I still found most of them to be a bit dated and apart from a couple of choice sessions most BI people wouldn&amp;#39;t have learnt a great deal - Nothing official at all about PPS v2 :o(&amp;#160; Also, a couple of the sessions I wanted to attend clashed so I&amp;#39;ll have to find the time to watch them on the reported DVD containing a video of every session.&amp;#160; However, I did the feel the standard of presentation was excellent, well practiced, clear, funny and engaging.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ll definitely be vying for a place at next years, where they really should have lots to show off!&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7432" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/I8aSoxFmptI" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Conference/default.aspx">Conference</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-3-8th-october-2008.aspx</feedburner:origLink></item><item><title>Microsoft BI Conference - Day 2 - 7th October 2008</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/k9p8bIkw_h0/microsoft-bi-conference-day-2-7th-october-2008.aspx</link><pubDate>Fri, 10 Oct 2008 13:01:07 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7431</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7431</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-2-7th-october-2008.aspx#comments</comments><description>&lt;p&gt;Day 2 kicked off with some good key notes and still full of steak from day 1 I hauled myself to TK Anand and Akshai Mirchandani&amp;#39;s session on Optimising Query Performance in AS 2008.&amp;#160; For me this was one of the best sessions of the conference as I do spend a fair bit of trying to tune and optimise MDX queries.&amp;#160; They gave a really good explanation of the difference between cell-by-cell calculation and the subspace calculation (or block computation) methods - the latter relies on a sparse cube - the most important aspect of speeding up queries using subspace calculations.&lt;/p&gt;  &lt;p&gt;Another point they raised, particularly from an AS2008 perspective is that &amp;quot;Non Empty Behaviour is Evil!&amp;quot; - their words!&lt;/p&gt;  &lt;p&gt;There was a good set of tips and tricks, some of which can also be applied and adopted to AS2005.&lt;/p&gt;  &lt;p&gt;The afternoon started with what I thought would be the busiest session of the conference - New Horizons for BI with Self Service Analysis technologies.&amp;#160; Effectively the deep dive presentation on Project &amp;#39;Gemini&amp;#39;.&amp;#160; It really is impressive, not only the tool and the capability of the tool, but the supporting framework.&amp;#160; They have implemented an extremely rich administration console that keeps track of user created models on the server and a history of it&amp;#39;s usage, query time etc etc.&amp;#160; It allows IT to see who is using what, by how much and what impact it is having on servers, other models etc and allows them to take appropriate action by, for example, bringing it in house into IT by upgrading to PerformancePoint.&amp;#160; We&amp;#39;ve got a few clients that would just go nuts for this stuff !&lt;/p&gt;  &lt;p&gt;That evening, the Attendee Appreciation Party was held at Qwest Field stadium where I have to say, they put on a great party.&amp;#160; I&amp;#39;ve never been on the field of a huge stadium like that, most impressive, and I&amp;#39;ve never eaten so many chocolate covered marshmallows, cookies or brownies in my life!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/MicrosoftBIConferenceDay27thOctober2008_C603/07102008005_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="184" alt="07102008005" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/MicrosoftBIConferenceDay27thOctober2008_C603/07102008005_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Da Boyz !&amp;#160; &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/" target="_blank"&gt;Jeremy&lt;/a&gt; and &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/" target="_blank"&gt;Tim&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7431" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/k9p8bIkw_h0" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Conference/default.aspx">Conference</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-2-7th-october-2008.aspx</feedburner:origLink></item><item><title>Microsoft BI Conference - Day 1 - 6th October 2008</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/pysmTEjGhoI/microsoft-bi-conference-day-1-6th-october-2008.aspx</link><pubDate>Fri, 10 Oct 2008 12:31:57 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7427</guid><dc:creator>sachatomey</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7427</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-1-6th-october-2008.aspx#comments</comments><description>&lt;p&gt;So, &lt;a href="http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!2814.entry" target="_blank"&gt;although&lt;/a&gt; &lt;a href="http://sqlblog.com/blogs/mosha/archive/2008/10/06/so-what-is-exactly-project-gemini.aspx" target="_blank"&gt;later&lt;/a&gt; &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2008/10/06/microsoft-bi-conference-2008-announcements-on-stage.aspx" target="_blank"&gt;than&lt;/a&gt; &lt;a href="http://bimvp.com/blogs/bsm/archive/2008/10/06/microsoft-business-intelligence-conference-2008-kickoff.aspx" target="_blank"&gt;the&lt;/a&gt; &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/07/day-1-at-the-bi-conference.aspx" target="_blank"&gt;trail&lt;/a&gt; &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/10/07/microsoft-bi-conference-day-1-review.aspx" target="_blank"&gt;blazers&lt;/a&gt;, I thought I&amp;#39;d write up a brief note about day one of the Microsoft BI Conference.&amp;#160; The &amp;#39;Kilimanjaro&amp;#39; announcements have been done to death although I&amp;#39;ve noticed a couple of crossed wires.&amp;#160; Kilimanjaro is NOT the next version of SQL Server - it sounds more like an interim release, whether that comes as part of a service pack or a new type of feature pack delivery method I guess we&amp;#39;ll have to wait and see.&amp;#160; However it arrives, we have to wait until the first half of calendar year 2010.&lt;/p&gt;  &lt;p&gt;With regard to &amp;#39;Gemini&amp;#39; I&amp;#39;m hoping they make the in-memory (column based storage?) engine part of the SQL Server engine proper, as this can then benefit PPS and any SQL Server dependent app, not just the &amp;#39;Gemini&amp;#39; framework.&amp;#160; Imagine PPS-P data entry/reporting running in memory !&amp;#160; It&amp;#39;s certainly a game-changer and it will be interesting to see where and how it&amp;#39;s positioned.&amp;#160; I can&amp;#39;t help thinking that it&amp;#39;s verging on promoting data silos and &amp;#39;multiple versions of the truth&amp;#39; and it wouldn&amp;#39;t surprise me if it&amp;#39;s misused by some customers.&amp;#160; &amp;quot;We don&amp;#39;t need a data-warehouse, we&amp;#39;ll just use Gemini&amp;quot;.. Although &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/07/day-1-at-the-bi-conference.aspx" target="_blank"&gt;Tim did quiz the team on this&lt;/a&gt;.&amp;#160;&amp;#160; Having said all that, it&amp;#39;s pretty damn exciting and will change the face of BI for both customers and BI implementers.&lt;/p&gt;  &lt;p&gt;The first breakout session I attended was a Chalk and Talk by the engaging Peter Bull on moving from the spreadsheet world to PerformancePoint Planning.&amp;#160; He outlined a suggested method for converting existing excel based &amp;#39;business applications&amp;#39; into PerformancePoint models, he was open and honest about some of the shortcomings of the product but also brought our attention to the the built-in features that aid design and productivity.&lt;/p&gt;  &lt;p&gt;The following tips were core to the session:&lt;/p&gt;  &lt;p&gt;- Don&amp;#39;t replicate the current Excel &amp;#39;models&amp;#39;.&lt;/p&gt;  &lt;p&gt;- Use filters to reduce scope and size of input matrices.&lt;/p&gt;  &lt;p&gt;- Limit definition rules (Don&amp;#39;t build cell by cell calculations)&lt;/p&gt;  &lt;p&gt;- Don&amp;#39;t use flat hierarchies.&lt;/p&gt;  &lt;p&gt;- Don&amp;#39;t assume all calculations need to be real time.&lt;/p&gt;  &lt;p&gt;- Performance test by cut and pasting MDX.&lt;/p&gt;  &lt;p&gt;Another Chalk and Talk followed, held by Michael Bower and Scott Sebelsky on using PPS-P for Financial Consolidation.&amp;#160; They discussed the consolidation functionality available in PPS-P and using a two model site application, walked us through the implementation using US GAAP (Corporate Model Site) and IFRS (EMEA Model Site).&lt;/p&gt;  &lt;p&gt;The demo, supporting white-paper, and a new planning demo will be available shortly and was shown off in the hands on labs at the conference.&amp;#160; I&amp;#39;ll shortly be able to post more information on these new demos...&lt;/p&gt;  &lt;p&gt;My third session of the day effectively covered some elements, mainly Report Builder 2.0, of the SQL 2008 feature pack that is out later this month.&amp;#160; One of the features demonstrated Component Based Report building from a self-service perspective and did look quite slick.&amp;#160; The session was presented by the SSRS PM team and they had a clever way of obtaining feedback from the audience on what features they would like to see the most.&amp;#160; They handed out a crib sheet of features and asked us to allocate a $100 budget to each feature - they collected in the sheets and will use this as a basis on what features to focus on.&amp;#160; In addition to Component based self-service reporting, features such as Office Integration using the acquired Software Artisans technology, Notify Me, Interactive Reports and Rich Presentation were shown off to good effect.&lt;/p&gt;  &lt;p&gt;Steve Hoberecht and Srini Nallapareddy were next on my list, taking us through Advanced PPS Planning rules and calculations.&amp;#160; There was some good stuff - I always thought the fact the ALLOCATE statement appended data was a bug, but now I know why it does what it does and warrants a separate post.&amp;#160; Some other tips, particularly for definition rules, some new some old, were also presented:&lt;/p&gt;  &lt;p&gt;- Reduce Scope&lt;/p&gt;  &lt;p&gt;- Avoid Hard-coded member labels to avoid security restriction errors&lt;/p&gt;  &lt;p&gt;- Consider automatic rules/ scheduled assignments.&lt;/p&gt;  &lt;p&gt;- Rule order is important / Avoid infinite loops&lt;/p&gt;  &lt;p&gt;- Consider moving calcs to Excel&lt;/p&gt;  &lt;p&gt;- Consider input/Reporting models&lt;/p&gt;  &lt;p&gt;- Locate bad performing rules by commenting out the rules in BIDS and introducing the rules on by one (from within BIDS) rather than setting the active flag from within PBM as that is more tedious.&lt;/p&gt;  &lt;p&gt;The day was rounded off by a great steak, with the other UK BI partners at &lt;a href="http://www.ruthschris.com" target="_blank"&gt;Ruths and Chris Steakhouse&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7427" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/pysmTEjGhoI" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Conference/default.aspx">Conference</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/10/10/microsoft-bi-conference-day-1-6th-october-2008.aspx</feedburner:origLink></item><item><title>Dynamic Range, Time Property Filter = Empty Matrix - A bug?</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/rIsswfnqdEM/dynamic-range-time-property-filter-empty-matrix-a-bug.aspx</link><pubDate>Wed, 17 Sep 2008 19:05:42 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7408</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7408</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/09/17/dynamic-range-time-property-filter-empty-matrix-a-bug.aspx#comments</comments><description>&lt;p&gt;I think I&amp;#39;ve found a bug in the way the Excel Add-In generates MDX under certain &amp;#39;rolling&amp;#39; conditions.&amp;#160; The requirement I have is to be able to forecast at the day level for a rolling 6 months; starting from the current period (which is to be updated each week) running for a period of 180 days (~ 6 months)&lt;/p&gt;  &lt;p&gt;To prevent requiring 180 columns, a dimension property based filter must be available to select the month in which to forecast.&amp;#160; This will provide a more concise data entry form detailing up to 31 days of the selected month in which to add forecast values.&lt;/p&gt;  &lt;p&gt;My form is dimensioned up as follows:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Dimension&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Position&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Employee&lt;/td&gt;        &lt;td&gt;Filter&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Time(Month)&lt;/td&gt;        &lt;td&gt;Filter (Dimension Property)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Scenario&lt;/td&gt;        &lt;td&gt;Filter&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Location&lt;/td&gt;        &lt;td&gt;Rows&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Time (Day)&lt;/td&gt;        &lt;td&gt;Columns&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;I set up the columns as a dynamic range to ensure that the forecast &amp;#39;rolls&amp;#39; with changes in current period.&amp;#160; The range was set from current member id + 0 : current member id + 180.&amp;#160; [Current Period is set to 16th September 2008 - today).&lt;/p&gt;  &lt;p&gt;The simplified MDX that this produces is below:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;select 
    &lt;/span&gt;{
        
        &lt;span style="color:maroon;"&gt;Ancestor&lt;/span&gt;([Time].[Base View].[MemberId].&amp;amp;[20080916], [Time].[Base View].[MemberId]).&lt;span style="color:blue;"&gt;Lag&lt;/span&gt;(0)
        :
        &lt;span style="color:maroon;"&gt;Ancestor&lt;/span&gt;([Time].[Base View].[MemberId].&amp;amp;[20080916], [Time].[Base View].[MemberId]).&lt;span style="color:blue;"&gt;Lag&lt;/span&gt;(-180)
    }
    *
    {
        [Measures].[Value]
    } &lt;span style="color:blue;"&gt;on columns&lt;/span&gt;, 
    
    {
        &lt;span style="color:blue;"&gt;descendants&lt;/span&gt;([Location].[Standard].[All].[All Locations],,&lt;span style="color:blue;"&gt;after&lt;/span&gt;)
    } &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;on rows 
from 
&lt;/span&gt;(
    &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;select 
        &lt;/span&gt;{[Time].[Month].[All].[September 2008]} &lt;span style="color:blue;"&gt;on columns from &lt;/span&gt;[LocationPlan]) 
&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;where 

    &lt;/span&gt;{[Employee].[Employee].[All].[John Doe]}
    *
    {[Scenario].[All Members].[All].[Forecast]}&lt;/font&gt; &lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The first element to notice is that the columns have been set to a range using ancestor at the member id level and lag to cover the 180 days:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="1"&gt;&lt;span style="color:maroon;"&gt;Ancestor&lt;/span&gt;([Time].[Base View].[MemberId].&amp;amp;[20080916], [Time].[Base View].[MemberId]).&lt;span style="color:blue;"&gt;Lag&lt;/span&gt;(0)
:
&lt;span style="color:maroon;"&gt;Ancestor&lt;/span&gt;([Time].[Base View].[MemberId].&amp;amp;[20080916], [Time].[Base View].[MemberId]).&lt;span style="color:blue;"&gt;Lag&lt;/span&gt;(-180)&lt;/font&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The next point to highlight is the sub=query that represents the selected time dimension property value (September 2008):&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="1"&gt;{[Time].[Month].[All].[September 2008]} &lt;span style="color:blue;"&gt;on columns from &lt;/span&gt;[LocationPlan])&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;When you run this in SSMS, the following data set is returned:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="138" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_thumb_2.png" width="1028" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Locations appear on the rows, the days appear on the columns - exactly as required.&lt;/p&gt;

&lt;p&gt;By changing the sub-query filter to October 2008 - the next month in the range, and definitely covered by the -180 day lag (Not sure why the Lead function isn&amp;#39;t used here?) - results in a problem, the results returned now are missing the day level columns:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="138" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_thumb_4.png" width="378" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The root of this problem is the column expression - if you replace the column expression with a direct lag on the current period member the expected results are returned:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;select 
    &lt;/span&gt;{
        
        &lt;/font&gt;&lt;font size="1"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;[Time].[Base View].[MemberId].&amp;amp;[20080916].Lag(0)
        :
        [Time].[Base View].[MemberId].&amp;amp;[20080916].Lag(-180)&lt;/strong&gt;&lt;/font&gt;
    }
    *
    {
        [Measures].[Value]
    } &lt;span style="color:blue;"&gt;on columns&lt;/span&gt;, 
    
    {
        &lt;span style="color:blue;"&gt;descendants&lt;/span&gt;([Location].[Standard].[All].[All Locations],,&lt;span style="color:blue;"&gt;after&lt;/span&gt;)
    } &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;on rows 
from 
&lt;/span&gt;(
    &lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;select 
        &lt;/span&gt;{[Time].[Month].[All].[September 2008]} &lt;span style="color:blue;"&gt;on columns from &lt;/span&gt;[LocationPlan]) 
&lt;/font&gt;&lt;font size="1"&gt;&lt;span style="color:blue;"&gt;where 

    &lt;/span&gt;{[Employee].[Employee].[All].[John Doe]}
    *
    {[Scenario].[All Members].[All].[Forecast]}&lt;/font&gt; &lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="139" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/RollingForecastAbug_7674/image_thumb_1.png" width="1028" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, the only workaround I can come up with is to build the form using a custom MDX formula so I reckon this warrants raising a bug on connect - which I&amp;#39;ve logged here:&lt;/p&gt;

&lt;p&gt;&lt;a title="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=368206&amp;amp;SiteID=181" href="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=368206&amp;amp;SiteID=181"&gt;https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=368206&amp;amp;SiteID=181&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7408" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/rIsswfnqdEM" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/SP1/default.aspx">SP1</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Bug/default.aspx">Bug</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/09/17/dynamic-range-time-property-filter-empty-matrix-a-bug.aspx</feedburner:origLink></item><item><title>Unofficial PerformancePoint Planning Tips and Tricks</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/qDWk2UQH7E0/unofficial-performancepoint-planning-tips-and-tricks.aspx</link><pubDate>Fri, 29 Aug 2008 11:46:20 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7395</guid><dc:creator>sachatomey</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7395</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/29/unofficial-performancepoint-planning-tips-and-tricks.aspx#comments</comments><description>&lt;p&gt;Wavesmash has posted a series of tips and tricks shared at a train the trainer event that took place in Denver recently.&amp;#160; As suggested, most of the &amp;#39;nuggets&amp;#39; are from the attendees themselves rather than the course material so, on the plus side there are some real experienced based tips however, I wouldn&amp;#39;t treat all as official tips and tricks - I certainly frowned at a couple but that could be due to the explanation rather than the intent.&lt;/p&gt;  &lt;p&gt;There&amp;#39;s certainly some goodness, and one that made me smile:&amp;#160; Regular Refresh of model = happy modeler&lt;/p&gt;  &lt;p&gt;&lt;a href="http://performancepointing.blogspot.com/2008/08/train-trainer-helpful-tricks.html"&gt;http://performancepointing.blogspot.com/2008/08/train-trainer-helpful-tricks.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-2.html"&gt;http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-2.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-3.html"&gt;http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-3.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-3_26.html"&gt;http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-3_26.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-4.html"&gt;http://performancepointing.blogspot.com/2008/08/tips-from-train-trainer-sessions-day-4.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7395" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/qDWk2UQH7E0" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/29/unofficial-performancepoint-planning-tips-and-tricks.aspx</feedburner:origLink></item><item><title>PerformancePoint Server 2007 PPSCMD GUI</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/35lPjslNBgA/performancepoint-server-2007-ppscmd-gui.aspx</link><pubDate>Wed, 27 Aug 2008 21:21:38 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7394</guid><dc:creator>sachatomey</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7394</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/27/performancepoint-server-2007-ppscmd-gui.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve built a really simple GUI for a couple of commands of the PPSCMD utility.&amp;#160; I always take far too long to work out the syntax and navigate to the appropriate directory (Yes, I ought to update the PATH environment variable) that I felt I could justify building a simple front end to help speed up the usage.&lt;/p&gt;  &lt;p&gt;So far I&amp;#39;ve only implemented the MIGRATE and REPROCESS commands - I use these quite a lot outside of any automated SSIS package so they seemed the most sensible to implement in the GUI first.&amp;#160; I do intend on extending it to encompass some of the other commands and I would welcome any feedback towards prioritisation, usage, features and the inevitable bugs.&amp;#160; It&amp;#39;s currently version 0.1 and more or less ready for &amp;#39;Community Preview&amp;#39; - there are some omissions such as full error handling and validation that I do intend on implementing over time along with the other commands.&lt;/p&gt;  &lt;p&gt;It&amp;#39;s a .NET 3.5 application so you will need to deploy it to a client where you are happy to install .NET 3.5 if it&amp;#39;s not already present.&lt;/p&gt;  &lt;p&gt;You can download version 0.1 from &lt;a href="http://blogs.adatis.co.uk/files/" target="_blank"&gt;here&lt;/a&gt; - (You will need to create a login first)&lt;/p&gt;  &lt;p&gt;Below are the screen shots:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Migrate&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The migrate command: both import and export variations can be set and executed directly from the GUI.&amp;#160; In addition, the command line is generated so you can cut and paste into a command window, batch file or SSIS package.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="453" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_thumb_3.png" width="502" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Reprocess&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Need to reprocess a model quickly?&amp;#160; Rather than wait for PBM/SSMS to open you can reprocess a model directly from the GUI.&amp;#160; Just like Migrate, the command is generated for cut and paste.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="453" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_thumb_4.png" width="502" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Console&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Any output you would normally see in the command window is reported in the console as the command is being executed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="453" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_thumb_6.png" width="502" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Log&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You can enable logging to a log file of your choice to record all commands processed through the GUI.&amp;#160; Useful for additional auditing and for creating batch files of multiple PPSCMD operations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_16.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="453" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_thumb_7.png" width="502" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Preferences&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Preferences and options are set on the preferences dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_18.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="300" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointServer2007PPSCMDGUI_13935/image_thumb_8.png" width="564" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7394" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/35lPjslNBgA" height="1" width="1"/&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/Utilities/default.aspx">Utilities</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/sachatomey/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/27/performancepoint-server-2007-ppscmd-gui.aspx</feedburner:origLink></item><item><title>PerformancePoint Planning - Currency Conversion (Triangulation)</title><link>http://feedproxy.google.com/~r/SachaTomey/~3/YNZji1z-Npw/performancepoint-planning-currency-conversion-triangulation.aspx</link><pubDate>Mon, 18 Aug 2008 19:59:44 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7385</guid><dc:creator>sachatomey</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.adatis.co.uk/blogs/sachatomey/rsscomments.aspx?PostID=7385</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/18/performancepoint-planning-currency-conversion-triangulation.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve blogged about some of the financial consolidation elements of PerformancePoint planning before.&amp;#160; Most of the elements related to financial consolidation e.g. Share calculations, intercompany transactions etc are specific to consolidation and only implemented when performing some form of statutory consolidation.&amp;#160; Currency conversion, on the other hand, can be common to any element of PerformancePoint Planning whether it&amp;#39;s a budgeting, forecasting, planning or, in fact statutory consolidation solution.&lt;/p&gt;  &lt;p&gt;In it&amp;#39;s simplest, out of the box, form, currency conversion is pretty straightforward.&amp;#160; You need an exchange rate assumption model to hold the exchange rates and you need a financial model without shares that contains a pre-defined currency conversion rule that utilses the exchange rate assumption model.&amp;#160; You run the pre-defined rule on a set of financial data and currency conversion is calculated for you.&amp;#160; There&amp;#39;s little more to it than that.&lt;/p&gt;  &lt;p&gt;This post looks a little (and I mean a little) deeper in to currency conversion and demonstrates the triangulation features contained within PPS-P.&lt;/p&gt;  &lt;p&gt;Consider this set of exchange rates, taken from &lt;a href="http://www.xe.com"&gt;www.xe.com&lt;/a&gt; today:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="389" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb.png" width="419" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;On the face of it, we have a few rates that allow us to convert from British Pound to Japanese Yen, US Dollar to both British Pound and Euro, and finally a rate for converting Euro to Japanese Yen.&lt;/p&gt;  &lt;p&gt;When the in-built currency conversion rule is run against, for example, a set of US financial data we can determine the British Pound equivalent.&amp;#160; The Net Profit/Loss of 110,500 USD, converted to British Pound at a rate of 53.5 British pence per dollar converts to 59,117.50 GBP - As you would expect:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="353" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb_1.png" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;What would happen if we were to run the currency conversion rule again but this time try and convert the US Dollar figures to Japanese Yen?&amp;#160; &lt;/p&gt;  &lt;p&gt;The astute among you would point out that we don&amp;#39;t have an exchange rate for converting US Dollar to Japanese Yen.&amp;#160; The more astute among you might say that we could determine the JPY figures by first converting to GBP and then converting the GBP figures to JPY.&amp;#160; The even more astute among you might suggest that you could calculate the Japanese Yen two ways, either by first converting to GBP and then to JPY or by first converting to EUR before converting to our desired JPY.&lt;/p&gt;  &lt;p&gt;Who&amp;#39;s right?&amp;#160; Well, all of you, kind of!&lt;/p&gt;  &lt;p&gt;If I run the currency conversion job again but instead of selecting GBP as the reporting currency, I select JPY, I get the following result:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="353" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb_3.png" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;No conversion !&amp;#160; Why - well, we don&amp;#39;t have an exchange rate set for converting USD to JPY!&lt;/p&gt;  &lt;p&gt;This is where triangulation comes in.&amp;#160; With our current set of exchange rates there are two methods for converting USD to JPY.&amp;#160; Either through GBP or EUR.&amp;#160; You set which &amp;#39;route&amp;#39; the triangulation takes by setting the model property &amp;#39;Default Currency&amp;#39;.&amp;#160; By default this is not set, hence our failed conversion above.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_10.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="182" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb_4.png" width="755" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;However, if you were to set it to either GBP or EUR you will get some results, but there is a catch - the &amp;#39;route&amp;#39; you take returns different results.&amp;#160; Incidentally, you don&amp;#39;t have to redeploy the model when you change the property you just need to save the model.&lt;/p&gt;  &lt;p&gt;Triangulate through GBP&lt;/p&gt;  &lt;p&gt;110,500 USD at a rate of 0.535 equals 59,117.50 GBP.&amp;#160; Convert the GBP to JPY at a rate of 205.524 and that equates to 12,150,065.07 JPY.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="353" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb_5.png" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Triangulate through EUR&lt;/p&gt;  &lt;p&gt;110,500 USD at a rate of 0.535 equals 75,029.50 EUR.&amp;#160; Convert the EUR to JPY at a rate of 162.068 and that equates to 12,159,881.006 JPY.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="353" alt="image" src="http://blogs.adatis.co.uk/blogs/sachatomey/WindowsLiveWriter/PerformancePointPlanningCurrencyConversi_1165F/image_thumb_6.png" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The two &amp;#39;routes&amp;#39; highlight a variance of 9815.936 JPY (about 90 USD)!&amp;#160; A &lt;a href="http://en.wikipedia.org/wiki/Triangle_arbitrage"&gt;triangular arbitrage&lt;/a&gt; ! &lt;/p&gt;  &lt;p&gt;So, two questions:&lt;/p&gt;  &lt;p&gt;1) Which &amp;#39;route&amp;#39; should you use?    &lt;br /&gt;That&amp;#39;s a business decision and if it&amp;#39;s going to be a common conversion then direct rates ought to be favoured over triangulation.&lt;/p&gt;  &lt;p&gt;2) How do you exploit this model to work out guaranteed triangular arbitrage to make millions through currency trading?    &lt;br /&gt;I&amp;#39;m working on it !&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7385" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/SachaTomey/~4/YNZji1z-Npw" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/08/18/performancepoint-planning-currency-conversion-triangulation.aspx</feedburner:origLink></item></channel></rss>
