<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.adatis.co.uk/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jeremy Kashel&amp;#39;s Blog : Reporting Services</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Reporting+Services/default.aspx</link><description>Tags: Reporting Services</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Analysis Services KPIs and Reporting Services 2008 R2</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/05/25/analysis-services-kpis-and-reporting-services-2008-r2.aspx</link><pubDate>Tue, 25 May 2010 19:40:53 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7662</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7662</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/05/25/analysis-services-kpis-and-reporting-services-2008-r2.aspx#comments</comments><description>&lt;p&gt;There was a comment on &lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2010/04/30/reporting-services-kpis-or-performancepoint-services-kpis.aspx" target="_blank"&gt;my last blog post&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/b/petereb/" target="_blank"&gt;Peter Eb&lt;/a&gt; asking about whether Reporting Services 2008 R2 knows how to render SSAS KPIs automatically. The short answer is that it doesn&amp;#39;t unfortunately, but there are only a few steps needed to get it working.&lt;/p&gt;  &lt;p&gt;For this blog post I&amp;#39;ve built a simple report that uses the Adventure Works DW 2008 R2 Analysis Services database as a data source. The first step is to build a data set that contains a query that references the Month attribute and the Channel Revenue KPI:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_4.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_1.png" width="576" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I&amp;#39;m interested in reporting on the status and trend part of the KPI, so I&amp;#39;ve added the month and value parts of the KPI, plus blank columns for the status and the trend:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_8.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_3.png" width="435" height="63" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;For the status and the trend columns, the next step is then to drag on (or right click and insert) an indicator in each of the cells. This is when the manual steps come in:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Right click on the indicator to open the properties window; &lt;/li&gt;    &lt;li&gt;Set the Value of the indicator to be the Status part of the Analysis Services KPI; &lt;/li&gt;    &lt;li&gt;Change the States Measurement Unit to Numeric; &lt;/li&gt;    &lt;li&gt;Configure the indicator Start and End properties to be -1, 0 and 1. &lt;a href="http://msdn.microsoft.com/en-us/library/ms174875.aspx" target="_blank"&gt;SSAS KPIs&lt;/a&gt; can have an unlimited number of status values, so it may be necessary to add more states here if SSAS returns more than 3 values for the Status. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This changes that are needed to the indicator properties window is shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_10.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb_4.png" width="390" height="359" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Applying the same method to the Trend part of the KPI produces the following simple report:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image25.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image25_thumb.png" width="454" height="220" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This post wasn&amp;#39;t really supposed to compare SSRS Vs PerformancePoint Services, but I&amp;#39;ve found out that PerformancePoint Services does pick up the SSAS KPI meta data (slight mismatch on the colours only), saving you having to set up the indicator yourself:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_6.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/AnalysisServicesKPIsandReportingServices_EDD5/image_thumb.png" width="388" height="86" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It&amp;#39;s a shame that the KPIs aren&amp;#39;t picked up automatically by SSRS, but then again the above process isn&amp;#39;t too difficult to master. &lt;/p&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7662" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PerformancePoint+Services/default.aspx">PerformancePoint Services</category></item><item><title>Tracking PerformancePoint Planning Submissions Using Reporting Services</title><link>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/09/26/tracking-performancepoint-planning-submissions-using-reporting-services.aspx</link><pubDate>Fri, 26 Sep 2008 16:29:29 GMT</pubDate><guid isPermaLink="false">8d7d37f8-4a66-4c95-9fba-293fa87607dc:7411</guid><dc:creator>Jeremy Kashel</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.adatis.co.uk/blogs/jeremykashel/rsscomments.aspx?PostID=7411</wfw:commentRss><comments>http://blogs.adatis.co.uk/blogs/jeremykashel/archive/2008/09/26/tracking-performancepoint-planning-submissions-using-reporting-services.aspx#comments</comments><description>&lt;p&gt;The standard &lt;a href="http://technet.microsoft.com/en-us/library/bb838765.aspx" target="_blank"&gt;operational reports&lt;/a&gt; that come with PerformancePoint will allow you to report on a variety of PerformancePoint admin related activities, such as cycles, assignments, forms, jobs and associations.&lt;/p&gt;  &lt;p&gt;I find that the assignments report is particularly useful - after all, finding out who has/hasn&amp;#39;t submitted is an important part of any data-gathering exercise. Whilst it is useful, I do find that the assignments report is the one that admin users want changed, especially when a model site exists containing many cycles and assignments.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Extra Functionality&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With a large PPS Planning implementation you can easily end up with many assignment instances, cycles and users. I&amp;#39;ve been involved in such an implementation recently, and, due to the large number of assignments, the admin user requested a bit more filtering capability than the out of the box assignments report provides.&lt;/p&gt;  &lt;p&gt;Also, the existing assignments report tells will tell you that user A has submitted their assignment, but it won&amp;#39;t go into any detail about what the submission actually contained. E.g. did the user submit all their entities? For some users it is quite key to know what other users have been submitting - for one thing it makes navigation easier if as an approver you know exactly which department/entity to pick in the assignment filters.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By knowing which tables to use, you can write an SSRS report that provides the additional functionality mentioned above.&lt;/p&gt;  &lt;p&gt;The starting point is to get the base report query right. In my case, as I&amp;#39;m in a separate auditing database, the query goes inside a custom stored procedure, and is as follows:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT              &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentId&lt;span style="color:gray;"&gt;,    &lt;/span&gt;C&lt;span style="color:gray;"&gt;.&lt;/span&gt;CycleInstanceName&lt;span style="color:gray;"&gt;, &lt;/span&gt;AD&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentDefName&lt;span style="color:gray;"&gt;, &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentName&lt;span style="color:gray;"&gt;,
                    &lt;/span&gt;U&lt;span style="color:gray;"&gt;.&lt;/span&gt;UserId&lt;span style="color:gray;"&gt;, &lt;/span&gt;U&lt;span style="color:gray;"&gt;.&lt;/span&gt;UserName&lt;span style="color:gray;"&gt;, &lt;/span&gt;ENT&lt;span style="color:gray;"&gt;.&lt;/span&gt;Name &lt;span style="color:blue;"&gt;AS &lt;/span&gt;EntityName&lt;span style="color:gray;"&gt;, &lt;/span&gt;CUST&lt;span style="color:gray;"&gt;.&lt;/span&gt;Name &lt;span style="color:blue;"&gt;As &lt;/span&gt;CustomerName&lt;span style="color:gray;"&gt;,
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE
                        WHEN &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;partial&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Approved&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Submitted&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;1
                        &lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;0
                    &lt;span style="color:blue;"&gt;END AS &lt;/span&gt;Draft_Submitted&lt;span style="color:gray;"&gt;,
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE 
                        WHEN &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Approved&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;OR &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Submitted&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;1
                        &lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;0
                    &lt;span style="color:blue;"&gt;END As &lt;/span&gt;Final_Submitted&lt;span style="color:gray;"&gt;,
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE
                        WHEN &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;Status &lt;span style="color:gray;"&gt;=  &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Approved&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;1
                        &lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;0
                    &lt;span style="color:blue;"&gt;END AS &lt;/span&gt;Approved&lt;span style="color:gray;"&gt;, &lt;/span&gt;Approve&lt;span style="color:gray;"&gt;.&lt;/span&gt;UserName &lt;span style="color:blue;"&gt;As &lt;/span&gt;Approver
&lt;span style="color:blue;"&gt;FROM                &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;Assignments A 
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;[MG_Planning_MeasureGroup_default_partition] Fact
                    &lt;span style="color:blue;"&gt;ON &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentID &lt;span style="color:gray;"&gt;= &lt;/span&gt;Fact&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentID
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentDefinitions AD &lt;span style="color:blue;"&gt;ON &lt;/span&gt;AD&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentDefID &lt;span style="color:gray;"&gt;= &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentDefID
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;CycleInstances C &lt;span style="color:blue;"&gt;ON &lt;/span&gt;C&lt;span style="color:gray;"&gt;.&lt;/span&gt;CycleInstanceID &lt;span style="color:gray;"&gt;= &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;CycleInstanceID
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;D_Entity ENT &lt;span style="color:blue;"&gt;ON &lt;/span&gt;ENT&lt;span style="color:gray;"&gt;.&lt;/span&gt;MemberId &lt;span style="color:gray;"&gt;= &lt;/span&gt;Fact&lt;span style="color:gray;"&gt;.&lt;/span&gt;Entity_MemberId
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;D_Customer CUST &lt;span style="color:blue;"&gt;ON &lt;/span&gt;CUST&lt;span style="color:gray;"&gt;.&lt;/span&gt;MemberId &lt;span style="color:gray;"&gt;= &lt;/span&gt;Fact&lt;span style="color:gray;"&gt;.&lt;/span&gt;[Customer_MemberId]
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;BizUsers U &lt;span style="color:blue;"&gt;ON &lt;/span&gt;U&lt;span style="color:gray;"&gt;.&lt;/span&gt;UserID &lt;span style="color:gray;"&gt;= &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;ContributorUserId
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;ApproverList AL &lt;span style="color:blue;"&gt;ON &lt;/span&gt;AL&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentID &lt;span style="color:gray;"&gt;= &lt;/span&gt;A&lt;span style="color:gray;"&gt;.&lt;/span&gt;AssignmentId
&lt;span style="color:gray;"&gt;LEFT OUTER JOIN     &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;BizUsers Approve &lt;span style="color:blue;"&gt;ON &lt;/span&gt;Approve&lt;span style="color:gray;"&gt;.&lt;/span&gt;UserID &lt;span style="color:gray;"&gt;= &lt;/span&gt;AL&lt;span style="color:gray;"&gt;.&lt;/span&gt;ApproverUserID&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;You can figure out most of the tables to use by looking at a view called AssignmentsView within the application database.&lt;/p&gt;

&lt;p align="left"&gt;One thing that I have taken into account is assignment definitions. If you have large number of users completing an assignment, then the chances are that you will have set up an assignment definition that points at a business role or a submission hierarchy. You ideally want to be able to filter on the assignment definition to return all assignment instances that belong to that assignment definition. Therefore, in my case I have three filters for the report, but you could easily add more:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/TrackingPerformancePointPlanningSubmissi_108A4/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="62" alt="image" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/TrackingPerformancePointPlanningSubmissi_108A4/image_thumb_1.png" width="683" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="left"&gt;The final view is a report that shows the status of the assignments returned by the filter, but also, when expanded, shows the the entities and customers that the contributor has submitted:&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/TrackingPerformancePointPlanningSubmissi_108A4/image_9.png" target="_blank"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="349" alt="SSRS Report" src="http://blogs.adatis.co.uk/blogs/jeremykashel/WindowsLiveWriter/TrackingPerformancePointPlanningSubmissi_108A4/image_thumb_3.png" width="719" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p align="left"&gt;The above is just a taster of what can be achieved. A couple of ways that it can be extended include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Integrating with &lt;a href="http://blogs.adatis.co.uk/blogs/sachatomey/archive/2008/06/30/performancepoint-planning-data-change-tracking-audit-trail.aspx"&gt;Sacha&amp;#39;s data auditing idea&lt;/a&gt; to provide detailed history on what values the contributor has changed; &lt;/li&gt;

  &lt;li&gt;Including comments, annotations and deadlines. &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6faa9f21-3a0a-492d-8182-5bee5fab2b0f" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PerformancePoint" rel="tag"&gt;PerformancePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Planning" rel="tag"&gt;Planning&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PPS" rel="tag"&gt;PPS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SSRS" rel="tag"&gt;SSRS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Reporting%20Services" rel="tag"&gt;Reporting Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL%20Server%202005" rel="tag"&gt;SQL Server 2005&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.adatis.co.uk/aggbug.aspx?PostID=7411" width="1" height="1"&gt;</description><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/PerformancePoint/default.aspx">PerformancePoint</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.adatis.co.uk/blogs/jeremykashel/archive/tags/Reporting+Services/default.aspx">Reporting Services</category></item></channel></rss>