<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Nick Barclay: BI-Lingual</title><link>http://nickbarclay.blogspot.com/</link><description>Speaking the language of business intelligence with a Microsoft accent</description><language>en</language><managingEditor>noreply@blogger.com (Nick Barclay)</managingEditor><lastBuildDate>Thu, 02 Oct 2008 16:57:58 -0500</lastBuildDate><generator>Blogger</generator><atom:id xmlns:atom="http://www.w3.org/2005/Atom">tag:blogger.com,1999:blog-16888062</atom:id><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">118</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NickBarclay" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>Jason Morales' Microsoft BI Update Blog</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/309988868/jason-morales-microsoft-bi-update-blog.html</link><category>BI</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Wed, 11 Jun 2008 18:00:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-3918808510907448125</guid><description>&lt;p&gt;I think many readers of this blog are already on the distribution list for the email-based BI updates that Microsoft's Jason Morales has been sending out regularly since last year. &lt;a href="http://blogs.msdn.com/jasonmorales/default.aspx" target="_blank"&gt;Jason now has a blog&lt;/a&gt; on which he is now posting his BI updates.&lt;/p&gt;  &lt;p&gt;I believe the email version will be around for a while but will be phased out in favour of the blog version. Well worth subscribing in your favourite feed reader.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=8X7ndI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=8X7ndI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=YAToSi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=YAToSi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=nXxiOI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=nXxiOI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/309988868" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-06-12T09:05:23.216+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/06/jason-morales-microsoft-bi-update-blog.html</feedburner:origLink></item><item><title>PPS M&amp;A SP1 DataSource Cache Bug</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/308393236/pps-m-sp1-datasource-cache-bug.html</link><category>MonitorAnalyse</category><category>PPS SP1</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Mon, 09 Jun 2008 18:37:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-902363300152531991</guid><description>&lt;p&gt;After installing SP1 I had a demo dashboard that all of a sudden performed far slower than it did on the original RTM build. The analytic charts pointing to my OLAP cube were unbelievably sluggish; like 30 sec+ to return result sets on queries that, when executed in SSMS, ran in milliseconds. After some testing I came up with the answer. It was the &lt;strong&gt;Cache Setting&lt;/strong&gt; on my data source. At some point I had set the cache interval on the data source to 0 and not changed it back to a more reasonable number.&lt;/p&gt;  &lt;p&gt;In the RTM build of M&amp;amp;A a cache interval of 0 on a multidimensional data source didn't have a noticeable performance effect, you simply lost any caching benefits as the cube was always re-queried. A bug in SP1 makes queries to MD data sources with a 0 cache setting take far longer. When I contacted them the PPS team confirmed that this is indeed a bug and they're already working on a fix.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/nick.barclay/SE2-qdvGK4I/AAAAAAAAAZs/_Y13fqjC_8E/s1600-h/ZeroCacheSetting2.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="475" alt="ZeroCacheSetting" src="http://lh5.ggpht.com/nick.barclay/SE2-rczKGbI/AAAAAAAAAZw/y3lZft-QP78/ZeroCacheSetting_thumb.png?imgmax=800" width="522" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The workaround: &lt;/strong&gt;If you have already applied SP1 find any published multidimensional data sources with a cache setting of 0 and set it to something higher - anything above zero seems to work. Unless you are hitting an absolute zero-latency cube there aren't many good reasons for &lt;em&gt;not &lt;/em&gt;taking advantage of some caching. I often find that the 0 creeps in there when testing and gets forgotten.&lt;/p&gt;  &lt;p&gt;As far as I can ascertain tabular data sources do not seem to be affected.&lt;/p&gt;  &lt;p&gt;An easy way to find your published data sources with a 0 cache setting? Easy! Use the &lt;a href="http://www.codeplex.com/MAUDF" target="_blank"&gt;MAUDFs&lt;/a&gt;. Once MAUDF is set up finding the offending data sources is as simple as running this query:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&amp;#160;&lt;span style="color: gray"&gt;*&lt;/span&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;DataSourceMetadata&lt;span style="color: gray"&gt;()        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt; DataSourceType &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'Multidimensional'        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="color: gray"&gt;AND&lt;/span&gt; MinutesToCache &lt;span style="color: gray"&gt;=&lt;/span&gt; 0&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-ansi-language:="mso-ansi-language:" EN-AU;="EN-AU;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;a href="http://lh3.ggpht.com/nick.barclay/SE2-tRUkmoI/AAAAAAAAAZ0/ZhloV-8Bhwk/s1600-h/ZeroCacheDataSources4.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="ZeroCacheDataSources" src="http://lh6.ggpht.com/nick.barclay/SE2-vdPD8EI/AAAAAAAAAZ4/yf6OYoj46ko/ZeroCacheDataSources_thumb2.png?imgmax=800" width="683" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=NQ752I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=NQ752I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=9GYWbi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=9GYWbi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=mGMiQI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=mGMiQI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/308393236" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-06-10T09:37:34.985+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/06/pps-m-sp1-datasource-cache-bug.html</feedburner:origLink></item><item><title>PPS Blog en Francais und Buch auf Deutsch</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/307746979/pps-blog-en-francais-und-buch-auf.html</link><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Sun, 08 Jun 2008 22:57:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-2859187334786340990</guid><description>&lt;p&gt;There seems to be PPS blogs popping up all over the place. One that caught my eye recently was that of &lt;a href="http://aurelien-koppel-pps.blogspot.com/" target="_blank"&gt;Aurelien Koppel&lt;/a&gt;, a Paris-based BI consultant. Aurelian blogs in French, something I know will bring a tear to the eye of both &lt;a href="http://pminsight.blogspot.com/" target="_blank"&gt;Bruno Aziza&lt;/a&gt;, a Frenchman, and &lt;a href="http://adriandownes.blogspot.com" target="_blank"&gt;Adrian Downes&lt;/a&gt;, a French-Canadian. For those who studied or are familiar with the language this will present a way to stay up to date on the latest in the PPS world &lt;em&gt;and&lt;/em&gt; dust off your long-lost French skills. If, however, you define 'language' skills as fluency in C#, C++ and VB check out the &lt;a href="http://www.windowslivetranslator.com/" target="_blank"&gt;Windows Live translator tool&lt;/a&gt; which does a pretty good job at &lt;a href="http://www.windowslivetranslator.com/BV.aspx?ref=Internal#http://aurelien-koppel-pps.blogspot.com/" target="_blank"&gt;converting the entire blog in one hit&lt;/a&gt; and displaying the side-by-side results.&lt;/p&gt;  &lt;p&gt;Did you study German instead of French at school? Well you're in luck. MS Press released a book on PPS Planning written in German: &lt;a href="http://www.amazon.de/Unternehmensplanung-Microsoft-Office-PerformancePoint-Server/dp/3866456387" target="_blank"&gt;Unternehmensplanung mit Microsoft Office PerformancePoint Server 2007&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=wsArzI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=wsArzI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=QGX45i"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=QGX45i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=TRQjhI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=TRQjhI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/307746979" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-06-09T13:57:26.550+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/06/pps-blog-en-francais-und-buch-auf.html</feedburner:origLink></item><item><title>The PPS Monitor &amp; Analyze UDF Project (MAUDF)</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/303292917/pps-monitor-analyze-udf-project-maudf.html</link><category>MonitorAnalyse</category><category>Codeplex</category><category>PerformancePoint</category><category>MAUDF</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Mon, 02 Jun 2008 18:02:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-1714976432525793899</guid><description>&lt;p&gt;I've often wanted to be able access metadata within a monitoring server with greater ease. Querying the PPSMonitoring database is difficult because the more interesting pieces of information pertaining to a particular element are locked away within the SerializedXML column of the FCObjects table. Sure we can access the data in the SerializedXML column with XPath / XQuery but I really wanted to get stuck into some CLR stuff and figured UDFs would provide the greatest reuse, flexibility and query-ability.&lt;/p&gt;  &lt;p&gt;I've created a series of CLR table-valued UDFs and created a home for it on &lt;a href="http://www.codeplex.com" target="_blank"&gt;Codeplex&lt;/a&gt;, a project that I have named &lt;a href="http://www.codeplex.com/maudf" target="_blank"&gt;MAUDF&lt;/a&gt; (taking a bit of inspiration from the &lt;a href="http://www.codeplex.com/ASStoredProcedures" target="_blank"&gt;ASSP&lt;/a&gt; project). Using the CLR the MAUDFs connect to the PPS Monitoring web service and extract pertinent metadata and return the results in a tabular format. &lt;/p&gt;  &lt;h4&gt;Why UDFs?&lt;/h4&gt;  &lt;p&gt;The use of table-valued UDFs enables element metadata to be queried, JOINED and &lt;a href="http://technet.microsoft.com/en-us/library/ms175156.aspx" target="_blank"&gt;(CROSS | OUTER) APPLY&lt;/a&gt;-ed&amp;#160; in T-SQL in as if they were tables, opening up the world of M&amp;amp;A metadata to a much wider audience.&lt;/p&gt;  &lt;h4&gt;Using the UDFs&lt;/h4&gt;  &lt;p&gt;Some of the UDFs do not require a parameter value, simply executing these functions returns a tabular result set that can be used as if it were a table like the example below that calls MAUDF.ElementMetadata().&amp;#160; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; color: green; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;-- Get metadata for all elements with a display folder of &amp;quot;PPS Demo&amp;quot;        &lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: gray"&gt;*&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementMetadata&lt;span style="color: gray"&gt;()&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; DisplayFolder &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'PPS Demo'        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; ElementType&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;a href="http://lh3.ggpht.com/nick.barclay/SER7ydvJdjI/AAAAAAAAAZc/onTq3RvlT7o/s1600-h/PPSDemoElements%5B1%5D.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="203" alt="PPSDemoElements" src="http://lh5.ggpht.com/nick.barclay/SER708wx7oI/AAAAAAAAAZg/z3FzpRd4CMQ/PPSDemoElements_thumb.png?imgmax=800" width="697" border="0" /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The remaining UDFs take a single parameter: the GUID that identifies the element in question. We can supply that value by using APPLY, all we need is an anchor table from which to reference the element IDs. In the example below we use the MAUDF.ElementMetadata() function to provide the anchor record set.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; color: green; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;-- Get the custom property details for KPIs that have custom properties defined        &lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160; ElementName &lt;span style="color: blue"&gt;AS&lt;/span&gt; ElementName       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyType       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyName       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyDescription       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyValue       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementMetadata&lt;span style="color: gray"&gt;()&lt;/span&gt; e&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;      &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;CROSS&lt;/span&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementCustomProperties&lt;span style="color: gray"&gt;(&lt;/span&gt;ElementID&lt;span style="color: gray"&gt;)&lt;/span&gt; cp       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; e&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementType &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'KPI'&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I have also created a view named MAUDF.vFCObjects which is based on the data in the FCObjects table. The view definition simply adds a textual ElementType column. The same query shown above be duplicated using the MAUDF.vFCObjects view as an anchor for the CROSS APPLY operation.&lt;/p&gt; &lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160; ElementName &lt;span style="color: blue"&gt;AS&lt;/span&gt; ElementName     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyType     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyName     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyDescription     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;PropertyValue     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;vFCObjects f&amp;#160; &lt;font color="#008000"&gt;--using vFCObjects as an anchor for CROSS APPLY&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;CROSS&lt;/span&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementCustomProperties&lt;span style="color: gray"&gt;(&lt;/span&gt;ElementID&lt;span style="color: gray"&gt;)&lt;/span&gt; cp     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;WHERE&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementType &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;span style="color: red"&gt;'KPI'&lt;/span&gt;&lt;/span&gt;   &lt;p&gt;The main difference between the using an MAUDF or vFCObjets view is query performance. Because vFCObjects is based on a physical table with indexes you can immediately limit the number of rows that are made available to the CROSS APPLY thereby increasing performance. The MAUDF.ElementMetadata() function must first generate an &lt;em&gt;entire&lt;/em&gt; result set for all published elements and &lt;em&gt;then&lt;/em&gt; this is reduced based on the contents of the WHERE clause, which can take a bit longer.&lt;/p&gt;  &lt;p&gt;There are different situations where one query structure will out-perform the other but not by too much. The aim of providing both is flexibility and choice.&lt;/p&gt;  &lt;h4&gt;MAUDF Schema&lt;/h4&gt;  &lt;p&gt;All UDFs and supporting objects are created within the PPSMonitoring database in their own schema, cunningly named &amp;quot;MAUDF&amp;quot;.&lt;/p&gt;  &lt;h4&gt;Sample Queries&lt;/h4&gt;  &lt;p&gt;Below are some more sample queries. All these and more are contained in the Codeplex project. Some of the samples use the no-parameter-UDFs as an anchor to CROSS APPLY to, others use the vFCObjects view. The choice is yours as to which suits your requirements.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: red"&gt;&lt;font face="Courier New" size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; color: green; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;-- Which elements has &amp;quot;NT AUTHORITY\Authenticated Users&amp;quot; been granted access to?        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;font face="Courier New"&gt;        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160; f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementTypeName         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;font face="Courier New"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementName         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;m&lt;span style="color: gray"&gt;.&lt;/span&gt;MembershipRole         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;font face="Courier New"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;vFCObjects f         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; CROSS&lt;/span&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementMemberships&lt;span style="color: gray"&gt;(&lt;/span&gt;ElementID&lt;span style="color: gray"&gt;)&lt;/span&gt; m         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;WHERE&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;font face="Courier New"&gt; MembershipLogin &lt;span style="color: gray"&gt;=&lt;/span&gt; &lt;/font&gt;&lt;span style="color: red"&gt;&lt;font face="Courier New"&gt;'NT AUTHORITY\Authenticated Users'          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Courier New"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementTypeName&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;a href="http://lh5.ggpht.com/nick.barclay/SER72O8Y1UI/AAAAAAAAAY8/lUFmCN5IYDE/s1600-h/ResultSetMembership3.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="ResultSetMembership" src="http://lh4.ggpht.com/nick.barclay/SER7371E6LI/AAAAAAAAAZA/FPNNa9KG-Jk/ResultSetMembership_thumb.png?imgmax=800" width="437" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: green; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;-- Get the count of each report type published to the server      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160;&amp;#160; ReportType      &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;,&lt;/span&gt;&lt;span style="color: fuchsia"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray"&gt;(*)&lt;/span&gt; ReportCount       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ReportMetadata&lt;span style="color: gray"&gt;()        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;GROUP&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; ReportType       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; &lt;span style="color: fuchsia"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray"&gt;(*)&lt;/span&gt; &lt;span style="color: blue"&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;a href="http://lh6.ggpht.com/nick.barclay/SER75TiYKiI/AAAAAAAAAZE/B8li0mAWJJU/s1600-h/ResultCountReportType6.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="ResultCountReportType" src="http://lh3.ggpht.com/nick.barclay/SER76zjjB7I/AAAAAAAAAZI/zesRPE0fMq0/ResultCountReportType_thumb2.png?imgmax=800" width="224" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: green; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;-- Get all Scorecard annotations      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;SELECT&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&amp;#160; f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementName       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;CommentTitle       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;CommentMessage       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;AnnotationKpiMetricName       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;AnnotationTuples       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;FilterSlice       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; ,&lt;/span&gt;AnnotationKpiID       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;FROM&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ScorecardMetadata&lt;span style="color: gray"&gt;()&lt;/span&gt; s       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; CROSS&lt;/span&gt; &lt;span style="color: gray"&gt;APPLY&lt;/span&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;ScorecardAnnotations&lt;span style="color: gray"&gt;(&lt;/span&gt;s&lt;span style="color: gray"&gt;.&lt;/span&gt;ScorecardID&lt;span style="color: gray"&gt;)&lt;/span&gt; sa       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: gray"&gt;&amp;#160; INNER&lt;/span&gt; &lt;span style="color: gray"&gt;JOIN&lt;/span&gt; MAUDF&lt;span style="color: gray"&gt;.&lt;/span&gt;vFCObjects f       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; ON&lt;/span&gt; s&lt;span style="color: gray"&gt;.&lt;/span&gt;ScorecardID &lt;span style="color: gray"&gt;=&lt;/span&gt; f&lt;span style="color: gray"&gt;.&lt;/span&gt;ElementID       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;ORDER&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt; &lt;span style="color: blue"&gt;BY&lt;/span&gt; s&lt;span style="color: gray"&gt;.&lt;/span&gt;ScorecardID&lt;span style="color: gray"&gt;,&lt;/span&gt; AnnotationID&lt;span style="color: gray"&gt;,&lt;/span&gt; CommentCreatedDate&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " yes?="yes?" mso-no-proof:="mso-no-proof:" EN-AU;="EN-AU;" mso-ansi-language:="mso-ansi-language:" new?;="new?;" courier="courier"&gt;&lt;a href="http://lh3.ggpht.com/nick.barclay/SER79RH9iMI/AAAAAAAAAZk/5iBtf2jqd24/s1600-h/ResultScorecardAnnotations%5B1%5D.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="167" alt="ResultScorecardAnnotations" src="http://lh3.ggpht.com/nick.barclay/SER7_TXBG8I/AAAAAAAAAZo/wa1krIYL024/ResultScorecardAnnotations_thumb%5B1%5D.png?imgmax=800" width="710" border="0" /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;  &lt;h4&gt;As a Report Source&lt;/h4&gt;  &lt;p&gt;Once you can easily access element metadata in a tabular format the creation of SSRS reports becomes far easier.&lt;/p&gt;  &lt;p&gt;For example, a common request from many customers relates to the display of threshold banding numbers set for a particular KPI target. The SSRS report depicted below displays the threshold band numbers and the indicator icons associated with them each target in a KPI. The report takes a KpiID as a parameter. The report can then easily be incorporated into a dashboard by creating a filter link from a scorecard to the report passing the KpiID.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/nick.barclay/SER8AuB6IuI/AAAAAAAAAZU/yTJrAjcsZM0/s1600-h/SampleSSRSReport1.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="451" alt="SampleSSRSReport" src="http://lh5.ggpht.com/nick.barclay/SER8CwxZAII/AAAAAAAAAZY/Svrx1TeVYnk/SampleSSRSReport_thumb.png?imgmax=800" width="555" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The SQL code to return the result set for this report is also contained in the samples.&lt;/p&gt;  &lt;h4&gt;Where do I get it?&lt;/h4&gt;  &lt;p&gt;The MAUDF setup instructions, source code, release binaries, samples, documentation and more can be accessed from the &lt;a href="http://www.codeplex.com/maudf" target="_blank"&gt;MAUDF Codeplex project&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I'm looking forward to hearing feedback and any new ideas anyone may have. Please note that this is the first time I have written anything seriously in C# (or any other .NET language for that matter).&lt;/p&gt;  &lt;p&gt;Thanks very much to &lt;a href="http://geekswithblogs.net/darrengosbell/" target="_blank"&gt;Darren Gosbell&lt;/a&gt; for his early alpha testing and feedback.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=LbUXjI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=LbUXjI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=rIJtti"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=rIJtti" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ZCsh3I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ZCsh3I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/303292917" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-06-03T10:49:50.176+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/06/pps-monitor-analyze-udf-project-maudf.html</feedburner:origLink></item><item><title>Book Review: Drive Business Performance</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/293834946/book-review-drive-business-performance.html</link><category>Performance Management</category><category>Book Review</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Mon, 19 May 2008 17:49:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-2975166847589128944</guid><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Full disclosure: &lt;/strong&gt;The authors provided me with a free copy of this book.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470259558.html" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 5px 20px; border-right-width: 0px" height="276" alt="DriveBusinessPerformance" src="http://lh4.ggpht.com/nick.barclay/SDIGaCf1V5I/AAAAAAAAAYs/nyKXzAxKi5c/DriveBusinessPerformance1.jpg?imgmax=800" width="184" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With a foreword by none other than &lt;a href="http://en.wikipedia.org/wiki/Balanced_scorecard"&gt;Drs Kaplan and Norton&lt;/a&gt; you can be sure that software is &lt;em&gt;not &lt;/em&gt;central to this book's message. &lt;a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470259558.html"&gt;Drive Business Performance&lt;/a&gt; is part of Wiley's Microsoft Executive Leadership Series, however the only time &amp;quot;Microsoft&amp;quot; is mentioned is when referencing quotes from Steve Ballmer or Chris Liddell. The intended audience is a business one not technical, although technical people would do well to get their hands on a copy nonetheless.&lt;/p&gt;  &lt;p&gt;Fitts and Aziza provide a comprehensive look at what Performance Management (PM) is and just how successful organisations can be when they succeed in creating a &amp;quot;Culture of Intelligent Execution&amp;quot;. Central to the book's philosophy are what the authors have dubbed the &amp;quot;Six Stages of Performance Management Value&amp;quot;. Targeted lists of questions at the end of each section enable readers to assess their organisation's current PM capabilities.&lt;/p&gt;  &lt;p&gt;For mine the book's greatest strength are the anecdotes and quotes peppered throughout to underscore each topic. It is obvious the authors went to a great deal of effort to interview high-ranking members of companies who spearheaded some very successful PM implementations. The information gathered in these interviews coupled with well-chosen quotes from the likes of Winston Churchill, Henry Ford and many others serve as evidence to support Fitts and Aziza's Six Stages and the culture of performance management in general.&lt;/p&gt;  &lt;p&gt;PM is not just something that can be thrown together in a few weeks by a couple of interns, it is an organisation-wide paradigm shift that takes time, effort and dedication to bear fruit. As recounted many times within the book, the rewards to organisations who implement an effective PM initiative can be very substantial.&lt;/p&gt;  &lt;p&gt;This is a great book to hand to anyone who is considering implementing any form of PM. It details plenty of good &amp;quot;See! They did it, why can't we?&amp;quot; case studies as well as providing practical guidance describing how to do it within your own organisation. Highly recommended reading.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=koSEJH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=koSEJH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=CkGfIh"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=CkGfIh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=GTchfH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=GTchfH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/293834946" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-05-20T09:01:07.234+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/05/book-review-drive-business-performance.html</feedburner:origLink></item><item><title>And another PPS Blog</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/286348360/and-another-pps-blog.html</link><category>Planning</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Thu, 08 May 2008 16:00:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-3790296716458292267</guid><description>&lt;p&gt;If you're subscribed to &lt;a href="http://adriandownes.blogspot.com/2008/05/on-even-more-great-performancepoint.html"&gt;Adrian&lt;/a&gt; or &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/05/08/another-new-performancepoint-blog.aspx"&gt;Tim&lt;/a&gt; and have already read that &lt;a href="http://paulsteynberg.blogspot.com/"&gt;Paul Steynberg&lt;/a&gt; is now blogging, please accept my apologies for restating this fact. As PPS adoption begins to grow I just want to do my part to ensure new blogs are brought to the attention of as many people as possible. From experience I can say that the more subscribers / traffic a blogger has, the more they want to blog, and that's good for all of us.&lt;/p&gt;  &lt;p&gt;Paul brings technical experience and financial knowledge to the table, which is an excellent combination of skills for a blog on financial BI. I don't think I've seen many posts on PPS Management Reporter yet, but he has already &lt;a href="http://paulsteynberg.blogspot.com/2008/05/performancepoint-server-management.html"&gt;written one&lt;/a&gt;. More please, Paul!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=LmUxdH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=LmUxdH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=aJ9X1h"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=aJ9X1h" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ye1ZBH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ye1ZBH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/286348360" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-05-09T07:00:54.487+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/05/and-another-pps-blog.html</feedburner:origLink></item><item><title>...but can I print it?</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/282432750/but-can-i-print-it.html</link><category>Dashboard</category><category>BI</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Fri, 02 May 2008 18:45:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-8501362237310555508</guid><description>&lt;p&gt;Many businesses these days are making a concerted effort to access as much BI data as possible through the browser. Funny thing is that once this wonderfully dynamic, interactive data is available in a thin-client environment all some users (still) want to do is print everything out (not just the summary page, everything) and then circle the important bits with a red pen.&lt;/p&gt;  &lt;p&gt;The printability of an interactive dashboard or report and all the data that lies beneath still seems to find itself located high on the list of deliverables for many projects. Making a web-based BI solution printable can add a great deal of unnecessary complexity to something that should be kept as simple as possible.&lt;/p&gt;  &lt;p&gt;It's ironic in these days of &amp;quot;going green&amp;quot; that organisations who pride themselves on their environmental friendliness and sustainable business practices are the ones who want to print out reams of report data. Now, please don't mistake me for an environmental zealot desperately trying to save trees; printing a page or two of report data is fine and can be very useful. But printing an entire &amp;quot;pack&amp;quot; that literally flattens out all that interactive, drillable goodness that that we work so hard to build really seems to be a waste, not so much of trees but of technology.&lt;/p&gt;  &lt;p&gt;In this day and age where wireless hotspots and 3G cards abound, VPNs are commonplace and most employees work off a laptop why is there still a need to print large chunks of dynamic, highly-accessible, web-based data? Often the need to print everything is accompanied by requests for the data be available in the BI environment as close to real time as possible. This is a very reasonable request in many cases. Naturally the contents of the printed report is out of date very quickly as a result. Hmmm, maybe &lt;em&gt;that's &lt;/em&gt;the reason Google haven't produced a book of their work yet. Pity. If they did then I'd to be able to bring my printed copy of the internet with me wherever I (and my staff of Google-book-carriers) go! I could even fold over the corner of the pages that I like and use my red pen to mark the interesting bits.&lt;/p&gt;  &lt;p&gt;The short shelf life of printed report data reminded me of a classic sketch from an old radio program that I am certain some readers of this blog may have heard of - &lt;a href="http://en.wikipedia.org/wiki/The_Goon_Show"&gt;The Goon Show&lt;/a&gt;. Others may have no clue what I am talking about. Either way I am sure you'll get a kick out out of it *.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: What time is it Eccles?         &lt;br /&gt;&lt;/em&gt;&lt;em&gt;       &lt;br /&gt;&lt;b&gt;Eccles&lt;/b&gt;: Err, just a minute. I've got it written down here on a piece of paper. A nice man wrote the time down for me this morning.         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: Then why do you carry it around with you, Eccles?         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Eccles&lt;/b&gt;: Well, if anybody asks me the time, I can show it to them.         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: Wait a minute Eccles, my good man...         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Eccles&lt;/b&gt;: What is it fellow?         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: It's writted on this bit of paper, what is eight o'clock, is writted.         &lt;br /&gt;&lt;/em&gt;&lt;b&gt;       &lt;br /&gt;&lt;em&gt;Eccles&lt;/em&gt;&lt;/b&gt;&lt;em&gt;: I know that my good fellow. That's right. When I asked the fella to write it down, it was eight o'clock.        &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: Well then, supposing when somebody asks you the time, it isn't eight o'clock?         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Eccles&lt;/b&gt;: Then I don't show it to them.         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Bluebottle&lt;/b&gt;: Well how do you know when it's eight o'clock?         &lt;br /&gt;        &lt;br /&gt;&lt;b&gt;Eccles&lt;/b&gt;: I've got it written down on a piece of paper!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;* copied from &lt;a title="http://en.wikipedia.org/wiki/The_Goon_Show#Surreality" href="http://en.wikipedia.org/wiki/The_Goon_Show#Surreality"&gt;http://en.wikipedia.org/wiki/The_Goon_Show#Surreality&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you want to listen to the audio of this sketch it can be found on the same &lt;a href="http://en.wikipedia.org/wiki/The_Goon_Show#Surreality"&gt;Wikipedia page&lt;/a&gt; as the text above.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=dKpGzH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=dKpGzH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=K0zush"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=K0zush" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=1eoKWH"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=1eoKWH" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/282432750" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-05-03T09:59:36.675+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/05/but-can-i-print-it.html</feedburner:origLink></item><item><title>KPI, Scorecard, Dashboard - what's in a name?</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/282432753/kpi-scorecard-dashboard-what-in-name.html</link><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Fri, 02 May 2008 18:30:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-3205485385052781931</guid><description>&lt;p&gt;Is it just my imagination or are the words &amp;quot;KPI&amp;quot;, &amp;quot;Scorecard&amp;quot; and &amp;quot;Dashboard&amp;quot; appearing in spec documents with increasing frequency and (sometimes) decreasing thought? Just because a requirements document states deliverables of KPIs, scorecards and dashboards does not necessarily mean that using PPS elements that happen to share the same name represent the most appropriate solution.&lt;/p&gt;  &lt;p&gt;This is not a post about what I think KPIs, scorecards &amp;amp; dashboard are or aren't, neither is it a post about any shortcomings in PPS functionality. What I'm focusing on is the sometimes casual use of the words &amp;quot;KPI&amp;quot; &amp;quot;scorecard&amp;quot; and &amp;quot;dashboard&amp;quot; in requirements documents. When it comes to a (potential) PPS deployment this has can skew the solution that is eventually delivered and potentially limit it's future capabilities and flexibility as an organisation's BI maturity grows.&lt;/p&gt;  &lt;h4&gt;Scorecards&lt;/h4&gt;  &lt;p&gt;In the heady days of BSM &lt;a href="http://nickbarclay.blogspot.com/2006/05/bsm-to-scorecard-or-not-to-scorecard.html"&gt;I blogged&lt;/a&gt; that people often expected a scorecard to do the job of a report and were disappointed when the product did not deliver on their expectations. &amp;quot;I guess it's just not fully featured yet...&amp;quot; they'd say. I still maintain that this disappointment was misplaced as expectations were centred around their idea of what a scorecard is for when it came to BSM and, more recently, PPS. &lt;/p&gt;  &lt;p&gt;The PPS team has done a great job in improving the flexibility and functionality available to us when it comes to building out scorecard elements. In many ways I consider this to be a double-edged sword. So much new layout, aggregation and formatting power has now been given to the scorecard element that many new users of the technology are once more looking to the scorecard to deliver functionality that it is not best suited for.&lt;/p&gt;  &lt;p&gt;There are many things that PPS scorecards do well but these are the ones that I think are most relevant: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;enable hierarchical arrangement &amp;amp; nesting of KPIs &lt;/li&gt;    &lt;li&gt;manage KPI weights &lt;/li&gt;    &lt;li&gt;normalise KPI scores &lt;/li&gt;    &lt;li&gt;roll up disparate KPIs &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;To me &lt;em&gt;these&lt;/em&gt; are the things that make a scorecard what it is. A scorecard is there to provide an overall insight to an organisation / business unit / business area. Either we're heading in the right direction, in line with the strategic objectives of business, or we're not. If not, why not? That overall insight is materialised by the scorecard using the features above.&lt;/p&gt;  &lt;p&gt;Scorecards facilitate comparison and roll up of figures that are normally incomparable with a simple reporting tool. Try rolling up your gross profit, cost of sale % and the number of customer complaints last month. Adding $1,436,814, 7.54% and 36 is not going to give you a very useful figure. Nonetheless these are useful KPIs that can assist in measuring the overall health of a business. Creating a KPI for each and arranging them in a scorecard could be the genesis of the very powerful business tool. Why? Because the inner workings of the scorecard element do all the heavy lifting to normalise and roll these numbers up - they can now be compared in the context of the scorecard. It's the normalisation of KPI values and subsequent weighed roll up that is the killer feature of scorecards.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/nick.barclay/SBukIOmyWYI/AAAAAAAAAYI/cmPnlKtcPko/s1600-h/CorporateScorecard4.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="451" alt="CorporateScorecard" src="http://lh6.ggpht.com/nick.barclay/SBukKOmyWZI/AAAAAAAAAYQ/n1dBjmI7fNA/CorporateScorecard_thumb1.png?imgmax=800" width="582" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Often the output users want when they say &amp;quot;scorecard&amp;quot; is the &lt;strong&gt;next level down&lt;/strong&gt; from a scorecard like the one depicted above; the more granular detail of what is &lt;em&gt;causing&lt;/em&gt; our customer complaints to increase, what department are they increasing for? The high-level scorecard simply indicates that the level of customer complaints has breached it's defined threshold.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A scorecard is &lt;em&gt;not&lt;/em&gt; a report.&lt;/strong&gt; More often than not people use the &amp;quot;scorecard&amp;quot; to describe [what I would consider to be] a report that uses some form of visual indicator like a smiley face or traffic light to denote good or bad performance. Now this is not to say that they are wrong in their use of this term, the definition of a scorecard is not set in stone. Just be wary not to let someone's use of this word steer you inexorably towards the creation of a PPS scorecard element without considering the best way to deliver what's required. If a breakdown of customer complaints by department with subtotals is required, how about an SSRS report? Just because PPS scorecards do aggregations and support the arrangement of dimension members on row and column axes does not necessarily make them a replacement for Excel pivot tables or the &lt;a href="http://msdn.microsoft.com/en-us/library/ms157134.aspx"&gt;data regions&lt;/a&gt; supported by SSRS. Don't try and push the data into a scorecard just because requirements ask for a series of green ticks or a red crosses and uses the word &amp;quot;scorecard&amp;quot; to describe what's needed.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;KPIs&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;PPS KPIs are very flexible elements. Their real strength lies in the ability encapsulate logic centred around a particular metric and compare actual with desired performance. These KPI elements can be hierarchically arranged, weighted and rolled up in a scorecard. KPIs do their best work and provide the greatest reuse when the the majority of logic and data required for their definition is stored and managed in the back end. i.e. the definition built in Dashboard Designer is kept &lt;strong&gt;simple&lt;/strong&gt;. Another feature of well-designed KPIs is a common structure and naming standard for Actual and Target metrics. &lt;/p&gt;  &lt;p&gt;Overly complex and over-engineered KPIs (many targets, differing metric names, lots of MDX) can certainly lead to a solution but just how reusable are these elements? Can they be reused in other scorecards, or were they purpose built to &amp;quot;make scorecard X look like the picture in the spec&amp;quot;? &lt;/p&gt;  &lt;p&gt;Just because someone uses the term &amp;quot;KPI&amp;quot; does not always mean the creation of a &lt;a href="http://nickbarclay.blogspot.com/2007/05/where-do-i-create-my-kpis.html"&gt;PPS KPI element, an SSAS KPI or MOSS KPI&lt;/a&gt; is necessarily the answer. Many immediately equate the use of a smiley face, traffic light or background colour formatting with a KPI and subsequently a scorecard. Often the requirement is as simple as emphasising a positive or negative delta to a budget or forecast. Does this kind of comparison need to be made into a physical KPI? Possibly, but not definitely. Consider the alternatives. Often this kind of requirement can be fulfilled simply and elegantly with an SSRS report. Because you paid $$ for an application doesn't mean you have to use it more than the tools that came bundled with the SQL licence. Don't fall into the &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Golden_hammer"&gt;when the only tool you have is a hammer, everything looks like a nail&lt;/a&gt;&amp;quot; trap. Use the right tools for the right job.&lt;/p&gt;  &lt;h4&gt;Square peg? Round hole? No problem. &lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Bart, get me my sledgehammer!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/nick.barclay/SBukKumyWaI/AAAAAAAAAYY/Vi_O7FZub6s/s1600-h/homer_bbq_pit_web21.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 5px 5px 0px; border-right-width: 0px" height="217" alt="Don&amp;#39;t let this be you" src="http://lh3.ggpht.com/nick.barclay/SBukLemyWbI/AAAAAAAAAYg/qkKz4L-NyUA/homer_bbq_pit_web2_thumb.jpg?imgmax=800" width="293" align="right" border="0" /&gt;&lt;/a&gt;Just because KPI, scorecard and dashboard are used when describing the solution does not mean you &lt;em&gt;must&lt;/em&gt; use these PPS elements to expose the data. Doing so can lead to a top-heavy, logic-ridden BI presentation layer as a result of the ol' &amp;quot;make it look just like this spreadsheet, please&amp;quot;. Please try and avoid this situation at all costs. The square peg, round hole approach will work if you bash at it hard enough, but just how reusable will your elements be? How sensitive to change will your solution be when users start to wake up to the potential of BI and come up with all sorts of new ideas? I like Bill Inmon's quote of BI end users: &amp;quot;Give me what I ask for, then I'll tell you what I &lt;em&gt;really &lt;/em&gt;want&amp;quot;.&lt;/p&gt;  &lt;h4&gt;Dashboards&lt;/h4&gt;  &lt;p&gt;Whether you agree with someone's use of this word is immaterial. Try to figure out what they really want when they say &amp;quot;dashboard&amp;quot; before diving into solution mode. Could it be that they're simply referring to a report with a few different data regions and some dynamic navigation interactivity? Maybe. Maybe not... but it's still worth thinking about for a bit.&lt;/p&gt;  &lt;p&gt;The dashboard PPS element is a fantastic addition to the product and provides enormous potential to build great dynamic, interactive content that is accessible through WSS. Nonetheless don't let the use of &amp;quot;d&amp;quot; word can muddy the waters as to the best way to deliver the solution.&lt;/p&gt;  &lt;h4&gt;Keep it Simple&lt;/h4&gt;  &lt;p&gt;Simple, reusable, modular elements are the hallmark of a good M&amp;amp;A implementation. One of the design goals for the PPS team was to make the creation of elements simple and easy, another was to facilitate reusability of elements. Sure there are a ton of areas where you can add a little bit of extra code (&lt;a href="http://nickbarclay.blogspot.com/2007/07/performancepoint-its-all-about-mdx-baby.html"&gt;particularly MDX&lt;/a&gt;) to create some really cool dynamic behaviour in KPIs, scorecards and dashboards. I'm a big fan of this functionality, so long as it's not overused. The code required should itself be &lt;strong&gt;as simple as possible&lt;/strong&gt;. If you're beginning to see nested IIF statements housed anywhere within your BSWX file, stop - it's too complex. Let your ETL and multidimensional data source do as much of the work for you as possible. Don't tie up all your logic in the front end. &lt;/p&gt;  &lt;p&gt;Consider this situation: you have filled your PPS elements to the brim with custom code to get a scorecard/dashboard/KPI looking &amp;quot;just the way it does in the picture&amp;quot; and then the user says &amp;quot;that's great, can you please reproduce that same logic in a separate report?&amp;quot; Where does that leave you? D'oh!&lt;/p&gt;  &lt;p&gt;Creating a good dashboard (with &lt;strong&gt;&lt;em&gt;any&lt;/em&gt; &lt;/strong&gt;BI application) should be simple and quick. This simplicity and speed of creation is borne of a solid back end foundation, the use of the right tools for the right job and keeping it simple. If you are skirting the fringes of the application and using hard-coded hacks to make things look &amp;quot;the way the user wants them to&amp;quot;, take a step back and reconsider your approach.&lt;/p&gt;  &lt;h4&gt;In Summary&lt;/h4&gt;  &lt;p&gt;Just because someone utters the words KPI, scorecard or dashboard doesn't necessarily mean that the end solution should be delivered using those precise elements. Again, please note that I am not stating that people are right or wrong in their use of these terms. My point is to be wary that just because someone uses these words to describe what they want doesn't mean you necessarily need to create PPS elements that share the same name. &lt;/p&gt;  &lt;p&gt;More often than not users refer to a report with a couple of traffic lights on as a scorecard. Don't assume that everyone is thinking &lt;a href="http://en.wikipedia.org/wiki/Balanced_scorecard"&gt;Kaplan-Norton&lt;/a&gt;, normalized score calculations, cascading KPIs and weighted rollups when they say &amp;quot;KPI&amp;quot; and &amp;quot;scorecard&amp;quot;. They may not thinking along the visual and analytical lines of &lt;a href="http://www.amazon.com/Information-Dashboard-Design-Effective-Communication/dp/0596100167/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1208989541&amp;amp;sr=8-1"&gt;Stephen Few&lt;/a&gt; or &lt;a href="http://www.amazon.com/Performance-Dashboards-Measuring-Monitoring-Managing/dp/0471724173/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1208989674&amp;amp;sr=8-1"&gt;Wayne Eckerson&lt;/a&gt; when they say &amp;quot;dashboard&amp;quot; either.&lt;/p&gt;  &lt;p&gt;Analyse and understand what users want and deliver it with the most appropriate tools. Do not bash the virtual square peg into the round hole with a PerformancePoint &lt;a href="http://en.wikipedia.org/wiki/Golden_hammer"&gt;golden hammer&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=h07O7H"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=h07O7H" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=eEtYYh"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=eEtYYh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ljXN8H"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ljXN8H" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/282432753" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-05-03T09:30:55.643+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/05/kpi-scorecard-dashboard-what-in-name.html</feedburner:origLink></item><item><title>PPS Planning Excel Add-In Blog</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/272459128/pps-planning-excel-add-in-blog.html</link><category>Planning</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Thu, 17 Apr 2008 16:49:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-1414852622562334819</guid><description>&lt;p&gt;Peter Eb., one of the developers of the PerformancePoint Planning Excel Add-In and very active contributor/moderator of the &lt;a href="http://forums.microsoft.com/TechNet/ShowForum.aspx?ForumID=1871&amp;amp;SiteID=17"&gt;Planning TechNet forum&lt;/a&gt;, has just started blogging. He's already posted some interesting tips on the add-in's functionality and features. Well worth subscribing.&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/petereb/default.aspx" href="http://blogs.msdn.com/petereb/default.aspx"&gt;http://blogs.msdn.com/petereb/default.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ZCURFI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ZCURFI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=HPlPRi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=HPlPRi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=zGfsCI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=zGfsCI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/272459128" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-04-18T07:54:46.964+10:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/04/pps-planning-excel-add-in-blog.html</feedburner:origLink></item><item><title>Two MVP's... who'da thunk it</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/262522727/two-mvp-who-thunk-it.html</link><category>MVP</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Wed, 02 Apr 2008 03:36:00 -0500</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-8976512787645261923</guid><description>&lt;p&gt;Wow. I was really thrilled and honoured at the news I got this afternoon - I have been awarded MVP SQL Server. &lt;/p&gt;  &lt;p&gt;Now, you wouldn't know it by &lt;a href="http://adriandownes.blogspot.com/2008/04/on-well-deserved-award-for-true.html"&gt;his post&lt;/a&gt;, but the ever-modest &lt;a href="http://adriandownes.blogspot.com"&gt;Adrian Downes&lt;/a&gt; has also been awarded the title of SQL Server MVP for his efforts in recent times. Instead of announcing his well-deserved award he congratulated me on mine instead. Typical :) &lt;/p&gt;  &lt;p&gt;Well done, mate.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=oyx61I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=oyx61I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=YVav4i"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=YVav4i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=SYkNRI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=SYkNRI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/262522727" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-04-02T20:51:04.055+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/04/two-mvp-who-thunk-it.html</feedburner:origLink></item><item><title>Creating Dynamic Web Page Reports</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/242952730/creating-dynamic-web-page-reports.html</link><category>MonitorAnalyse</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Thu, 28 Feb 2008 15:51:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-3960133405238187179</guid><description>&lt;p&gt;As a follow up to my post on &lt;a href="http://nickbarclay.blogspot.com/2008/02/debugging-filter-links-with-web-page.html"&gt;debugging filter links with web page reports&lt;/a&gt; I thought it would be worthwhile to put together a quick example to illustrate just what an unsung hero the web page report type is. Just think of the web page report as the catch-all report type. Basically, if you can't do it with one of the many pre-baked M&amp;amp;A report types then the web page report is what you want. &lt;/p&gt;  &lt;p&gt;In the &lt;a href="http://nickbarclay.blogspot.com/2008/02/debugging-filter-links-with-web-page.html"&gt;debugging filter links post&lt;/a&gt; we saw how dashboard items communicate with each other by embedding data in the Request.Params collection. In that example we simply displayed the contents of this collection. The next logical step is to actually &lt;em&gt;do&lt;/em&gt; something with those contextual values we are passing to the report item at runtime. Remember that all the web page report does is send the user to a static URL, the dynamic part comes from two places:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;the incoming filter links configured on the report item embedded in the dashboard &lt;/li&gt;    &lt;li&gt;what is &lt;em&gt;done&lt;/em&gt; with this filter link data by the code contained in the page we send the user to &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Web page reports pretty much opens up the entire .NET framework to us, the possibilities are virtually limitless.&lt;/p&gt;  &lt;p&gt;For example, let's imagine (in a somewhat bizarre set of circumstances) that our users want a dashboard page that will allow them to select a which search engine they wish to use. They wish to select their search engine of choice using a dropdown. the home page of the search engine name they select will appear in the dashboard and they can then search to their hearts content.&lt;/p&gt;  &lt;h4&gt;1. Create a tabular data source for the search engine filter&lt;/h4&gt;  &lt;p&gt;This will be done using a simple &lt;strong&gt;Import from Excel 2007 Workbook&lt;/strong&gt; tabular data source and manually entering the names of three lesser-known search engines. Please note that they are arranged in alphabetical order, nothing more :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/nick.barclay/R8dOiodOySI/AAAAAAAAAV8/KoD2xE7HZkk/TabularDataSource5%5B1%5D" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="324" alt="TabularDataSource" src="http://lh4.google.com/nick.barclay/R8cs4odOyJI/AAAAAAAAAWE/eZoO4PxxIpE/TabularDataSource5_thumb" width="653" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note the &lt;strong&gt;Column Name&lt;/strong&gt; property in the shot above is set to SiteName. This value could be anything but be aware that when creating filter links from a tabular data source filter it is this column name value that will be used as the name of the item that is added to Request.Params.&lt;/p&gt;  &lt;h4&gt;2. Create the redirect ASPX Page&lt;/h4&gt;  &lt;p&gt;Next is to write the code for our redirect page. This will be the page that we point the web page report towards and contains the logic that makes our report dynamic. &lt;/p&gt;  &lt;p&gt;In this example I have called it SearchEndineRedirect.aspx. Once completed drop the file (or a copy of it) into the &lt;em&gt;%Program Files\Microsoft Office PerformancePoint Server\3.0\Monitoring\PPSMonitoring_1\Root\ &lt;/em&gt;directory. &lt;/p&gt;  &lt;p&gt;Here is the code for that page. &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#0000ff"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot;%&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#0000ff"&gt;&amp;lt;%      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(!string.IsNullOrEmpty(Request.Params[&amp;quot;SiteName&amp;quot;]))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string SearchEngine = Request.Params[&amp;quot;SiteName&amp;quot;];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string WebSite = &amp;quot;&lt;/font&gt;&lt;a href="http://www." ?="?"&gt;&lt;font face="Courier New"&gt;http://www.&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" color="#0000ff"&gt; + SearchEngine + &amp;quot;.com&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Redirect(WebSite);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(&amp;quot;No filter values available yet - create a dashboard and configure a SiteName filter link on this report&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;%&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;All this code is does is look for the item named SiteName in the Request.Params collection and then concatenates the value contained therein with a &lt;strong&gt;&amp;quot;http://www.&amp;quot;&lt;/strong&gt; in front and a &lt;strong&gt;&amp;quot;.com&amp;quot;&lt;/strong&gt; at the end. We then redirect the user to this newly-generated URL.&lt;/p&gt;  &lt;h4&gt;3. Create a web page report &lt;/h4&gt;  &lt;p&gt;Configure the URL property to point towards the newly-created SearchEngineRedirect.aspx page (http://localhost:40000/SearchEngineRedirect.aspx) as seen below. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.google.com/nick.barclay/R8cs6IdOyKI/AAAAAAAAAWI/WqdCEl0_3mI/WebPageURL1%5B1%5D" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="412" alt="WebPageURL" src="http://lh4.google.com/nick.barclay/R8cs7odOyLI/AAAAAAAAAWM/IvFKLguCUNM/WebPageURL1_thumb" width="638" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Remember, all we're doing is sending the user to a URL, it could be any URL. Preferably, though, we want it to be a page that has been created with the intention of doing something useful with the filter link values that are going to be passed to it. Remember, we can also pass static parameter values to our report via the web page report URL. This technique is detailed in the &lt;a href="http://nickbarclay.blogspot.com/2008/02/debugging-filter-links-with-web-page.html"&gt;debugging filter links post&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note that our C# code from step 2 checks whether the SiteName item of Request.Params collection IsNullOrEmpty. In essence we're checking whether this item exists in the collection and handle things from there. By doing this we avoid a stack trace error being displayed in the DD interface when configuring the report because, at this point, the SiteName item &lt;em&gt;can't&lt;/em&gt; exist; we need to create the filter link in the dashboard first. Handling this unavoidable situation elegantly helps in confirming that our ASPX page is ready for use.&lt;/p&gt;  &lt;h4&gt;4. Create and publish the dashboard&lt;/h4&gt;  &lt;p&gt;Create a simple 1 page dashboard and create a Tabular Values filter referencing the Search Engines data source and using the SiteName field configured in step 1.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/nick.barclay/R8cs8odOyMI/AAAAAAAAAWQ/_bt9jgIwqnU/DashboardUIFilterLink5%5B1%5D" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="546" alt="DashboardUIFilterLink" src="http://lh6.google.com/nick.barclay/R8cs_IdOyNI/AAAAAAAAAWU/3N7zRK0vVbw/DashboardUIFilterLink5_thumb" width="636" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;5. Deploy the dashboard to the preview site and test&lt;/h4&gt;  &lt;p&gt;Now all that is left is to admire our handiwork. As you can see from the shots below the user's interaction with the dropdown passes the selected value to our SearchEngineRedirect.aspx which then generates the URL and redirects them to the appropriate page via the web page report.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/nick.barclay/R8ctBodOyOI/AAAAAAAAAWY/Y0H7bfKj_f4/DashboardGoogle%5B1%5D" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="491" alt="DashboardGoogle" src="http://lh3.google.com/nick.barclay/R8ctEYdOyPI/AAAAAAAAAWc/upKwhfVaSmk/DashboardGoogle_thumb" width="636" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/nick.barclay/R8ctGodOyQI/AAAAAAAAAWg/tbZcO5jvaIo/DashboardLive%5B2%5D" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="495" alt="DashboardLive" src="http://lh6.google.com/nick.barclay/R8ctJIdOyRI/AAAAAAAAAWk/ZqLpIK8Jqrg/DashboardLive_thumb%5B1%5D" width="641" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The sample workspace and .aspx file used in this post can be downloaded &lt;a href="http://cid-57b71381c5a7d02f.skydrive.live.com/self.aspx/Public/Downloadable%20Blog%20Files/DynamicWebPageReports.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=gB34xI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=gB34xI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=Ci3iBi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=Ci3iBi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=lRXfLI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=lRXfLI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/242952730" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-02-29T11:16:13.892+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/02/creating-dynamic-web-page-reports.html</feedburner:origLink></item><item><title>Debugging Filter Links with Web Page Reports</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/240537276/debugging-filter-links-with-web-page.html</link><category>MonitorAnalyse</category><category>Tips</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Sun, 24 Feb 2008 04:30:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-1098571439263912224</guid><description>&lt;p&gt;Often when hooking up and testing dashboard filter links you may find the need to see precisely what value is being passed by that filter link. This becomes particularly urgent if you just can't figure out &lt;em&gt;why&lt;/em&gt; things in your dashboard are not functioning the way you expect them to.&lt;/p&gt;  &lt;p&gt;A few months ago the PPS team put out &lt;a href="http://blogs.msdn.com/performancepoint/archive/2007/10/05/implementing-a-hyperlink-from-a-kpi-in-a-scorecard.aspx"&gt;this post&lt;/a&gt; about using web page reports to mimic the absent OverridingURL functionality that used to exist in BSM. It is this technique that I have adapted to create a simple debug page to display the values a filter link passes across to other dashboard items.&lt;/p&gt;  &lt;h4&gt;Dashboard Filter Links and Request.Params&lt;/h4&gt;  &lt;p&gt;For those who may not have done much web development (this includes me) the Request.Params collection typically contains things like browser metadata, cookies, server variables and query string values among others. It is a common means of providing page-to-page communication within web applications.&lt;/p&gt;  &lt;p&gt;Filters and scorecards pass outgoing filter link data to other dashboard items by appending the data to the Request.Params collection. The receiving dashboard item finds the appropriate Request.Params item it has been configured to look for in the collection and obtains the data needed to drive its behaviour.&lt;/p&gt;  &lt;p&gt;What we want to do is simply expose the items in the Request.Params being sent out by either a dashboard filter or scorecard item so that we can see what they're passing across.&lt;/p&gt;  &lt;h4&gt;1. Create &amp;amp; Configure ASPX page&lt;/h4&gt;  &lt;p&gt;Create an .ASPX file named RequestParamItems.aspx using the following code. (thanks to &lt;a href="http://www.hassansyed.blogspot.com/"&gt;Hassan Syed&lt;/a&gt; for his help filling the gaps in my C# skills)     &lt;br /&gt;    &lt;br /&gt;&lt;font face="Courier New" color="#004080"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot;%&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#004080"&gt;&amp;lt;%      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; Request.Params.Count; i++)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;b&amp;gt;Param Name: &amp;lt;/b&amp;gt;&amp;quot; + Request.Params.AllKeys.GetValue(i) + &amp;quot;&amp;lt;br&amp;gt;&amp;quot; +       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;&amp;lt;b&amp;gt;Param Value: &amp;lt;/b&amp;gt;&amp;quot; + Request.Params[i].ToString() + &amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;%&amp;gt;&lt;/font&gt;&lt;/p&gt; The code contained in the file is simple and can certainly be expanded to do much more. All this version does is iterate through the page's Request.Params collection and write the values out. Once complete copy the file into the &lt;em&gt;%Program Files\Microsoft Office PerformancePoint Server\3.0\Monitoring\PPSMonitoring_1\Root\ &lt;/em&gt;directory.   &lt;br /&gt;  &lt;h4&gt;2. Create Web Page Report&lt;/h4&gt;  &lt;p&gt;Using Dashboard Designer create a web page report that references this file that has been dropped in the Root directory. Note the URL property in the shot below points towards &lt;a href="http://localhost:40000/RequestParamItems.aspx"&gt;http://localhost:40000/RequestParamItems.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://lh5.google.com/nick.barclay/R8HktYdOx-I/AAAAAAAAATY/X9KvcH9vdIk/FilterLinkValuesDebugReport%5B13%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="483" alt="FilterLinkValuesDebugReport" src="http://lh4.google.com/nick.barclay/R8HkvIdOx_I/AAAAAAAAATg/R9xxQmGdfsI/FilterLinkValuesDebugReport_thumb%5B13%5D" width="688" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; Once set up, the report immediately retrieves the static members of the Request.Params collection. This provides a good way to confirm that your report is configured correctly and is ready to do its job once contained in a dashboard.   &lt;br /&gt;  &lt;p&gt;There's some interesting data that is brought back at this initial stage but where are the custom filter link values? They don't exist yet, we have to create them in a dashboard first. The web page report itself when viewed in DD will never contain anything more than the default members of the Request.Params collection.&lt;/p&gt;  &lt;h4&gt;3. Use the web page report to a dashboard&lt;/h4&gt;  &lt;p&gt;Add the web page report to a dashboard and create incoming filter links on it. A new item is added to the top of the Request.Params collection for each unique filter link source value name (e.g. Display Value, Member UniqueName etc.) that is added to the report. The filter link values associated with each source value name will be contained within the same Request.Params item delimited with semi-colons.&lt;/p&gt;  &lt;p&gt;In the shot below I have created 6 incoming filter links on my &lt;strong&gt;FilterLink Values Debug&lt;/strong&gt; report. Unfortunately from a UI perspective the links look like they are duplicated, they are not; the names of the item the filter link originates from is displayed which can be a little confusing. In fact I have added 3 &lt;em&gt;Display Value&lt;/em&gt; links and 3 &lt;em&gt;Member UniqueName&lt;/em&gt; links one from each of the three filters located above the report.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/nick.barclay/R8Hkw4dOyAI/AAAAAAAAATo/fHFvWSeis8Q/DashboardFilterLinks11"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="470" alt="DashboardFilterLinks" src="http://lh4.google.com/nick.barclay/R8HkzIdOyBI/AAAAAAAAATw/BI207Gi5lFU/DashboardFilterLinks_thumb1" width="691" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;4. Publish the dashboard and deploy it to the Preview site&lt;/h4&gt;  &lt;p&gt;Once deployed we can interact with our filters and actually see what those values are via the report. In the screenshot below you can see where the values for the filter selections for &lt;strong&gt;Product Color&lt;/strong&gt;, &lt;strong&gt;Geography&lt;/strong&gt; and &lt;strong&gt;Calendar &lt;/strong&gt;appearing at the top of the report grouped with their source value name.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R8Hk1YdOyCI/AAAAAAAAAT4/wb_NOChzMhc/PreviewRequestParamDebug2"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="517" alt="PreviewRequestParamDebug" src="http://lh3.google.com/nick.barclay/R8Hk34dOyDI/AAAAAAAAAUA/QsF_ZU6pjko/PreviewRequestParamDebug_thumb1" width="688" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This debugging functionality should only be used when deploying to the Preview site. It goes without saying (but I'll say it anyway) that the detailed contents of Request.Params will only be confusing to end users. &lt;/p&gt;  &lt;p&gt;The real value of having a debug web page report like this published to the Monitoring server is reusability. Whenever you need to troubleshoot filter link values you simply add it to a dashboard and hook up the troublesome filter links.&lt;/p&gt;  &lt;h5&gt;Debug Filter Link Formulas&lt;/h5&gt;  &lt;p&gt;Note that our debug web page report can also be useful for displaying the values returned by &lt;a href="http://office.microsoft.com/en-us/performancepoint/HA102433971033.aspx"&gt;filter link formulas&lt;/a&gt;. The following shot shows the resultant set that is added to the Request.Params collection after the filter link formula has been applied to the Calendar filter link. In this case it is the .CHILDREN of the currently selected filter value - the two semesters of calendar year 2004.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R8Hk6YdOyEI/AAAAAAAAAUI/Y-k2pXAbC7M/PreviewFilterLinkFormulaDebug%5B4%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="351" alt="PreviewFilterLinkFormulaDebug" src="http://lh5.google.com/nick.barclay/R8Hk8YdOyFI/AAAAAAAAAUQ/tWg4ubgbZfs/PreviewFilterLinkFormulaDebug_thumb%5B2%5D" width="680" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h5&gt;Add hard-coded parameters&lt;/h5&gt;  &lt;p&gt;It should also be noted that we can manually add values to the Request.Params collection via the URL configured in the report definition. Simply add a &amp;quot;?&amp;quot; followed by the name you want to give parameter and the value to be assigned to it separated by &amp;quot;=&amp;quot;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R8Hk-YdOyGI/AAAAAAAAAUY/pI4Xdw0rVi4/WebPageReportCustomParameter3"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="419" alt="WebPageReportCustomParameter" src="http://lh3.google.com/nick.barclay/R8Hk_4dOyHI/AAAAAAAAAUg/4UFAFfENdJo/WebPageReportCustomParameter_thumb2" width="689" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;While the addition of a hard-coded parameter is definitely not a dynamic solution at all it can still be very useful in certain situations. For example, the project I am currently working on requires users be able to write and save textual commentary at the dashboard page level. The .NET team has developed a great comment collector control which they embedded in an ASPX page.&amp;#160; We call this page using a web page report and hook up the appropriate filter links in the dashboard. However, each instance of the control needs to &amp;quot;know&amp;quot; what dashboard page it is located on so that the comments entered can be properly associated to that particular page. To solve this we've created an instance of the comment collector web page report for each dashboard page, we simply append an extra parameter to each report URL which passes the name of the page that the comment collector will reside on.&amp;#160; &lt;/p&gt;  &lt;p&gt;Remember that the URL in a web page report is static, we cannot alter it at runtime. All we can do is tell the web page report where it needs to send the user. What happens after that is up to the code within the page in concert with the contextual data provided by filter links and/or URL-based static parameters.&lt;/p&gt;  &lt;p&gt;The sample workspace file and .aspx page used in the shots above can be downloaded &lt;a href="http://cid-57b71381c5a7d02f.skydrive.live.com/self.aspx/Public/Downloadable%20Blog%20Files/DebuggingFilterLinks.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=fI6JNI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=fI6JNI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=Qanjmi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=Qanjmi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=F4bWvI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=F4bWvI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/240537276" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-02-29T11:11:31.073+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/02/debugging-filter-links-with-web-page.html</feedburner:origLink></item><item><title>PPS Web Service Connection Issues &amp; .NET 3.5</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/239308522/pps-web-service-connection-issues-net.html</link><category>MonitorAnalyse</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Fri, 22 Feb 2008 03:45:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-7153872924380045393</guid><description>&lt;p&gt;Recently I came across another connection problem that was not related to &lt;a href="http://nickbarclay.blogspot.com/2007/11/pps-data-source-connection-problems.html"&gt;data sources or application pool account privileges&lt;/a&gt;. We were unable to connect to the web service in Dashboard Designer but couldn't figure out why not. We checked everything. Eventually we tried to simply browse to the web service location in IE. On trying to browse the .asmx we were faced with a descriptive stack trace that gave us more more of an idea of where to look to solve the problem. BTW, it is worth noting that we were working on a standalone PC being using for development, not a server.&lt;/p&gt;  &lt;p&gt;The solution came courtesy of &lt;a href="http://hassansyed.blogspot.com/"&gt;Hassan Syed&lt;/a&gt;, an excellent .NET consultant I have been working with recently who maintains a blog named &amp;quot;&lt;a href="http://hassansyed.blogspot.com/"&gt;From fragile to agile&lt;/a&gt;&amp;quot; (love the name). Without stealing too much of his thunder I will say that the problem was probably related to installing .NET 3.5 long &lt;em&gt;after&lt;/em&gt; PPS M&amp;amp;A had been configured and had been working without issue. Hassan has documented what was done to bring the web service back on line &lt;a href="http://hassansyed.blogspot.com/2008/02/ms-performance-point-connection-issue.html"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;It should come as no surprise that a newer version of the framework could possibly cause problems with software that was written on an earlier version. Nonetheless, if you do want to upgrade to 3.5 Hassan's post is worth noting.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=DFoGyI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=DFoGyI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=chYuBi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=chYuBi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=jyiaaI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=jyiaaI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/239308522" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-02-22T20:45:01.663+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/02/pps-web-service-connection-issues-net.html</feedburner:origLink></item><item><title>Show Details functionality on Scorecards</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/230181189/show-details-functionality-on.html</link><category>MonitorAnalyse</category><category>Tips</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Wed, 06 Feb 2008 03:28:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-10455072045192917</guid><description>&lt;p&gt;A somewhat unknown feature of scorecards is the ability to right-click a cell and drill to the details behind it by selecting &lt;strong&gt;Show Details&lt;/strong&gt;. By default, however, the show details right-click option always seems to be grayed out. Why?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/nick.barclay/R6l9W8jm28I/AAAAAAAAARQ/dz9PnPFFB_c/ShowDetailsRightClickDisabled%5B2%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="307" alt="ShowDetailsRightClickDisabled" src="http://lh6.google.com/nick.barclay/R6l9Ysjm29I/AAAAAAAAARY/_79FI1ZzZOI/ShowDetailsRightClickDisabled_thumb%5B2%5D" width="449" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A common assumption is that this is a scorecard scoped setting like the ability to add scorecard comments. In fact, the answer to enabling this functionality lies in the calculation settings of the individual metrics of each KPI contained in the scorecard. In order to enable show details functionality the metric calculation must be set to &lt;strong&gt;Source data&lt;/strong&gt;. The PPS team &lt;a href="http://blogs.msdn.com/performancepoint/archive/2007/08/22/why-is-show-details-disabled-for-scorecard-views.aspx"&gt;posted about this&lt;/a&gt; a while back. They also wrote &lt;a href="http://blogs.msdn.com/performancepoint/archive/2008/01/17/analysis-services-actions-and-drillthrough-capabilities-supported-in-performancepoint.aspx"&gt;a more detailed post&lt;/a&gt; a short time ago too that also covers drillthrough actions on analytic charts and grids, definitely worth a read.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R6l9acjm2-I/AAAAAAAAARg/N-HVMQwQMs0/KpiMetricCalculationSourceData"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="250" alt="KpiMetricCalculationSourceData" src="http://lh4.google.com/nick.barclay/R6l9cMjm2_I/AAAAAAAAARo/oSd19TP_RdI/KpiMetricCalculationSourceData_thumb%5B1%5D" width="619" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once &lt;strong&gt;Source data&lt;/strong&gt; has been selected the &lt;strong&gt;Show Details&lt;/strong&gt; option will be enabled in any scorecard that contains the metric's parent KPI. Such a fine level of control can be handy for only allowing drillthrough on specific KPI metrics only.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.google.com/nick.barclay/R6l9csjm3AI/AAAAAAAAARw/p7zkk1zO78I/ShowDetailsRightClickEnabled%5B2%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="335" alt="ShowDetailsRightClickEnabled" src="http://lh5.google.com/nick.barclay/R6l9ecjm3BI/AAAAAAAAAR4/AmCb2rQVGuY/ShowDetailsRightClickEnabled_thumb%5B1%5D" width="458" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, the trick to getting the Show Details option ungrayed for a specific scorecard cell is to ensure the KPI metric calculation property is set to source data&lt;strong&gt;. &lt;/strong&gt;However, although the item is now un-grayed... will it work straight away? Depending on the structure of your scorecard you may find that you get the following error:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Cannot show details for this cell because both the row and column must have a selection.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This basically means that the scorecard wants at least one dimension member on its row or column axis so that it has some form of reference from which to perform the drillthrough. Sometimes, though, you may not want your scorecard to have dimension members on present columns or rows; you just want straight KPIs and metrics: a &amp;quot;traditional&amp;quot; scorecard. &lt;/p&gt;  &lt;p&gt;Here's the trick to making this work while keeping your scorecard structure the way you want it:&lt;/p&gt;  &lt;p&gt;I found that I only needed to have one dimension reference on one axis to get things to work. All you need to do is add a benign dimension member (one that is not vital for the operation of the scorecard) on the top level of the row axis. Once added right-click the item and select &lt;strong&gt;Hide&lt;/strong&gt;. In the screenshot below I added the &lt;strong&gt;All&lt;/strong&gt; member of the &lt;strong&gt;Customer&lt;/strong&gt; attribute hierarchy.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/nick.barclay/R6l9f8jm3CI/AAAAAAAAASA/jyD64FvytGM/HideDummyAllMember8"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="507" alt="HideDummyAllMember" src="http://lh5.google.com/nick.barclay/R6l9hcjm3DI/AAAAAAAAASI/GhOVLSfuer8/HideDummyAllMember_thumb4" width="335" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once the dimension is hidden the dummy &lt;strong&gt;All Customers&lt;/strong&gt; member that we have hidden will display in red. The scorecard has its dimension reference and end users will be none the wiser.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/nick.barclay/R6l9iMjm3EI/AAAAAAAAASQ/J2HheELOVEg/HiddenDummyAllMember%5B1%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="226" alt="HiddenDummyAllMember" src="http://lh5.google.com/nick.barclay/R6l9jcjm3FI/AAAAAAAAASY/x7uF9mmFgQU/HiddenDummyAllMember_thumb" width="472" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now that this is done the &lt;strong&gt;Show Details &lt;/strong&gt;gets its dimension reference on one axis (which seems to be enough in this case) and the drillthrough function will return a nice data set to you from a simple right-click and selection of Show details in the scorecard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.google.com/nick.barclay/R6l9lsjm3GI/AAAAAAAAASg/o4FFuMPVWaY/ShowDetailsWindow%5B1%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="365" alt="ShowDetailsWindow" src="http://lh3.google.com/nick.barclay/R6l9o8jm3HI/AAAAAAAAASo/9SfF3A-_hCE/ShowDetailsWindow_thumb" width="675" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;Other tips&lt;/h5&gt;  &lt;p&gt;Don't forget to ensure that the Application Pool account (or the users themselves if you've implemented PerUser security) has read access to the relational database itself and that drillthrough access has been granted on the source cube.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R6l9qcjm3II/AAAAAAAAASw/M5R7czWkWwo/CubeDrillthroughAccess"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="226" alt="CubeDrillthroughAccess" src="http://lh4.google.com/nick.barclay/R6l9sMjm3JI/AAAAAAAAAS4/SBDh0YUpvAE/CubeDrillthroughAccess_thumb" width="723" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Also remember that you won't have much luck performing a drillthrough on a calculated member or a metric that uses a custom MDX formula.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=1P80TI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=1P80TI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=dsRsOi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=dsRsOi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=2die8I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=2die8I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/230181189" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-02-06T20:28:17.927+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/02/show-details-functionality-on.html</feedburner:origLink></item><item><title>Downloadable PPS TechNet Guides</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/225602892/downloadable-pps-technet-books.html</link><category>MonitorAnalyse</category><category>Planning</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Tue, 29 Jan 2008 19:04:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-9045067710264185471</guid><description>&lt;p&gt;Via Aseem Nayar's posts in the PPS &lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2761989&amp;amp;SiteID=17"&gt;M&amp;amp;A&lt;/a&gt; and &lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2761958&amp;amp;SiteID=17"&gt;Planning&lt;/a&gt; TechNet Forums:&lt;/p&gt;  &lt;p&gt;You can now download the following PerformancePoint Server 2007 guides as Word documents from &lt;a href="http://technet.microsoft.com/en-us/library/cc161069.aspx"&gt;TechNet&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=106544"&gt;Planning &amp;amp; Architecture Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=106633"&gt;Deployment Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=106545"&gt;Server Operations Guide&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=wTsfKI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=wTsfKI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=uGVGGi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=uGVGGi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=kSqC7I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=kSqC7I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/225602892" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-02-06T05:37:19.614+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/01/downloadable-pps-technet-books.html</feedburner:origLink></item><item><title>PerformancePoint MCTS Exam 70-556 Now Available</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/220007638/performancepoint-mcts-exam-70-556-now.html</link><category>PerformancePoint</category><category>Certification</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Sun, 20 Jan 2008 14:43:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-306910442580176146</guid><description>&lt;p&gt;Via &lt;a href="http://feeds.feedburner.com/~r/EstablishExecuteEvolve/~3/219778054/on-mcts-for-performancepoint-server.html"&gt;Adrian Downes&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;Exam number 70-556 for PerformancePoint Server 2007 is now available for those interested in adding another MCTS arrow to their certification quiver. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.prometric.com/Microsoft/default.htm"&gt;Prometric&lt;/a&gt; already lists the exam on its site. Unfortunately, at the time of this writing, &lt;a href="http://www.microsoft.com/learning/mcpexams/prepare/examresults.aspx?orderby=ID"&gt;Microsoft Learning&lt;/a&gt; does not yet have the exam listed. Nonetheless, we have access to Trika Harms zum Spreckel's preview of the requirements from when the exam was in its beta phase &lt;a href="http://blogs.msdn.com/trika/archive/2007/10/04/performancepoint-server-beta-exam.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;UPDATE (29 Jan 2008):&lt;/strong&gt; the official preparation guide for the exam can now be found at &lt;/font&gt;&lt;a title="http://www.microsoft.com/learning/exams/70-556.mspx" href="http://www.microsoft.com/learning/exams/70-556.mspx"&gt;&lt;font color="#ff0000"&gt;http://www.microsoft.com/learning/exams/70-556.mspx&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ID2W5I"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ID2W5I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=ApKbwi"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=ApKbwi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/NickBarclay?a=3PydBI"&gt;&lt;img src="http://feeds.feedburner.com/~f/NickBarclay?i=3PydBI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NickBarclay/~4/220007638" height="1" width="1"/&gt;</description><atom:updated xmlns:atom="http://www.w3.org/2005/Atom">2008-01-29T20:12:50.049+11:00</atom:updated><feedburner:origLink>http://nickbarclay.blogspot.com/2008/01/performancepoint-mcts-exam-70-556-now.html</feedburner:origLink></item><item><title>PPS Data Connection Security with CustomData</title><link>http://feeds.feedburner.com/~r/NickBarclay/~3/219666144/pps-data-connection-security-with.html</link><category>MonitorAnalyse</category><category>Security</category><category>Tips</category><category>PerformancePoint</category><author>noreply@blogger.com (Nick Barclay)</author><pubDate>Sat, 19 Jan 2008 20:37:00 -0600</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-16888062.post-2837430766935017707</guid><description>&lt;p&gt;There are two well-documented data source security methods available in PerfornancePoint Monitoring &amp;amp; Analyzing: the default &lt;strong&gt;Application Security&lt;/strong&gt; model and &lt;strong&gt;Per User Connections&lt;/strong&gt;. However, as a wise green creature once whispered, &amp;quot;No. There is another...&amp;quot;&lt;/p&gt;  &lt;p&gt;More often than not security requirements for a BI solution are based around certain users only being able to access specific members of several important dimensions. CustomData security functionality in PPS serves this purpose very well and provides a solution that sits between the two already well-known data security methods.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Application Security&lt;/strong&gt; - a single application pool account is used to make all connections to data sources. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Advantage:&lt;/strong&gt; because one account makes the data source connections the monitoring server caches results providing greater speed responsiveness to all users. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Disadvantage: &lt;/strong&gt;no data security is possible based on who the user is because all users are connecting via one the account; the database does not know who they are. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;For more details on the common connection pitfalls of application security please see &lt;/em&gt;&lt;a href="http://nickbarclay.blogspot.com/2007/11/pps-data-source-connection-problems.html"&gt;&lt;em&gt;this post&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Per User Connections&lt;/strong&gt; - each user's credentials are used to connect to data sources. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Advantage:&lt;/strong&gt; highly secure, naturally this security is dependant on there being some sort of existing security framework within the data source itself. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Disadvantage: &lt;/strong&gt;little or no caching of dashboard data can occur as each data request is made with the individual user's credentials. Dashboard responsiveness and speed can take a hit. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Security is important to all the clients I work with but I always advocate careful thought and consideration before simply switching on Per User connections on a PPS Monitoring server. There is definite performance hit that comes from the fact that each user gets his or her own data. For more information on the performance difference between the two principal security methods please see the &lt;a href="http://technet.microsoft.com/en-au/library/bb660539.aspx"&gt;PPS Performance Tuning and Capacity Planning&lt;/a&gt; whitepaper.&lt;/p&gt;  &lt;p&gt;At the time of this writing, not much official documentation exists on CustomData security, hence the reason for this post. The only reason I knew of its existence originally was &lt;a href="http://blogs.msdn.com/performancepoint/archive/2007/07/12/security-considerations-for-monitoring-server.aspx"&gt;this post on the PPS team site&lt;/a&gt; some time ago. In that post lip service is paid to the CustomData option but we're really told much more than &amp;quot;it's possible&amp;quot;.&lt;/p&gt;  &lt;h4&gt;What is CustomData Security?&lt;/h4&gt;  &lt;p&gt;CustomData security is a middle ground between application and per user security. We still use an application pool account to connect to the data source, but we also have access to data about the Domain\Username of each user who is interacting with the deployed dashboard. We use this user-specific data to drive security dynamically using information configured in the relational database the cube sources data from. This alleviates having to configure and maintain many SSAS database roles tied to specific domain accounts or groups. Instead we configure a single, dynamic MDX based role which will be detailed later.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NB: &lt;/strong&gt;there is no discernable data caching advantage to using CustomData Security. The performance is much the same as when using the PerUserSecurity model. If performance is the most important factor in a PPS deployment then Application Security is certainly the best performing option.&lt;/p&gt;  &lt;h4&gt;What is Dynamic Dimension Security?&lt;/h4&gt;  &lt;p&gt;Limiting user access to certain members of a particular dimension attribute hierarchy based on their windows credentials is nothing new. For example, dynamic dimension security may decree that when I look at a dashboard I can only see Australian states in the State/Province dashboard filter.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/nick.barclay/R5K0emQ-6RI/AAAAAAAAAO8/xFyD6g15Odw/FilterAustralia%5B5%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="167" alt="FilterAustralia" src="http://lh3.google.com/nick.barclay/R5K0fmQ-6SI/AAAAAAAAAPE/IQNr4njihLs/FilterAustralia_thumb%5B3%5D" width="304" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;...while on the other hand Adrian should only see a list of Canadian provinces.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.google.com/nick.barclay/R5K0gGQ-6TI/AAAAAAAAAPM/qczNTI_M21Y/FilterCanada%5B4%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="169" alt="FilterCanada" src="http://lh4.google.com/nick.barclay/R5K0g2Q-6UI/AAAAAAAAAPU/fdSpBlJfeXw/FilterCanada_thumb%5B2%5D" width="281" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The majority of work to set up CustomData security involves the creation of a dynamic dimension security framework in your multidimensional data source and the relational source that feeds it, not PPS. If you already have security of this kind set up on your UDM then you're already most of the way there. The set up is minimal on the PPS side of things.&lt;/p&gt;  &lt;h4&gt;How I set up SSAS dynamic dimension security?&lt;/h4&gt;  &lt;p&gt;Providing any user-driven security access to PPS data cannot function without some form of back-end, SSAS and relational security infrastructure. There's a little bit to do to set this up, so instead of going into a long-winded walk-through I will instead point to two excellent articles/posts on the topic. Both of these documents cover similar ground. Using a dimension containing user details and a factless fact table to relate each user to the specific members of the dimension they are allowed to see e.g. Reseller Stores. Once the relational database infrastructure and data is in place, a SSAS role is set up containing MDX code to return a set of the allowed dimension members for the current user. I highly recommend reading at least one, if not both in order to full understand the remainder of this post.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Brian C Smith of Hitachi Consulting wrote &lt;a href="http://hccmsbi.blogspot.com/2007/08/implementing-user-specific-security-in.html"&gt;this blog post&lt;/a&gt; that contains sample T-SQL code and steps to set up a simple UDM. &lt;/li&gt;    &lt;li&gt;Teo Lachev wrote &lt;a href="http://www.sqlmag.com/Article/ArticleID/96763/sql_server_96763.html"&gt;this article for SQLMAG&lt;/a&gt; in which he covers a number of different techniques including the factless fact approach. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These are just two examples of how to implement dynamic dimension security. I'm sure there are many other creative ways to implement this kind of functionality.&lt;/p&gt;  &lt;h4&gt;How do I turn on CustomData security?&lt;/h4&gt;  &lt;p&gt;As mentioned earlier, the PPS configuration is minimal. &lt;strong&gt;Bpm.UseASCustomData&lt;/strong&gt; is a boolean attribute that can be found in the same web.config files as the &lt;strong&gt;Bpm.ServerPerUserConnection&lt;/strong&gt; attribute. Change the BPM.UseASCustomData attribute from &lt;strong&gt;False&lt;/strong&gt; to &lt;strong&gt;True&lt;/strong&gt; in the appropriate web.config files as listed below. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Preview Site:&lt;/b&gt; %\Program Files\Microsoft Office PerformancePointServer\3.0\Monitoring\PPSMonitoring_1\Preview\ &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Web Service:&lt;/b&gt; %\Program Files\Microsoft Office PerformancePoint Server\3.0\Monitoring\PPSMonitoring_1\WebService\ &lt;/li&gt;    &lt;li&gt;&lt;b&gt;SharePoint:&lt;/b&gt; %\Inetpub\wwwroot\wss\VirtualDirectories\80\ &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.google.com/nick.barclay/R5K0hWQ-6VI/AAAAAAAAAPc/dfqzKlIkq3U/WebConfigAttributes%5B9%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="201" alt="WebConfigAttributes" src="http://lh4.google.com/nick.barclay/R5K0i2Q-6WI/AAAAAAAAAPk/zQorZjn30c4/WebConfigAttributes_thumb%5B4%5D" width="536" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NB&lt;/strong&gt; It is very important to remember that the Bpm.ServerPerUserConnection be set to False when using CustomData security. We want to connect to the data source using the Application Pool account, not each individual user. Turning on Per User connections completely defeats the purpose of the security method being discussed here.&lt;/p&gt;  &lt;h4&gt;What does UseASCustomData do?&lt;/h4&gt;  &lt;p&gt;When Bpm.UseASCustomData is switched to True any PPS data source connections made to Analysis Services 2005 contain an extra attribute on the connection string: &amp;lt;CustomData&amp;gt;. The CustomData connection string attribute was added to SSAS 2005. The Monitoring server will populate this attribute with the Domain\Username of the user making the request. The data source connection itself is still being made as the application pool account. &lt;/p&gt;  &lt;p&gt;This can be particularly useful in multi-server environment where Kerberos is not configured and the double-hop issue is encountered. The information in the CustomData field can now be used to identify the user without the need for Kerberos.&lt;/p&gt;  &lt;h4&gt;How do I confirm that CustomData is switched on?&lt;/h4&gt;  &lt;p&gt;Once you have made the adjustments to the appropriate web.config files, set up a SQL Profiler trace on the SSAS server where your cube is located. Use Dashboard Designer and run a &lt;strong&gt;Test Connection&lt;/strong&gt; on one of your SSAS data sources.&lt;/p&gt;  &lt;p&gt;As you can see from the shot below the connection to the cube is being made by my Application Pool account, NETWORK SERVICE (in a production environment you would want to be using a specific domain account for the app pool identity). More importantly note that there is a &lt;strong&gt;&amp;lt;CustomData&amp;gt;&amp;lt;/CustomData&amp;gt;&lt;/strong&gt; attribute that has been added to the connection meta data containing my Domain\Username details.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.google.com/nick.barclay/R5K0mmQ-6XI/AAAAAAAAAPs/DpfLm0oI7yY/ProfilerCustomDataAttribute%5B2%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="475" alt="ProfilerCustomDataAttribute" src="http://lh6.google.com/nick.barclay/R5K0rWQ-6YI/AAAAAAAAAP0/NeslyGbbFxU/ProfilerCustomDataAttribute_thumb%5B2%5D" width="744" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;How do I make use of the CustomData attribute?&lt;/h4&gt;  &lt;p&gt;In order to get at the Domain\Username string that PPS provides within CustomData we use the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms145582.aspx"&gt;CUSTOMDATA()&lt;/a&gt; MDX function. The CustomData connection string attribute does nothing more than hold a string of characters. The CUSTOMDATA() MDX function simply returns that character string to us, we can do whatever we want with it from there. There isn't a great deal of information out there about this function but Chris Webb &lt;a href="http://cwebbbi.spaces.live.com/blog/cns!7B84B0F2C239489A!176.entry"&gt;posted about it a while back&lt;/a&gt;. In that post he pondered what this function could come in handy for. Hey Chris, I think this is a good one.&lt;/p&gt;  &lt;p&gt;In MDX you can gain access to a string containing the Domain\Username of the currently connected user by via the &lt;a href="http://technet.microsoft.com/en-us/library/ms146016.aspx"&gt;USERNAME&lt;/a&gt; MDX function. USERNAME is the MDX equivalent of the T-SQL &lt;a href="http://technet.microsoft.com/en-us/library/ms187934.aspx"&gt;SUSER_NAME()&lt;/a&gt; function. Try running this query in SSMS to return your Domain\Username.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" color="#0000ff"&gt;WITH MEMBER [Measures].[MyUsername] AS USERNAME      &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New" color="#0000ff"&gt;SELECT      &lt;br /&gt;[Measures].[MyUsername] ON 0       &lt;br /&gt;FROM [Adventure Works]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The USERNAME function is used in the articles listed above to access the Domain\Username string for the connected user to drive the dimensional security. The functionality detailed by Teo and Brian is relevant when a user connects to 