<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.adatis.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tim Kent&amp;#39;s blog</title><link>http://blogs.adatis.co.uk/blogs/timkent/default.aspx</link><description>Performance Pointing</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>An Old New Blog</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/18/old-new-blogs.aspx</link><pubDate>Tue, 18 Nov 2008 13:55:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7462</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7462</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/18/old-new-blogs.aspx#comments</comments><description>&lt;span style="COLOR:black;FONT-FAMILY:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-themecolor:text1;"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR:black;FONT-FAMILY:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-themecolor:text1;"&gt;&lt;font size="3"&gt;&lt;span style="FONT-SIZE:11pt;COLOR:black;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-themecolor:text1;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;One&amp;nbsp;of&amp;nbsp;our colleagues in the UK BI world has recently started blogging again and&amp;nbsp;is well worth subscribing to if you don&amp;#39;t already.&amp;nbsp; About time too Mark!&lt;/span&gt; 
&lt;p&gt;&lt;span style="FONT-SIZE:11pt;COLOR:black;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-themecolor:text1;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;Mark Hill - &lt;a href="http://www.markhill.org/blog"&gt;&lt;span style="COLOR:black;mso-themecolor:text1;"&gt;http://www.markhill.org/blog&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:11pt;COLOR:black;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-themecolor:text1;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;When I get a spare moment (sometime in 2011 I think!) I&amp;#39;ll update the Adatis blog roll with this and a few others.&lt;/span&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7462" width="1" height="1"&gt;</description></item><item><title>HowTo: Bullet Charts in Reporting Services 2005</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/09/howto-bullet-charts-in-reporting-services-2005.aspx</link><pubDate>Sun, 09 Nov 2008 22:38:36 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7452</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7452</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/09/howto-bullet-charts-in-reporting-services-2005.aspx#comments</comments><description>&lt;p&gt;In my &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/06/bullet-charts-and-sparklines-in-reporting-services-2005.aspx" target="_blank"&gt;last post&lt;/a&gt;, I showed a dashboard in SSRS 2005 that included sparklines, inline bar charts and bullet charts.&amp;#160; As I mentioned there is good &lt;a href="http://msdn.microsoft.com/en-us/library/aa964128.aspx" target="_blank"&gt;MSDN article&lt;/a&gt; on how to do inline charts but the Bullet chart took a little more thought.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/HowToBulletChartsinReportingServices2005_75E5/image_3.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="193" alt="image" src="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/HowToBulletChartsinReportingServices2005_75E5/image_thumb.png" width="491" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As one of my colleagues has pointed out, these aren&amp;#39;t bullet charts in the truest sense that &lt;a href="http://www.perceptualedge.com/articles/misc/Bullet_Graph_Design_Spec.pdf" target="_blank"&gt;Stephen Few designed them&lt;/a&gt; as they don&amp;#39;t show the &amp;quot;bullet&amp;#39;s path&amp;quot; running through them, however I think they serve the same purpose albeit in a simplistic way&lt;/p&gt;  &lt;p&gt;The charts are made using 100% stacked bars with three data values for each &amp;quot;zone&amp;quot; of your chart:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The section below your marker; &lt;/li&gt;    &lt;li&gt;The marker itself (which of course only shows if it falls in that zone); and &lt;/li&gt;    &lt;li&gt;The section above your marker.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So in the Speciality Bike Shop row in the example above, the three values that add up to the first zone of 25 are &lt;strong&gt;11&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt; and &lt;strong&gt;13 &lt;/strong&gt;with the colour set as Dark Grey, Black and Dark Grey respectively.&amp;#160; Whereas as Value Added Reseller is made up of three zones with values &lt;strong&gt;0&lt;/strong&gt;,&lt;strong&gt; 0&lt;/strong&gt; and &lt;strong&gt;25&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Likewise, the 2nd zone for Speciality Bike Shop is made up of &lt;strong&gt;0&lt;/strong&gt;, &lt;strong&gt;0&lt;/strong&gt; and &lt;strong&gt;64&lt;/strong&gt; whereas VAR is &lt;strong&gt;42&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt; and &lt;strong&gt;22 &lt;/strong&gt;this time with light grey, black, light grey&lt;/p&gt;  &lt;p&gt;So how do we come with the numbers? It&amp;#39;s just a case of calculating the size of the zones as a percentage of the whole and deciding whether the marker should show.&amp;#160; Lets follow the MDX query through to explain&lt;/p&gt;  &lt;p&gt;First lets define our key measures: the zone limits, and the actual value for our marker.&amp;#160; I&amp;#39;m using constants for the zone sizes but you could easily have this coming from your data:&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;WITH 
&lt;span style="color:#008000;"&gt;//replace this constant with your Zone 1 measure    &lt;/span&gt;
MEMBER [Measures].[Zone1] AS
     300000

&lt;span style="color:#008000;"&gt;//replace this constant with your Upper Zone 2 measure&lt;/span&gt;
MEMBER [Measures].[Zone2] AS
     1067000

&lt;span style="color:#008000;"&gt;//replace this constant with your Upper Zone 3 measure&lt;/span&gt;
MEMBER [Measures].[Zone3] AS
     1200000
    
&lt;span style="color:#008000;"&gt;//Actual measure&lt;/span&gt;
MEMBER [Measures].[Actual] AS
    [Measures].[Reseller Sales Amount]&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next we need to calculate which zone the marker will fall in - we set a boolean for each which is also used as the marker for the chart.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#008000;"&gt;//Are we in the zone 1&lt;/span&gt;
MEMBER [Measures].[ShowZone1Marker] AS
    IIF(
        [Measures].[Actual] &amp;lt; [Measures].[Zone1],
        1,
        0
    )
&lt;span style="color:#008000;"&gt;//Are we in Zone 2&lt;/span&gt;
MEMBER [Measures].[ShowZone2Marker] AS
    IIF(
        ([Measures].[Actual] &amp;gt;= [Measures].[Zone1]
        AND
        [Measures].[Actual] &amp;lt; [Measures].[Zone2]),
        1,
        0
    )

&lt;span style="color:#008000;"&gt;//Are we in Zone 3&lt;/span&gt;
MEMBER [Measures].[ShowZone3Marker] AS
    IIF(
        [Measures].[Actual] &amp;gt;= [Measures].[Zone2],
        1,
        0
    )&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Then we need to calculate the size of the lower and upper parts of each zone, lower first:&amp;#160; &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;MEMBER [Measures].[Zone1a] AS
    (([Measures].[Actual]) * [Measures].[ShowZone1Marker]
    /
    [Measures].[Zone3]
    * 
    100)
    - 
    ([Measures].[ShowZone1Marker] * [Measures].[ShowZone1Marker])&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;the logic is:&lt;/p&gt;

&lt;p&gt;The actual value subtract the previous zone limit (not required in zone 1),&amp;#160; multiplied by the boolean value of whether or not the marker falls in this zone as a percentage of the whole chart.&amp;#160; The bottom line removes one from the value to allow for the marker.&lt;/p&gt;

&lt;p&gt;The upper part of zone 1:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;MEMBER [Measures].[Zone1b] AS
    ([Measures].[Zone1] - ([Measures].[Actual] * [Measures].[ShowZone1Marker]))
    /
    [Measures].[Zone3]
    * 
    100&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;this time the logic is:&lt;/p&gt;

&lt;p&gt;the zone size subtract the actual value multiplied by the boolean value of whether or not the marker falls in this zone as a percentage of the whole chart.&lt;/p&gt;

&lt;p&gt;Repeat the same for subsequent zones and then bring it all together in a select statement on your cube&lt;/p&gt;

&lt;p&gt;Just in case I&amp;#39;ve explained all this as badly as I think I have, you can download the &lt;a href="http://blogs.adatis.co.uk/files/folders/sample_report_projects/entry7451.aspx" target="_blank"&gt;sample project&lt;/a&gt; and have a look yourselves (you&amp;#39;ll need to sign in/up).&lt;/p&gt;

&lt;p&gt;And the scale - errr OK in case you hadn&amp;#39;t already guessed, it&amp;#39;s an image on the column header - hey what more do you want?the moon on a stick? ;) You can size the chart to fit the scale or create your own image.&amp;#160; The image is also included in the sample project.&lt;/p&gt;

&lt;p&gt;All criticism/suggestion for improvement welcome.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7452" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Dashboards/default.aspx">Dashboards</category></item><item><title>Bullet Charts and Sparklines in Reporting Services 2005</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/06/bullet-charts-and-sparklines-in-reporting-services-2005.aspx</link><pubDate>Thu, 06 Nov 2008 20:29:50 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7449</guid><dc:creator>Tim Kent</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7449</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/06/bullet-charts-and-sparklines-in-reporting-services-2005.aspx#comments</comments><description>&lt;p&gt;Here at Adatis we&amp;#39;re big fans of Reporting Services.&amp;#160; Yep, it has it&amp;#39;s quirks and frustrations (don&amp;#39;t talk to me about excel export!) but doesn&amp;#39;t deserve all the criticism it gets in our opinion.&amp;#160; You can create some great looking reports with not a lot of extra effort over the defaults (though how many times have you seen a &amp;quot;slate&amp;quot; style report called &amp;quot;Report1&amp;quot; go into production!)&lt;/p&gt;  &lt;p&gt;We&amp;#39;re also fans of what some might call the more &amp;quot;trendy&amp;quot; visualisation techniques such as sparklines and bullet charts and with Microsoft &lt;a href="http://www.dundas.com/Company/Media/PressSQL2008.aspx" target="_blank"&gt;acquiring Dundas technology&lt;/a&gt; for use in SQL 2008, SSRS has some much improved functionality in this area.&amp;#160; I&amp;#39;ll be taking a look at some of these new features in a future post.&lt;/p&gt;  &lt;p&gt;Whilst SSRS 2005 does have it&amp;#39;s limitations, with a little effort you can still create some very effective information visualisations.&amp;#160; The dashboard below is built using completely standard functionality&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BulletchartsinReportingServices2008_8142/image_4.png" target="_blank"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="489" alt="image" src="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BulletchartsinReportingServices2008_8142/image_thumb_1.png" width="739" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Adding sparklines and in-table bar charts is very simple (and pretty clever IMO).&amp;#160; This &lt;a href="http://msdn.microsoft.com/en-us/library/aa964128.aspx" target="_blank"&gt;MSDN Article&lt;/a&gt; covers how to do it in detail but in essence you simply add a line or bar chart into a cell in your data table.&lt;/p&gt;  &lt;p&gt;Whilst the bullet chart (in the Sales Channel Performance region of the dashboard) may be simplistic compared to those available in SSRS 2008 or MicroCharts from &lt;a href="http://www.xlcubed.com/en/" target="_blank"&gt;XLCubed&lt;/a&gt; (from whom I nicked the styling for our dashboard) it still provides a very clear visualisation of the data.&amp;#160; This required a little more trickery in the underlying query but is also just a chart in a table cell - this time a 100% stacked bar.&amp;#160; I&amp;#39;ve explained how this works &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/11/06/bullet-charts-and-sparklines-in-reporting-services-2005.aspx" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7449" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Dashboards/default.aspx">Dashboards</category></item><item><title>BI conference- Day 3</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/11/bi-conference-day-3.aspx</link><pubDate>Sat, 11 Oct 2008 02:45:53 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7436</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7436</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/11/bi-conference-day-3.aspx#comments</comments><description>&lt;p&gt;So after a &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/10/bi-conference-day-4.aspx" target="_blank"&gt;slight delay&lt;/a&gt;, here&amp;#39;s a quick note on Day 3 and the conference in general.&lt;/p&gt;  &lt;p&gt;We only caught the second half of the Keynote from Kurt DelBene of the Office group - investing in Excel - making it more rich - and what a great reporting tool Access is? errr Ok.&amp;#160; You can imagine the fun and games that goes on between the Office and SQL teams, with the PPS team stuck somewhere in the middle :)&amp;#160; More ridiculous staged customer Q&amp;amp;A style discussion followed about how great Office is - which saw a good chunk of the audience leaving again - seriously guys!&lt;/p&gt;  &lt;p&gt;The first session of the day - Avoiding Common Mistakes with Analysis Services - nothing ground breaking here but the session was really well presented by &lt;a href="http://www.learnmicrosoftbi.com" target="_blank"&gt;Craig Utley&lt;/a&gt;, who in particular explained the concept of attribute relationships really well.&amp;#160; Plus a reminder of the extremely useful ignoreunrelateddimension property which stops users from seeing data where they&amp;#39;ve&amp;#160; selected a dimension that doesn&amp;#39;t link to the measure group (think AdventureWorks, Reseller Sales with the customer dimension).&lt;/p&gt;  &lt;p&gt;I ducked out of the last session to take a look round the shop - I nearly got myself a &lt;a href="http://blogs.conchango.com/mickhorne/archive/2008/10/08/soiled-briefs-from-seattle-part-1.aspx" target="_blank"&gt;Microsoft embroidered denim shirt&lt;/a&gt; but I knew how envious the guys back at the Adatis office would be and they didn&amp;#39;t have enough for the whole company.&amp;#160; I settled for two Microsoft golf shoe bags - &lt;a href="http://blogs.adatis.co.uk/blogs/martynbullerwell/default.aspx" target="_blank"&gt;Martyn&lt;/a&gt; and &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/" target="_blank"&gt;Sacha&lt;/a&gt; are gonna be so pleased on their birthdays!&lt;/p&gt;  &lt;p&gt;So highlights for me:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Getting to meet some very cool people, particularly some of the PPS product team who took time out of their schedule to chat to us and were genuinely interested in what we had to say. &lt;/li&gt;    &lt;li&gt;The BI power hour was great - some genius use of PPS as I reported in Day 2 - I hope we can get our hands on the &amp;quot;Perfoply&amp;quot; and &amp;quot;Girlfriend Management&amp;quot; Planning models.&amp;#160; They could be deal clinchers with certain potential customers just to show how varied the possible uses of PPS Planning are. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Lowlights: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Some very average sessions (mixed in with some very good ones mind).&amp;#160; The chalk talks were particularly bad logistically; over-subscribed, overcrowded and poor AV; &lt;/li&gt;    &lt;li&gt;As reported by &lt;a href="http://denglishbi.spaces.live.com/" target="_blank"&gt;Dan English&lt;/a&gt; and others there was a serious lack of any PPS v2 (or even SP2) information - you&amp;#39;d think with Gemini being announced they&amp;#39;d want to at least hint about what was coming (particularly from a M&amp;amp;A perspective).&amp;#160; However, the &amp;quot;Upgrade to PerformancePoint&amp;quot; button in Gemini might suggest it&amp;#39;s going to play a good part.&amp;#160; I have a feeling M&amp;amp;A V2 will be a huge step up.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Generally pretty good - I&amp;#39;ll be back next year for sure.&amp;#160; But for now time to get back to the &lt;a href="http://farm2.static.flickr.com/1212/528951443_6fc6290bbf.jpg" target="_blank"&gt;important business of day 5...&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7436" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/BI+conference/default.aspx">BI conference</category></item><item><title>BI Conference Day 4 ;)</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/10/bi-conference-day-4.aspx</link><pubDate>Fri, 10 Oct 2008 16:18:43 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7433</guid><dc:creator>Tim Kent</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7433</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/10/bi-conference-day-4.aspx#comments</comments><description>&lt;p&gt;Day 3 review coming soon - unfortunately I&amp;#39;m busy right now. He he&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BIConferenceDay4_14CDA/NorthShore_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="408" alt="NorthShore" src="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BIConferenceDay4_14CDA/NorthShore_thumb.jpg" width="581" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7433" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Non+BI/default.aspx">Non BI</category></item><item><title>BI Conference - Day 2</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/08/bi-conference-day-2.aspx</link><pubDate>Wed, 08 Oct 2008 13:40:26 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7422</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7422</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/08/bi-conference-day-2.aspx#comments</comments><description>&lt;p&gt;First of all a quick correction following my post on day one where I had a bit of code name confusion.&amp;#160; Project &amp;quot;Madison&amp;quot; is the evolution of the DatAllegro acquisition, Project &amp;quot;Gemini&amp;quot; is the self service BI and &amp;quot;Kilimanjaro&amp;quot; is the code name for the (interim?) release in the first half of 2010 that will include &amp;quot;Madison&amp;quot; and &amp;quot;Gemini&amp;quot;&lt;/p&gt;  &lt;p&gt;So what of day two? The Ben Stein keynote was interesting, though not a patch on the Michael Treacy&amp;#39;s&amp;#160; from last year.&amp;#160; This was followed by an extremely cheesy and completely staged &amp;quot;Q&amp;amp;A&amp;quot; session with the platinum sponsors about where BI will be in 2020.&amp;#160; I didn&amp;#39;t stay to hear the answers! I know they have to keep these sponsors happy but do MS really think people take any notice of this stuff?&lt;/p&gt;  &lt;p&gt;I went for the MDM session next which was very heavy going and disappointing in that we still didn&amp;#39;t get to see the product - though we may see it at next year&amp;#39;s BI conference (same time next year)! &lt;/p&gt;  &lt;p&gt;Got to meet &lt;a href="http://bimvp.com/blogs/bsm/default.aspx" target="_blank"&gt;Patrick Husting&lt;/a&gt; and a number of other PPS experts over lunch, and in the afternoon we got a chance to quiz some of the Gemini team on a few of the points mentioned yesterday.&amp;#160; I raised the topic of &amp;quot;AS hell&amp;quot; where users are creating random cubes all over the place and they had a good response: People are always going to do self service reporting in some way whether we like it or not, no matter how good the underlying data is, so why not do it in a controlled manner where everything is audited and logged and the IT team has full visibility of what is going.&amp;#160; There was a &amp;quot;Gemini&amp;quot; breakout session which showed the operations dashboard behind the scenes - very cool.&amp;#160; &amp;quot;Gemini&amp;quot; really looks impressive and has obviously already had a lot of effort put in, I have a feeling the usual version 1 worries may not be surfacing too much here - people are going to be desperate to get their hands on it!&lt;/p&gt;  &lt;p&gt;Last session of the day for me was the&amp;#160; BI power hour which was very entertaining. A working Monopoly game in PPS with full analytics and Profit and Loss for each player, a girlfriend management Planning model (looking at how the seriousness of your relationship affects your future cashflow - ha ha) and two player battleships in Reporting Services - I want these guy&amp;#39;s jobs! Also&amp;#160; a chance too briefly see MDM in action - it looks pretty good! Why they couldn&amp;#39;t show it in the MDM session I don&amp;#39;t understand...&lt;/p&gt;  &lt;p&gt;Finally the conference party which was held at the the impressive QWest stadium, home of the Seattle Seahawks, with casino games, lots of x-box and Football and American Football out on the pitch.&lt;/p&gt;  &lt;p&gt;Here&amp;#39;s &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel" target="_blank"&gt;Jereminho&lt;/a&gt; scoring an absolute peach - back of the net!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BIConferenceDay2_101FA/backofthenet_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="141" alt="backofthenet" src="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/BIConferenceDay2_101FA/backofthenet_thumb.jpg" width="752" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7422" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/MDM/default.aspx">MDM</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/BI+conference/default.aspx">BI conference</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/SQL+Server+Gemini/default.aspx">SQL Server Gemini</category></item><item><title>Day 1 at the BI conference</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/07/day-1-at-the-bi-conference.aspx</link><pubDate>Tue, 07 Oct 2008 06:46:52 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7420</guid><dc:creator>Tim Kent</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7420</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/10/07/day-1-at-the-bi-conference.aspx#comments</comments><description>&lt;p&gt;So here we are in Seattle at the BI conference.&amp;#160; Day 1 and it&amp;#39;s been great to catch up with some old faces and meet some new ones.&amp;#160; We were promised some big news today and as is being reported by &lt;a href="http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!2814.entry" target="_blank"&gt;Chris&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/mosha/archive/2008/10/06/so-what-is-exactly-project-gemini.aspx" target="_blank"&gt;Mosha&lt;/a&gt;, &lt;a href="http://sqlblog.com/blogs/marco_russo/archive/2008/10/06/microsoft-bi-conference-2008-announcements-on-stage.aspx" target="_blank"&gt;Marco&lt;/a&gt; and all, we weren&amp;#39;t disappointed.&amp;#160; Both &amp;quot;Kilimanjaro&amp;quot; and &amp;quot;Gemini&amp;quot; look super-exciting for all of us in the MS BI world.&amp;#160; The former is the evolution of the DatAllegro acquisition&amp;#160; - we saw an SSRS report that ran in 10-15 seconds against (hold little finger to corner of mouth) one trillion relational records in a 150 terabyte database - impressive.&amp;#160; &lt;/p&gt;  &lt;p&gt;Equally impressive is 20 million rows sorting and filtering in the blink of an eye!&amp;#160; The Gemini project (self-service BI) had two key features for me;&amp;#160; Firstly the in-memory storage (think TM1) that allows that sort of performance and secondly, and something that hasn&amp;#39;t been widely commented on so far, the ability to publish your Excel reports to SharePoint/web (as &lt;a href="http://www.xlcubed.com/en/" target="_blank"&gt;XLCubed Web&lt;/a&gt; does now) at the click of a button.&amp;#160; The interface looked really good already and of course it&amp;#39;s generating AS cubes behind the scenes.&amp;#160; It did raise the question of how it&amp;#39;s all going to fit in with PPS V2 - hopefully the Office and SQL teams have been talking!&lt;/p&gt;  &lt;p&gt;I think that a lot of BI professionals were probably initially thinking (like me) that this could be bad news for their careers but having taken it all in, I don&amp;#39;t think that&amp;#39;s the case.&amp;#160;&amp;#160; Although it&amp;#39;s going to have data cleansing abilities, this isn&amp;#39;t going to be a replacement for data warehouses/marts.&amp;#160; In fact for the whole self-service BI thing to really take off, it&amp;#39;s going to need really good data underneath it.&amp;#160;&amp;#160; Microsoft&amp;#39;s intention with the Gemini release is to &amp;quot;democratise&amp;quot; BI; The more people who get to use this type of concept, the better the data quality will have to be - you can&amp;#39;t expect every department to have to clean their own data.&lt;/p&gt;  &lt;p&gt;Allowing users to create and publish their own cubes and reports has a few warning signs as well - isn&amp;#39;t this just excel hell without excel? Every department can create their own calculations, reports, cubes etc; We&amp;#39;ve been telling our clients for years that they really need one version of the truth - but now we&amp;#39;re going to let each user make his own truth? It will certainly need some thought.&lt;/p&gt;  &lt;p&gt;As &lt;a href="http://cwebbbi.spaces.live.com/Blog/cns!7B84B0F2C239489A!2814.entry" target="_blank"&gt;Chris W&lt;/a&gt; mentions, it&amp;#39;s likely to also still need technical resource to help users create complex calculations so we won&amp;#39;t be out of a job just yet ;)&lt;/p&gt;  &lt;p&gt;As for the rest of the day, some interesting sessions around PPS and SSRS were the order of the day for me.&amp;#160; Though disappointment in one respect as I found out that the PPS monitoring SDK would definitely not allow you to build a custom cascading filter - something that I was going to investigate.&lt;/p&gt;  &lt;p&gt;More later this week....&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7420" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/BI+conference/default.aspx">BI conference</category></item><item><title>Looks like the game's finally up.....</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/29/looks-like-the-game-s-finally-up.aspx</link><pubDate>Mon, 29 Sep 2008 20:06:19 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7416</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7416</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/29/looks-like-the-game-s-finally-up.aspx#comments</comments><description>&lt;p&gt;.....for us so-called experts ;)&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.amazon.co.uk/Microsoft-PerformancePoint-2007-Dummies/dp/0470239662/ref=sr_1_5?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222718438&amp;amp;sr=8-5" href="http://www.amazon.co.uk/Microsoft-PerformancePoint-2007-Dummies/dp/0470239662/ref=sr_1_5?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222718438&amp;amp;sr=8-5" target="_blank"&gt;http://www.amazon.co.uk/Microsoft-PerformancePoint-2007-Dummies/dp/0470239662/ref=sr_1_5?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222718438&amp;amp;sr=8-5&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7416" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Books/default.aspx">Books</category></item><item><title>PPS Monitoring - Missing Parameters using a Reporting Services report in SharePoint integrated mode</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/29/pps-monitoring-missing-parameters-using-a-reporting-services-report-in-sharepoint-integrated-mode.aspx</link><pubDate>Mon, 29 Sep 2008 19:39:49 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7415</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7415</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/29/pps-monitoring-missing-parameters-using-a-reporting-services-report-in-sharepoint-integrated-mode.aspx#comments</comments><description>&lt;p&gt;If you&amp;#39;re running Monitoring with SP1 applied and working with a Reporting Services report in your dashboard that comes from a report server in SharePoint integrated mode, you may experience an issue where your parameters don&amp;#39;t appear in the Report Parameters section.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/PPSMonitoringMissingParametersusingaRepo_12296/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="221" alt="image" src="http://blogs.adatis.co.uk/blogs/timkent/WindowsLiveWriter/PPSMonitoringMissingParametersusingaRepo_12296/image_thumb.png" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There&amp;#39;s a hotfix available for this issue upon request from MS support:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://support.microsoft.com/kb/956553/en-us" href="http://support.microsoft.com/kb/956553/en-us"&gt;http://support.microsoft.com/kb/956553/en-us&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7415" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint+Monitoring/default.aspx">PerformancePoint Monitoring</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Dashboards/default.aspx">Dashboards</category></item><item><title>PerformancePoint at the MS BI Conference</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/25/performancepoint-at-the-ms-bi-conference.aspx</link><pubDate>Thu, 25 Sep 2008 07:58:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7410</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7410</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/09/25/performancepoint-at-the-ms-bi-conference.aspx#comments</comments><description>&lt;p&gt;As &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/" target="_blank"&gt;Sacha&lt;/a&gt; has mentioned, he, &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/" target="_blank"&gt;Jeremy&lt;/a&gt; and I will all be attending the BI conference in less than two weeks time in Seattle.&amp;#160; Last year was a great chance to meet some of the BI community and attend some really good BI sessions but was (unsurprisingly) a little light on PPS content.&amp;#160; This year we&amp;#39;re overloaded with sessions and it&amp;#39;s going to be a tough choice of which to attend with at least one and often two or three potential sessions in every time slot.&amp;#160; A couple that have caught my eye:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.msbiconference.com/pages/members/sessiondetails.aspx?sid=458" target="_blank"&gt;&lt;strong&gt;Advanced Dashboard &amp;amp; Scorecard Design Techniques&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; -&lt;/strong&gt; just one of a number of sessions that Alyson Powell Erwin (Monitoring Product Manager) is presenting - those of you who read the Monitoring forums frequently will know that Alyson has the answer to most of the questions raised.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.msbiconference.com/pages/members/sessiondetails.aspx?sid=444" target="_blank"&gt;&lt;strong&gt;Office PerformancePoint Server 2007 Planning - Implementation Tips And Tricks&lt;/strong&gt;&lt;/a&gt; - a chance to hear how other PPS teams have gone about projects.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ve no doubt Jeremy and Sacha will be going to see Michael Bower and Scott Sebelsky present &lt;a href="http://www.msbiconference.com/pages/members/sessiondetails.aspx?sid=488" target="_blank"&gt;&lt;strong&gt;Financial Consolidation with Office PerformancePoint Server 2007&lt;/strong&gt;&lt;/a&gt; as well as numerous other Planning specific sessions.&lt;/p&gt;  &lt;p&gt;This is just a taster - take a look at the &lt;a href="http://www.msbiconference.com/pages/members/SessionBrowser.aspx" target="_blank"&gt;session list&lt;/a&gt; and plan your diary.&amp;#160; On top of this there&amp;#39;s some great SQL BI sessions, as well a chance to get a look at MDM - hopefully they will filming lots of the sessions as last year.&lt;/p&gt;  &lt;p&gt;We&amp;#39;re also hoping to meet (in person) as many of what&amp;#39;s becoming a really strong PPS community, do make sure you come up and say hello if you see us around. &lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7410" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/BI+conference/default.aspx">BI conference</category></item><item><title>PerformancePoint Monitoring Web Service - Part 3</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/08/22/performancepoint-monitoring-web-service-part-3.aspx</link><pubDate>Fri, 22 Aug 2008 16:47:23 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7386</guid><dc:creator>Tim Kent</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7386</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/08/22/performancepoint-monitoring-web-service-part-3.aspx#comments</comments><description>&lt;p&gt;In &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/05/29/performancepoint-monitoring-web-service-part-1.aspx"&gt;Part 1&lt;/a&gt; we looked at the basics of connecting to web service and retrieving the metadata.&amp;#160; &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/24/performancepoint-monitoring-web-service-part-2.aspx"&gt;Part 2&lt;/a&gt; looked at how to create a datasource first class object (FCO) and the quirks of the &amp;quot;well known&amp;quot; properties (thanks to &lt;a href="http://blogs.msdn.com/wadedor/archive/2008/07/24/working-with-pmservice-s-wsdl-generated-classes.aspx" target="_blank"&gt;Wade Dorrell&lt;/a&gt; for the feedback and for raising a usability bug for the next version).&amp;#160; In this post we&amp;#39;ll look at how to create one of the other FCO&amp;#39;s - in this case a report though as you can imagine the process for creating a KPI (the other &amp;quot;singular&amp;quot; FCO) is similar.&lt;/p&gt;  &lt;p&gt;Once again, its not too hard to work out that we&amp;#39;ll need to use the &lt;strong&gt;CreateReportView&lt;/strong&gt; function and as before we&amp;#39;ll create a ReportView object in our code that will get passed to the function once we&amp;#39;ve set up all the properties.&amp;#160; &lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; PPSM.ReportView CreateReport(PPSM.PmService mon)
    {
        &lt;span style="color:#008000;"&gt;//declare our reportview object&lt;/span&gt;
        PPSM.ReportView rep = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.ReportView();
        &lt;span style="color:#008000;"&gt;//set the guid for our object - this gets used as the primary key in the db table&lt;/span&gt;
        rep.Guid = System.Guid.NewGuid();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;We know how to set the &amp;quot;well known&amp;quot; properties from part 2 and it&amp;#39;s exactly the same process here (including the identifier) so it makes sense to create a re-usable function to do this for all our FCO&amp;#39;s&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; PPSM.BpmProperty[] SetWellKnownProperties(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; name, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; description, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; owner)
    {
        &lt;span style="color:#008000;"&gt;//declare the three individual property types for the property array&lt;/span&gt;
        PPSM.BpmPropertyText bpmName = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyText();
        PPSM.BpmPropertyLongText bpmDesc = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyLongText();
        PPSM.BpmPropertyUser bpmOwner = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyUser();

        &lt;span style="color:#008000;"&gt;//set some details for the properties&lt;/span&gt;
        bpmName.Text = name;
        bpmDesc.Text = description;
        bpmOwner.Login = owner;

        &lt;span style="color:#008000;"&gt;//initialise the properties array&lt;/span&gt;
        PPSM.BpmProperty[] wkprop = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmProperty[3];

        &lt;span style="color:#008000;"&gt;//set the properties array with the three elements&lt;/span&gt;
        wkprop[0] = bpmName;
        wkprop[1] = bpmDesc;
        wkprop[2] = bpmOwner;

        &lt;span style="color:#008000;"&gt;//declate a GUID and set the unique id of each property&lt;/span&gt;
        wkprop[0].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Name&amp;quot;&lt;/span&gt;;
        wkprop[1].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Description&amp;quot;&lt;/span&gt;;
        wkprop[2].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Owner&amp;quot;&lt;/span&gt;;

        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; wkprop;
    }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Lets call the function and also set the type of report (in our case an Olap Grid).&amp;#160; All good so far....&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//set the well known properties&lt;/span&gt;
        rep.Properties = SetWellKnownProperties(&lt;span style="color:#006080;"&gt;&amp;quot;My Report&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;My Rep Desc&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Me&amp;quot;&lt;/span&gt;);
        &lt;span style="color:#008000;"&gt;//set the type&lt;/span&gt;
        rep.TypeName = &lt;span style="color:#006080;"&gt;&amp;quot;OLAPGrid&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;There are a couple more obvious properties that can be set (e.g. begin points and end points) but from here things get more complicated.&amp;#160; The majority of the important properties are stored in a single XML property of the ReportView object called &lt;strong&gt;CustomData&lt;/strong&gt;.&amp;#160; This means that you&amp;#39;ll have create and manipulate an xml document in your code that matches exactly the format required.&lt;/p&gt;

&lt;p&gt;In practical use this may preclude using purely the web service to create FCOs completely from scratch.&amp;#160; As an alternative workaround you could start from a template report stored on the server and then use and update the custom data property from that template.&amp;#160; In reality of course you are unlikely to be automating the creation of reports completely from scratch - much more likely to just be updating the report datasource for example.&amp;#160; Just for the sake of proving the concept, this is what we&amp;#39;ll do in our case.&lt;/p&gt;

&lt;p&gt;The other workaround is to code against the object model in &lt;strong&gt;Microsoft.PerformancePoint.Scorecards.Client.dll &lt;/strong&gt;rather than the WSDL of the web service.&amp;#160; This exposes the properties more clearly and is, as I understand, what happens behind the scenes in Dashboard Designer. IMHO this slightly defeats the object of a web service but I&amp;#39;m sure this will be rectified going forward.&lt;/p&gt;

&lt;p&gt;As we&amp;#39;ve already gone through the process of creating a new reportview object we&amp;#39;ll carry on down that path for this example.&amp;#160; Of course it might be simpler in reality to grab an existing reportview object using &lt;strong&gt;GetReportView&lt;/strong&gt; and simply change the required properties and assign a new guid.&amp;#160; You use the &lt;strong&gt;CreateReportView&lt;/strong&gt; function regardless of whether you are creating or updating - the existence of the object&amp;#39;s guid in the underlying database table will define which happens.&amp;#160; &lt;/p&gt;

&lt;p&gt;This function returns the customdata for an object&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetCustomData(PPSM.PmService mon, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ReportID)
    {
        Guid g = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Guid(ReportID);
        PPSM.ReportView rep = mon.GetReportView(g);
        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; rep.CustomData;
    }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next we need to declare an XMLDocument to store the customdata and call our function passing in the Guid of a known report.&amp;#160; I&amp;#39;m sure there are much cleaner ways to work with XML objects but it&amp;#39;s Friday night!!&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//declare an xmldoc to hold the customdata&lt;/span&gt;
        XmlDocument custData = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlDocument();

        &lt;span style="color:#008000;"&gt;//you&amp;#39;ll need to find the id of a similar type report from your PPS Monitoring database&lt;/span&gt;
        &lt;span style="color:#008000;"&gt;//load the custom data from ana existing report into an xmldocument&lt;/span&gt;
        custData.LoadXml(GetCustomData(mon, &lt;span style="color:#006080;"&gt;&amp;quot;d8c5ffbd-c01c-409f-ab1b-d0695227049b&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now obviously using the GUI of Dashboard designer it&amp;#39;s easy too grab the data source by name.&amp;#160; In code you would need to come up with a clever way of doing this or just work with knowing the guid of the datasources you want to use for the report.&amp;#160; It&amp;#39;s possible that you may have just created or updated a datasource as part of your application. &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//update the datasource elements of the customdata - quick and dirty hack!&lt;/span&gt;
        custData.DocumentElement[&lt;span style="color:#006080;"&gt;&amp;quot;QueryData&amp;quot;&lt;/span&gt;].ChildNodes[1].InnerText = &lt;span style="color:#006080;"&gt;&amp;quot;3da20613-0a02-4e6f-ad17-6a42ec4d6b62&amp;quot;&lt;/span&gt;;
        custData.DocumentElement[&lt;span style="color:#006080;"&gt;&amp;quot;QueryState&amp;quot;&lt;/span&gt;].ChildNodes[2].InnerText = &lt;span style="color:#006080;"&gt;&amp;quot;3da20613-0a02-4e6f-ad17-6a42ec4d6b62&amp;quot;&lt;/span&gt;;

        &lt;span style="color:#008000;"&gt;//and now lets pass the edited customdata to our new reportview object&lt;/span&gt;
        rep.CustomData = custData.InnerXml.ToString();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt; Finally pass to the web service&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//finally lets pass our modified reportview object to the webservice&lt;/span&gt;
        mon.CreateReportView(rep);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Updated project is on the &lt;a href="http://blogs.adatis.co.uk/files/folders/net_projects/entry7359.aspx" target="_blank"&gt;download&lt;/a&gt; site as usual and includes an example of the customdata xml for a reportview object.&amp;#160; Thanks as usual to Wade, Alyson and Tim at MS for taking the time to answer my DFQs!&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7386" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint+Monitoring/default.aspx">PerformancePoint Monitoring</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/Web+Service/default.aspx">Web Service</category></item><item><title>Type 2 SCDs - Calculating End Date when you only have Effective Date</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/08/17/type-2-scds-calculating-end-date-when-you-only-have-effective-date.aspx</link><pubDate>Sun, 17 Aug 2008 20:40:04 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7384</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7384</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/08/17/type-2-scds-calculating-end-date-when-you-only-have-effective-date.aspx#comments</comments><description>&lt;p&gt;Here&amp;#39;s a quick one for creating an end date column when you only have an effective date column in your data source to work with.&amp;#160; The secret is to join the table to itself with a greater than join on the effective date.&amp;#160; You then use the effective date from your joined table to give you your end date.&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;SELECT&lt;/span&gt;     
    DT1.AccountID 
    ,DT1.EffectiveDate
    &lt;font color="#008000"&gt;--Add a default end date for current record and subtract a day so the end date is one day before the next start date  &lt;/font&gt;
    ,ISNULL(DATEADD(d,-1, DT2.EffectiveDate), &lt;span style="color:#006080;"&gt;&amp;#39;31/12/2099&amp;#39;&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;AS&lt;/span&gt; EndDate 
    ,DT1.Price
&lt;span style="color:#0000ff;"&gt;FROM&lt;/span&gt;         
    dbo.PriceTable &lt;span style="color:#0000ff;"&gt;AS&lt;/span&gt; DT2 
    &lt;span style="color:#0000ff;"&gt;RIGHT&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;OUTER&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;JOIN&lt;/span&gt;
        dbo.PriceTable &lt;span style="color:#0000ff;"&gt;AS&lt;/span&gt; DT1 
        DT2.AccountID = DT1.AccountID 
        &lt;span style="color:#0000ff;"&gt;AND&lt;/span&gt;
        DT2.EffectiveDate &amp;gt; DT1.EffectiveDate&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7384" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/SSIS/default.aspx">SSIS</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/SCD/default.aspx">SCD</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/T-SQL/default.aspx">T-SQL</category></item><item><title>Worth it's weight in....</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/28/worth-it-s-weight-in.aspx</link><pubDate>Mon, 28 Jul 2008 21:29:50 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7372</guid><dc:creator>Tim Kent</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7372</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/28/worth-it-s-weight-in.aspx#comments</comments><description>&lt;p&gt;Following on from &lt;a href="http://blogs.adatis.co.uk/blogs/adatisnews/archive/2008/07/28/adatis-goes-gold.aspx" target="_blank"&gt;Sacha&amp;#39;s post&lt;/a&gt; re Adatis achieving MS Gold partnership I just wanted to:&lt;/p&gt;  &lt;p&gt;a) blow our own trumpet a little bit more ;-); and&lt;/p&gt;  &lt;p&gt;b) add my thanks to our customers, partners and especially the awesome Adatis team who have worked their a*ses off to make this possible!&lt;/p&gt;  &lt;p&gt;Whilst Gold partnership isn&amp;#39;t perhaps the rarest thing these days it&amp;#39;s still a big deal for a small company like ourselves to achieve it.&lt;/p&gt;  &lt;p&gt;I&amp;#39;ll go now before I do a Gwyneth....sniffle...&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7372" width="1" height="1"&gt;</description></item><item><title>PerformancePoint Monitoring Web Service - Part 2</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/24/performancepoint-monitoring-web-service-part-2.aspx</link><pubDate>Thu, 24 Jul 2008 11:32:33 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7360</guid><dc:creator>Tim Kent</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7360</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/24/performancepoint-monitoring-web-service-part-2.aspx#comments</comments><description>&lt;p&gt;In my &lt;a href="http://blogs.adatis.co.uk/blogs/timkent/archive/2008/05/29/performancepoint-monitoring-web-service-part-1.aspx" target="_blank"&gt;last post&lt;/a&gt; we looked at the basics of connecting to the web service and using some simple functions to retrieve some metadata.&amp;#160; Those of you who downloaded the sample project would have spotted that I added some functionality to retrieve all the annotations for a given scorecard - something we&amp;#39;ve been asked for by a number of clients.&amp;#160; This time we&amp;#39;ll look a little deeper and look at how we could automate production of the FCOs (First Class Objects) within PPSM.&lt;/p&gt;  &lt;p&gt;The process of building a dashboard in code is in essence just as you would do it in Dashboard Designer.&amp;#160; Remember when you are using Dashboard Designer it&amp;#39;s actually making calls to the web service behind the scenes - no dll&amp;#39;s involved.&amp;#160; If you use a tool such as &lt;a href="http://www.fiddler2.com/" target="_blank"&gt;Fiddler2&lt;/a&gt; you can see exactly what is getting passed in the calls.&lt;/p&gt;  &lt;p&gt;So first we need to create a data source.&amp;#160; Once again our friendly PPSM dev team have named the functions just as you would expect so no prizes for guessing we need to use the &lt;strong&gt;CreateDataSource&lt;/strong&gt; function.&amp;#160; You then need to create a datasource object in your code which is passed to that function.&amp;#160; This is fairly straight-forward in that you set the attributes of the data source object you&amp;#39;ve created and give it a unique ID (GUID).&amp;#160; The usual apologies for the state of my code!&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CreatePPSDS(PPSM.PmService mon)
{
   &lt;span style="color:#008000;"&gt;//declare the datasource&lt;/span&gt;
    PPSM.DataSource ds = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.DataSource();

    &lt;span style="color:#008000;"&gt;//set the attributes of the data source&lt;/span&gt;
    ds.SourceName = &lt;span style="color:#006080;"&gt;&amp;quot;ADOMD.NET&amp;quot;&lt;/span&gt;;
    ds.ServerName = &lt;span style="color:#006080;"&gt;&amp;quot;Localhost&amp;quot;&lt;/span&gt;;
    ds.DatabaseName = &lt;span style="color:#006080;"&gt;&amp;quot;Adventure Works DW Standard Edition&amp;quot;&lt;/span&gt;;
    ds.CubeName = &lt;span style="color:#006080;"&gt;&amp;quot;Adventure Works&amp;quot;&lt;/span&gt;;
    ds.CubeDisplayName = &lt;span style="color:#006080;"&gt;&amp;quot;Adventure Works&amp;quot;&lt;/span&gt;;

    &lt;span style="color:#008000;"&gt;//give the data source a GUID&lt;/span&gt;
    ds.Guid = System.Guid.NewGuid();&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The first quirk is that the data source name, owner and description aren&amp;#39;t directly exposed on the DataSource object but in a &lt;strong&gt;BpmProperty&lt;/strong&gt; array called Properties so first you need to declare each element individually so you can set it&amp;#39;s individual properties; Name is a &lt;strong&gt;BpmPropertyText&lt;/strong&gt;, Description is a &lt;strong&gt;BpmPropertyLongText&lt;/strong&gt; and Owner is a &lt;strong&gt;BpmPropertyUser&lt;/strong&gt;.&amp;#160; This properties array is common to all FCO&amp;#39;s (and in fact inherited from the base Element Object) so this will be the same method we use for Data Sources, Scorecards, Dashboards etc.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//declare the three individual property types for the property array&lt;/span&gt;
        PPSM.BpmPropertyText dsName = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyText();
        PPSM.BpmPropertyLongText dsDesc = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyLongText();
        PPSM.BpmPropertyUser dsOwner = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmPropertyUser();
        
        &lt;span style="color:#008000;"&gt;//set some details for the properties&lt;/span&gt;
        dsName.DisplayName = &lt;span style="color:#006080;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;;
        dsName.Description = &lt;span style="color:#006080;"&gt;&amp;quot;Name Description&amp;quot;&lt;/span&gt;;
        dsName.Text = &lt;span style="color:#006080;"&gt;&amp;quot;A data source name&amp;quot;&lt;/span&gt;;
        dsName.Visible = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;
        dsDesc.Text = &lt;span style="color:#006080;"&gt;&amp;quot;MyDataSourceDescription&amp;quot;&lt;/span&gt;;
        dsOwner.Login = &lt;span style="color:#006080;"&gt;&amp;quot;TCK&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Next we have to initialise the Properties array on the DataSource object itself so we can assign the individual properties we declared earlier to the elements within it.&amp;#160; And here comes the next quirk - and I&amp;#39;ll unashamedly admit that this one had me completely foxed! Each element of the DataSource properties array requires a uniquename, and not just any unique name but a very specific one - &lt;strong&gt;8dd07d4d87794510afdb1f07664359bc&lt;/strong&gt;.&amp;#160; Without this your data source will be created but won&amp;#39;t have a name, description or owner!&amp;#160; Thanks to Alyson Powell Erwin of the &lt;a href="http://blogs.msdn.com/performancepoint/default.aspx" target="_blank"&gt;PPSM Team&lt;/a&gt; for solving this one for me :)&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//initialise the properties array of the data source&lt;/span&gt;
        ds.Properties = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.BpmProperty[3];

        &lt;span style="color:#008000;"&gt;//set the properties array with the three elements&lt;/span&gt;
        ds.Properties[0] = dsName;
        ds.Properties[1] = dsDesc;
        ds.Properties[2] = dsOwner;

        &lt;span style="color:#008000;"&gt;//declare a GUID and set the unique id of each property&lt;/span&gt;
        ds.Properties[0].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Name&amp;quot;&lt;/span&gt;;
        ds.Properties[1].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Description&amp;quot;&lt;/span&gt;;
        ds.Properties[2].UniqueName = &lt;span style="color:#006080;"&gt;&amp;quot;8dd07d4d87794510afdb1f07664359bc_Element_Owner&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Note the &amp;quot;_Element_...&amp;quot; on the end of the UniqueName - this is also mandatory.&amp;#160; That&amp;#39;s all the quirks now :)&lt;/p&gt;

&lt;p&gt;Next we can add members to our roles if required.&amp;#160; These are stored in the Memberships array of the DataSource&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//initialise the Memberships array&lt;/span&gt;
        ds.Memberships = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.Membership[1];
        &lt;span style="color:#008000;"&gt;//for each membership you want to add you then need to initialise the element of the array&lt;/span&gt;
        ds.Memberships[0] = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PPSM.Membership();
        &lt;span style="color:#008000;"&gt;//then set the properties (note the control backslash in the login name)&lt;/span&gt;
        ds.Memberships[0].Login = &lt;span style="color:#006080;"&gt;&amp;quot;Domain\\login&amp;quot;&lt;/span&gt;;
        ds.Memberships[0].Role = &lt;span style="color:#006080;"&gt;&amp;quot;Editor&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Finally call the CreateDataSource method passing your DataSource object of the web service and your work here is done!&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;//finally pass to the web service call&lt;/span&gt;
        mon.CreateDataSource(ds);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If you need to update the data source then you retrieve the data source using &lt;strong&gt;GetDataSource&lt;/strong&gt;, update the properties as before and then pass the object the&lt;strong&gt; CreateDataSource&lt;/strong&gt; function. This automatically deals with versioning.&lt;/p&gt;

&lt;p&gt;The sample project is &lt;a href="http://blogs.adatis.co.uk/files/folders/net_projects/entry7359.aspx" target="_blank"&gt;here&lt;/a&gt; (you&amp;#39;ll need to login and don&amp;#39;t forget to open as a web site rather than a project in VS)&lt;/p&gt;

&lt;p&gt;Next time we&amp;#39;ll look at how to create one of the other 1st class objects using our data source.&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7360" width="1" height="1"&gt;</description></item><item><title>PerformancePoint MCPs</title><link>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/23/performancepoint-mcps.aspx</link><pubDate>Wed, 23 Jul 2008 13:48:00 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7307</guid><dc:creator>Tim Kent</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/timkent/rsscomments.aspx?PostID=7307</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/timkent/archive/2008/07/23/performancepoint-mcps.aspx#comments</comments><description>&lt;p&gt;I was a little surprised to see that (&lt;a class="" href="http://www.microsoft.com/learning/mcp/certified.mspx" target="_blank"&gt;as of June 2008&lt;/a&gt;) there are already 329 people certified in PerformancePoint (i.e. have passed the 70-556 exam) and whilst it&amp;#39;s not the hardest exam (IMO compared to 445 and 446)&amp;nbsp;it&amp;#39;s a good sign that PPS uptake is getting stronger and stronger.&lt;/p&gt;
&lt;p&gt;Mind you most of the 329 probably work for CapGemini who should have had &lt;a class="" href="http://performanceguys.blogspot.com/2007/11/3000-consultants-trained-on.html" target="_blank"&gt;3000 consultants trained in PPS&lt;/a&gt; by the end of 2007!! Amazing ;)&lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7307" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/timkent/archive/tags/MCP/default.aspx">MCP</category></item></channel></rss>