<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://prologika.com/CS/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/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>Prologika Forums</title><link>http://prologika.com/CS/blogs/</link><description>Business Intelligence to the Masses</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Where is RDLOM in R2?</title><link>http://prologika.com/CS/blogs/blog/archive/2010/03/08/where-is-rdlom-in-r2.aspx</link><pubDate>Tue, 09 Mar 2010 02:17:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4283</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;After covering the cool new stuff in R2, it&amp;#39;s time to talk about the uncool. One R2 change that really vexes me is RDLOM. RDLOM, short for Report Definition Language Object Model, lets developers program RDL in object-oriented way as opposed to using XML. RDLOM could save you a lot of effort when you have to meet more advanced requirements that involve pre-processing RDL. For example, in one of my projects we had to implement a wizard that would walk business users through steps to generate an ad-hoc report. Behind the scenes, the wizard would generate the report definition by using a custom RDLOM which we developed since back then Microsoft didn&amp;#39;t have their own. I included a scaled-down version of our implementation in my &lt;a href="http://prologika.com/CS/media/p/2333.aspx"&gt;TechEd 2007 code sample&lt;/a&gt;. Although it took us a while to get our RDLOM implemented, it turned out to be invaluable down the road. Since we didn&amp;#39;t have to use XML API to manipulate RDL, it simplified programming RDL. For another project, we used RDLOM to let the customer specify which sections they want to see on the report. Once the selection was made, we would remove the unwanted sections from a report template. The list of real-life scenarios that could take advantage of RDLOM goes on &amp;hellip; &lt;/p&gt;
&lt;p&gt;Apparently, I wasn&amp;#39;t the only one bugging Microsoft about RDLOM that ships with SSRS and they promised that this will happen at TechED 2007 USA. Sure enough, SSRS 2008 brought us an unsupported version which I &lt;a href="http://prologika.com/CS/blogs/blog/archive/2007/08/14/rdl-object-model-on-the-horizon.aspx"&gt;blogged&lt;/a&gt; about and covered more extensively in my Applied SSRS 2008 book. Although unsupported, the SSRS 2008 RDLOM was very useful. It was implemented in a single assembly (Microsoft.ReportingServices.RdlObjectModel.dll), exposed all RDL elements as objects, and supported serializing and deserializing RDL. &lt;/p&gt;
&lt;p&gt;Alas, this will come to pass with R2. Upgrading to R2, you&amp;#39;ll find that the classes in Microsoft.ReportingServices.RdlObjectModel are marked as internal so you cannot use this assembly. Instead, RDLOM got moved into the Microsoft.ReportingServices.Designer.Controls.dll assembly. The good news is that there are rumors that RDLOM may get documented. Now the bad news: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Clearly, R2 RDLOM was not meant to be distributed. While you need to reference explicitly only Microsoft.ReportingServices.Designer.Controls and Microsoft.ReportingServices.RichText assemblies you&amp;#39;ll find that they are dependent on other assemblies and you need to distribute a total of 25 assemblies resulting in a whopping 25 MB of referenced code. One way to avoid shipping so many assemblies to deploy your application in the BIDS or Report Builder 3.0 folders. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/030910_0215_WhereisRDLO1.png" alt="" /&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;R2 RDLOM will be 32-bit only because BIDS and Report Builder are 32-bit only. &lt;/li&gt;
&lt;li&gt;R2 RDLOM doesn&amp;#39;t support serializing the object model. I found a hack that uses .NET reflection to invoke the internal Serialize method of the old RDLOM 2008. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The RDLOM R2 C# console application bundled in this &lt;a href="http://prologika.com/CS/media/p/4281.aspx"&gt;code sample&lt;/a&gt; demonstrates how you can use the &amp;quot;new&amp;quot; RDLOM. Besides referencing the new assemblies, you need to use the Load method to deserialize RDL to the object model: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;report = &lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;.Load(fs); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And the above-mentioned hack to serialize it back to disk or stream. &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt; os = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FileStream&lt;/span&gt;(ReportPath, &lt;span style="color:#2b91af;"&gt;FileMode&lt;/span&gt;.Create)) &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt; assembly = &lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt;.GetAssembly(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;)); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; mc = assembly.CreateInstance(&lt;span style="color:#a31515;"&gt;&amp;quot;Microsoft.ReportingServices.RdlObjectModel.Serialization.RdlSerializer&amp;quot;&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt; t = mc.GetType(); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;MethodInfo&lt;/span&gt; mi = t.GetMethod(&lt;span style="color:#a31515;"&gt;&amp;quot;Serialize&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Type&lt;/span&gt;[] { &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Stream&lt;/span&gt;), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;) }); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;report = (&lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;)mi.Invoke(mc, &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;[] { os, report }); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Other than that, RDLOM remains virtually unchanged from 2008 excluding that it now supports the R2 enhancements to RDL. What if you don&amp;#39;t need this overhead but you need to make small changes to RDL that don&amp;#39;t necessarily require an object-oriented layer. I&amp;#39;ve found that the easiest way to do this and avoid XML programming is to use LINQ to XML. The LINQ to XML project included in the same sample demonstrates this approach. For example, the following code changes the data source reference of the first data source. &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args) &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt; report = &lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt;.Load(&lt;span style="color:#a31515;"&gt;&amp;quot;report.rdl&amp;quot;&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; dns = &lt;span style="color:#a31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt; + report.GetDefaultNamespace() + &lt;span style="color:#a31515;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;XElement&lt;/span&gt; ds = report.Element(dns + &lt;span style="color:#a31515;"&gt;&amp;quot;DataSources&amp;quot;&lt;/span&gt;).Element(dns + &lt;span style="color:#a31515;"&gt;&amp;quot;DataSource&amp;quot;&lt;/span&gt;).Element(dns + &lt;span style="color:#a31515;"&gt;&amp;quot;DataSourceReference&amp;quot;&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;ds.Value = &lt;span style="color:#a31515;"&gt;&amp;quot;/Data Sources/AdventureWorksAS2008&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;report.Save(&lt;span style="color:#a31515;"&gt;&amp;quot;report1.rdl&amp;quot;&lt;/span&gt;);&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Not happy about the RDLOM story? Join the movement and vote for &lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/540183/supported-rdl-object-model-rdlom"&gt;my suggestion&lt;/a&gt; on connect.microsoft.com to have a supported RDLOM. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4283" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>How Windows UAC Got Me Again</title><link>http://prologika.com/CS/blogs/blog/archive/2010/03/02/how-windows-uac-got-me-again.aspx</link><pubDate>Tue, 02 Mar 2010 21:17:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4252</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;User Access Control (UAC) is a feature of Windows Vista, Windows 7, and Windows Server 2008 that prevents you from running applications with administrator rights even if you are a local admin on the box. Although I have to admit I hate UAC, I am convinced that it&amp;#39;s better to have it around especially after my home desktop got infected a few months ago with a rootkit virus so badly that I had to restore the disk from a backup. So, UAC is a necessary evil. But since it&amp;#39;s relatively new, not many application developers test for UAC and this can get you as it happened in the following story. &lt;/p&gt;
&lt;p&gt;A coworker complained that Reporting Services SharePoint integration doesn&amp;#39;t work on a distributed environment where SharePoint is installed on the front end Windows 2008 server and the SharePoint configuration database is installed on a separate database server. As usual, my first stop for troubleshooting SharePoint integration with Reporting Services was to examine the log file which gets generated after installing the Reporting Services Add-in for SharePoint, as I &lt;a href="http://prologika.com/CS/blogs/blog/archive/2008/11/19/troubleshooting-the-sharepoint-add-in-for-reporting-services.aspx"&gt;explained&lt;/a&gt; in this blog. On Windows Server 2008, the log file is located in the Temp folder of the user running the add-in setup, such as C:\Users\&amp;lt;user&amp;gt;\AppData\Local\Temp. To make the quest even more interesting, the AppData folder is actually hidden by default on Windows Server 2008 and Windows Vista/7 (another security gotcha), so you have to use Folder and Search Options to enable hidden files so you can see it. Are you having fun yet? &lt;/p&gt;
&lt;p&gt;In this case, the log file showed an error: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;User: SYSTEM &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;Installing Report Server feature. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;Calling copyappbincontents command. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;copyappbincontents command completed successfully. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;Adding Report Server feature to farm. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;Install error: The EXECUTE permission was denied on the object &amp;#39;proc_putObject&amp;#39;, database &amp;#39;IWSharePointCluster_Config&amp;#39;, schema &amp;#39;dbo&amp;#39;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So, SharePoint can&amp;#39;t connect to the database server. What&amp;#39;s interesting is that the log file reported that the user is SYSTEM and not the logon of the interactive user. Luckily, Prash Shirolkar from the SSRS team &lt;a href="http://blogs.msdn.com/prash/archive/2009/09/01/error-installing-rssharepoint-msi-on-windows-2008.aspx"&gt;blogged&lt;/a&gt; about this and provided a workaround for this issue which will get fixed in R2 RTM. Gotta love UAC&amp;hellip;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4252" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>New Reporting Services Data Providers</title><link>http://prologika.com/CS/blogs/blog/archive/2010/02/28/new-reporting-services-data-providers.aspx</link><pubDate>Sun, 28 Feb 2010 15:39:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4244</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Two new data providers will be included in the SQL Server 2008 R2 release of Reporting Services, &lt;strong&gt;Microsoft SQL Azure&lt;/strong&gt; and &lt;strong&gt;Microsoft SQL Server Parallel Data Warehouse&lt;/strong&gt;, that will let you report from &lt;a href="http://www.microsoft.com/windowsazure/sqlazure/"&gt;SQL Azure&lt;/a&gt; and &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/parallel-data-warehouse.aspx"&gt;SQL Server 2008 R2 Parallel Data Warehouse&lt;/a&gt; (code named Madison) databases respectively. I decided to take the Microsoft SQL Azure data provider for a spin. As you probably know by now, SQL Azure is a part of the Microsoft Windows Azure SaaS cloud offering. SQL Azure lets you host your SQL Server relational databases in the Microsoft data centers that provide scalability and fault tolerance services. This is great for companies of all sizes which don&amp;#39;t have resources or expertise to purchase and configure expensive hardware and software in order bo build scalable and highly available solutions. IMO, SQL Azure will be increasingly important, especially after Reporting Services and Analysis Services become available on SQL Azure although Microsoft doesn&amp;#39;t say yet when this will happen. At this point, you can only use Reporting Services as a client to author reports from SQL Azure-hosted databases. &lt;/p&gt;
&lt;p&gt;Strictly, speaking if your database is hosted in SQL Azure, you can use the SQL Server or OLE DB providers (already included in Reporting Services) to send queries to SQL Azure. Just like on-premise solutions,&amp;nbsp;SQL Server Azure clients retrieve data using the native SQL Server Tabular Data Stream (TDS).&amp;nbsp;However, if you decide to use the native&amp;nbsp;SQL Server providers, you will run into&amp;nbsp;some issues with retrieving SQL Azure metadata. Hence, Microsoft added the SQL Azure data provider. To test it out, I followed these steps: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I signed up for SQL Azure. If you MSDN Universal subscriber, you can &lt;a href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx"&gt;sign up&lt;/a&gt; to test SQL Azure for eight months for free. &lt;/li&gt;
&lt;li&gt;I deployed the AdventureWorksDW2008R2 and AdventureWorksLT2008R2 databases to my SQL Azure server. The Adventure Works database deployment scripts for SQL Azure &lt;a href="http://msftdbprodsamples.codeplex.com/releases/view/37304"&gt;are available&lt;/a&gt; on codeplex. They will create &lt;em&gt;AdventureWorksDWAZ2008R2 &lt;/em&gt;and&lt;em&gt; AdventureWorksLTAZ2008R2 &lt;/em&gt;database on your SQL Azure server. &lt;/li&gt;
&lt;li&gt;Installed SQL Server 2008 R2 Release Candidate which is &lt;strong&gt;not&lt;/strong&gt; publicly available. &lt;/li&gt;
&lt;li&gt;Created a new report in BIDS. As usual, I added a data source and selected the Microsoft SQL Azure provider.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.prologika.com/blog/022810_1539_NewReportin1.png" alt="" /&gt; &lt;/li&gt;
&lt;li&gt;In the Connection Properties dialog box, I entered the name of my SQL Azure server and my standard security credentials (Windows security is not supported on SQL Azure). For some reason, the database dropdown is not automatically populated so I had to enter the name of the database &lt;em&gt;AdventureWorksDWAZ2008R2&lt;/em&gt; manually. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Once connectivity has been taken care of, life is as usual. The Graphical Query Designer (toggle the Edit as Text button if the generic query designer starts first) shows the database schema.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.prologika.com/blog/022810_1539_NewReportin2.png" alt="" /&gt; &lt;/div&gt;
&lt;p&gt;One thing that surprised me was the performance of data retrieval. Even when I opted to get all data from FactInternetSales, which has thousands of rows, the query executed pretty fast.&amp;nbsp; One caveat though with this approach is that you have open port 1433 on your corporate network because this is the port SQL Server uses for client connections. This is not required if your application is installed on Windows Azure and connects to the SQL Azure database on the server.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4244" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Beware Hidden Calculated Members</title><link>http://prologika.com/CS/blogs/blog/archive/2010/01/18/beware-hidden-calculated-members.aspx</link><pubDate>Mon, 18 Jan 2010 23:06:07 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4170</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here is another one of those &amp;quot;by design&amp;quot; issues (see the Not All Calculated Members Are Born Equal &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/13/not-all-calculated-members-are-born-equal.aspx"&gt;blog&lt;/a&gt; for another recent gotcha) that are not documented but can sure waste you precious time figuring out. The issue was first &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=434253"&gt;submitted&lt;/a&gt; on connect.microsoft.com by Greg Galloway almost a year ago where it was left in an investigation phase (what can we do to get the SSAS team actually review the connect cases and post findings?). Then, I &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=508308"&gt;submitted&lt;/a&gt; a similar issue and official support case since I was 100% sure it was a bug and I needed a closure. Alas, Microsoft came back to declare it &amp;quot;by design&amp;quot;:
&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;quot;…per feedback from several AS 2005 Beta customers, for compatibility with pre-existing AS 2000 behavior, AS 2005 RTM (and later releases) was changed to not include hidden calculated members in cell calculations and scopes (except when a hidden calculated member is explicitly referenced in the calculation scope).&amp;quot;
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The issue affects hidden calculated members and scope assignments where a scope assignment simply ignores hidden calculated members if they are not explicitly referenced by the script. You can easily repro the issue by making the following changes to the Adventure Works script:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:green;"&gt;/*-- Allocate equally to quarters in H2 FY 2005 ------------------------*/&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;CREATE&lt;/span&gt;
			&lt;span style="color:blue;"&gt;MEMBER&lt;/span&gt;
			&lt;span style="color:blue;"&gt;CURRENTCUBE&lt;/span&gt;.[Measures].[Visible Quota] A&lt;span style="color:blue;"&gt;S&lt;/span&gt;
			&lt;span style="color:blue;"&gt;null&lt;/span&gt;, 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;FORMAT_STRING&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;, 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;VISIBLE&lt;/span&gt; = 1&lt;/strong&gt; ,  &lt;span style="color:blue;"&gt;ASSOCIATED_MEASURE_GROUP&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;#39;Sales Targets&amp;#39;&lt;/span&gt;  ;  
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;CREATE&lt;/span&gt;
			&lt;span style="color:blue;"&gt;MEMBER&lt;/span&gt;
			&lt;span style="color:blue;"&gt;CURRENTCUBE&lt;/span&gt;.[Measures].[Invisible Quota] &lt;span style="color:blue;"&gt;AS&lt;/span&gt;
			&lt;span style="color:blue;"&gt;null&lt;/span&gt;, 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;FORMAT_STRING&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;Currency&amp;quot;&lt;/span&gt;, 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;strong&gt;&lt;span style="color:blue;"&gt;VISIBLE&lt;/span&gt; = 0 &lt;/strong&gt;,  &lt;span style="color:blue;"&gt;ASSOCIATED_MEASURE_GROUP&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;#39;Sales Targets&amp;#39;&lt;/span&gt;  ;  
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;Scope&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt; ( 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;    [Date].[Fiscal Year].&amp;amp;[2005],
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;    [Date].[Fiscal].[Fiscal Quarter].&lt;span style="color:blue;"&gt;Members
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;);    
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;
			&lt;span style="color:blue;"&gt;this&lt;/span&gt; = (&lt;span style="color:maroon;"&gt;ParallelPeriod&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;          ( 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;             [Date].[Fiscal].[Fiscal Year], 1,
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;             [Date].[Fiscal].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;          ), [Measures].[Sales Amount Quota]) * 1.35;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;Here, I created two identical calculated members with the only difference that the first one is visible and second one hidden. Then, execute the following query:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; {[Measures].[Sales Amount Quota], [Measures].[Visible Quota], [Measures].[Invisible Quota]} &lt;span style="color:blue;"&gt;on&lt;/span&gt; 0
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;FROM&lt;/span&gt; [Adventure Works] 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;WHERE&lt;/span&gt; [Date].[Fiscal].[Fiscal Quarter].&amp;amp;[2005]&amp;amp;[1]
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;And here are the results (surprise!):
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/011810_2304_BewareHidde1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;The Visible Quota member is populated as it should be but Invisible Quota refuses to budge as the script simply ignores it. If the script scopes on the Invisible Quota member explicitly or you make it visible, then we get the expected results. Since the issue is by design and a fix won&amp;#39;t be available anytime soon, you should be very careful when you use hidden calculated members and expect them to be affected by scope assignments. I use often helper calculated members which I hide since they shouldn&amp;#39;t be visible to the end users. This issue hit me really hard after QA reported wrong results and your humble correspondent had to debug a cube with some 1000+ lines of code. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4170" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Report Builder 3.0 Edit Sessions</title><link>http://prologika.com/CS/blogs/blog/archive/2010/01/18/report-builder-3-0-edit-sessions.aspx</link><pubDate>Mon, 18 Jan 2010 14:25:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4169</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When Report Builder 2.0 shipped , it introduced local and server preview modes. If the report uses local references only, such an embedded data source(s), Report Builder 2.0 executes the query and renders the report locally just like the BIDS Report Designer. However, when the report uses a server reference, such as shared data source(s) or subreports that were saved on the server, Report Builder 2.0 would transparently upload and process the report on the server just like the Report Builder 1.0. &lt;/p&gt;
&lt;p&gt;Report Builder 3.0 improves the performance of server preview mode by introducing &lt;strong&gt;edit sessions&lt;/strong&gt;. An edit session is implicitly created when the user runs the report for the first time. Behind the scenes, Report Builder 3.0 calls the new CreateReportEditSession API to instruct the server to create an edit session. The server caches the report dataset(s) in the ReportServerTempDB database (not in memory) and uses the cached data for subsequent previews. In this respect, you can think of edit sessions as the *.data files that the BIDS Report Designer generates to cache the report data in order to speed up&amp;nbsp;report preview. As long as you don&amp;#39;t make changes to the report that affect the data, such as changes to the dataset itself, data source, or parameters, the cached copy of the data is used by the report. This means that the user may not see changes that might have taken place in the database for the duration of the edit session. To make sure that the latest data is used, click the Refresh button on the Report Builder 3.0 toolbar. Refreshing the report discards the edit session and executes the database queries. &lt;/p&gt;
&lt;p&gt;The administrator can configure two new server properties to manage edit sessions: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EditSessonCacheLimit - By default, the data cache can hold up to five datasets per report and user. Note that if the dataset is parameterized, each parameter combination counts as one dataset. If you use many different combinations of parameter values, the report might need more cached dataset copies. The administrator can allow this by increasing the EditSessonCacheLimit setting. &lt;/li&gt;
&lt;li&gt;EditSessionTimeout - By default, an edit session lasts 7200 seconds (2 hours). The servers resets the session every two hours when the user previews the report. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/011810_1424_ReportBuild1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Report Builder 3.0 edit sessions are a performance-related enhancement that makes server-side report preview more efficient.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4169" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Report Builder 3.0 Enhancements in R2 and SharePoint 2010 Mode</title><link>http://prologika.com/CS/blogs/blog/archive/2010/01/12/report-builder-enhancements-in-sharepoint-mode.aspx</link><pubDate>Wed, 13 Jan 2010 03:06:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4146</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;A couple of Report Builder enhancements in SharePoint 2010&amp;nbsp;integration mode caught my attention. First, Report Builder 3.0 now launches by default when the Open in Report Builder action is initiated inside SharePoint 2010. Previously, Report Builder 1.0 would be launched. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/011310_0305_ReportBuild1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Second, if the report includes a drillthrough action to another report, the action now works when the action is initiated from Report Builder 3.0 preview mode. As it turns out, a drillthrough action is forwarded directly to SharePoint. Previously, a report drillthrough action will result in an error because the Report Builder would attempt to resolve the action locally. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4146" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>ReportService2010 Endpoint</title><link>http://prologika.com/CS/blogs/blog/archive/2010/01/12/reportservice2010-endpoint.aspx</link><pubDate>Wed, 13 Jan 2010 02:29:57 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4145</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here is a little gem for developers programming Reporting Services. SQL Server 2008 R2 brings a new web service endpoint, &lt;strong&gt;ReportService2010&lt;/strong&gt;, which merges the functionalities of the ReportService2005 and ReportService2006 endpoints. The new endpoint can manage objects on a report server that that are configured for either native or SharePoint integrated mode. Previously, the ReportService2005 endpoint was used for managing objects on a report server that is configured for native mode and the ReportService2006 endpoint was used for managing objects on a report server that is configured for SharePoint integrated mode. This required code changes and retesting if the report server was re-configured in a different mode.  These endpoints are now deprecated but still supported. The ReportService2010 endpoint includes the functionalities of both endpoints. When unsupported APIs in ReportService2010 are invoked, such as invoking the CreateLinkedReport API in SharePoint mode which doesn&amp;#39;t support linked reports, the endpoint will return an error that the operation is not supported.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4145" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Virtual Adventures</title><link>http://prologika.com/CS/blogs/blog/archive/2010/01/07/virtual-adventures.aspx</link><pubDate>Thu, 07 Jan 2010 23:48:58 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4127</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: Mount base and differencing VHD disks using Windows Virtual PC on Windows 7 x64.
&lt;/p&gt;&lt;p&gt;Dude, did you run out of BI stuff to talk about? I didn&amp;#39;t but I think other folks may benefit from my experience especially MCTs who have discovered that Windows 7 hasn&amp;#39;t happened yet to the Microsoft Official Curriculum and resorted to all sorts of hacks to get Virtual Server 2005 or Lab Launcher working with Windows 7. In the process, I&amp;#39;ve learned a lot about the virtualization technology that goes beyond just mounting disks. OK, I have a hidden agenda to write this blog as well – I want to document these steps.
&lt;/p&gt;&lt;p&gt;So, I am preparing to teach 6326A - Implementing and Maintaining Microsoft SQL Server 2008 Reporting Services in an instructor-led environment where I have to install the required software on the student&amp;#39;s machine. After downloading the trainer resources, I have discovered that Microsoft provides 6236A-NY-SQL-01.vhd disk which requires a base disk Base08A.vhd. Reading the setup guide included in the course revealed that Microsoft wants me to install Virtual Server 2005 on both the instructor and students machines.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Gotcha 1&lt;/strong&gt;: Virtual Server 2005 doesn&amp;#39;t run on Windows 7. Browsing the MCT private groups I came across posts discussing a hack around this limitation but I didn&amp;#39;t want go that way. Not to mention that Microsoft Lab Launcher, which apparently is intended to simplify the VHD deployment to student machines, doesn&amp;#39;t run on Win 7 as well. A double-gotcha which picked up my interest and stirred my hacking instincts to get the whole thing working with Virtual PC. After all, I can&amp;#39;t control what OS the students run or the training center has installed.
&lt;/p&gt;&lt;p&gt;OK, but this is just VHD disk, isn&amp;#39;t it? So, it should run on Windows Virtual PC, right? So, I created a new virtual machine and attempted to mount 6236A-NY-SQL-01.vhd but I was greeted with the following informative error:
&lt;/p&gt;&lt;p&gt;&lt;span style="color:#c00000;"&gt;&lt;span style="font-family:Verdana;font-size:8pt;"&gt;Cannot attach the virtual hard disk to the virtual machine. Check the values provided and try again.&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Then I mounted Base08A.vhd and I was able to boot the VM only to find out that it includes the Windows Server 2008 OS only. Where is the cool SQL Server BI stuff? This is the part where I realized that my virtual knowledge needs brushing up. Enter &lt;a href="http://technet.microsoft.com/en-us/library/cc720381(WS.10).aspx"&gt;differencing disks&lt;/a&gt;.  This of course is not explained in the setup document, so don&amp;#39;t try to find it there. I figured that Base08A.vhd is the base disk that has the OS only while the 6236A-NY-SQL-01.vhd is the differencing disk that has the rest (SQL Server 2008 + Reporting Services samples and Adventure Works database) installed. To prove my hypothesis, I used the Sun&amp;#39;s &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;. I use VirtualBox for my personal VM work because it supports x64 guess OS, which Virtual PC doesn&amp;#39;t support (shame). I used the Disk Manager to add both the base and difference images and … lo and behold, the VM booted up and I was able to verify that SQL Server 2008 and rest of the goodies are installed. 
&lt;/p&gt;&lt;p&gt;But I didn&amp;#39;t want to force the students to install VirtualBox so I continued hacking my way to Windows Virtual PC. In a Eureka moment, I examined the Windows Event log and saw the following message:
&lt;/p&gt;&lt;p&gt;&lt;span style="color:#c00000;font-family:Verdana;font-size:8pt;"&gt;The parent virtual hard disk &amp;#39;C:\Program Files\Microsoft Learning\Base\Base08A.vhd&amp;#39; for the differencing virtual hard disk &amp;#39;C:\VPC\3263\6236A-NY-SQL-01.vhd&amp;#39; does not exist. Please reconnect the differencing virtual hard disk to the correct parent virtual hard disk.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So, the base disk path is hardcoded in the differencing image. The following commands confirmed this.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Went to command prompt and entered (the actual commands are in bold):
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;C:\&amp;gt;Diskpart
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DISKPART&amp;gt; select vdisk file=&amp;quot;c:\vpc\6236\6236A-NY-SQL-01.vhd&amp;quot;
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;DiskPart successfully selected the virtual disk file.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DISKPART&amp;gt; detail vdisk
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Device type ID: 2 (VHD)
&lt;/p&gt;&lt;p&gt;Vendor ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
&lt;/p&gt;&lt;p&gt;State: Added
&lt;/p&gt;&lt;p&gt;Virtual size:   64 GB
&lt;/p&gt;&lt;p&gt;Physical size:    9 GB
&lt;/p&gt;&lt;p&gt;Filename: c:\vpc\6236\6236A-NY-SQL-01.vhd
&lt;/p&gt;&lt;p&gt;Is Child: Yes
&lt;/p&gt;&lt;p&gt;&lt;em&gt;Parent Filename: C:\Program Files\Microsoft Learning\Base\Base08A.vhd
&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Associated disk#: Not found.
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;I moved the based image (Base08A.vhd) to C:\Program Files\Microsoft Learning\Base. With a baited breath, I repeated the process of creating a new virtual machine in Windows Virtual PC pointing to the existing 6236A-NY-SQL-01.vhd but I got the first error:
&lt;/div&gt;&lt;p&gt;&lt;span style="color:#c00000;"&gt;&lt;span style="font-family:Verdana;font-size:8pt;"&gt;Cannot attach the virtual hard disk to the virtual machine. Check the values provided and try again.&lt;/span&gt;
				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;No more details in the Windows event log. At this point, I posted a &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itprovirt/thread/0bea3399-7f2f-4f86-8d14-9801959a6c69/"&gt;question&lt;/a&gt; to the Windows 7 Virtualization discussion forum and I was clued in the disk virtual size (not physical size) could be the issue since Virtual PC doesn&amp;#39;t support disks larger than 127 GB. Although after attaching the 6236A-NY-SQL-01.vhd using the Windows 7 Disk Manager I could see that the virtual size is 64 GB, I compacted the base disk using these &lt;a href="http://blog.wisefaq.com/2009/12/31/how-to-fix-the-cannot-attach-the-virtual-hard-disk/"&gt;steps&lt;/a&gt;. That didn&amp;#39;t help and the hour was getting late. So I threw the white towel on the differencing disk approach (for now) and decided to merge the differencing disk into the base disk.
&lt;/p&gt;&lt;p&gt;Assuming the commands in step 1), I executed the following commands:
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DISKPART&amp;gt;detach vdisk
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;DiskPart successfully detached the virtual disk file.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DISKPART&amp;gt;merge vdisk depth=1&lt;/strong&gt;
			&lt;/p&gt;&lt;p&gt;100 percent complete
&lt;/p&gt;&lt;p&gt;(after a long wait …)
&lt;/p&gt;&lt;p&gt;DiskPart successfully merged the differencing chain.
&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Now that I had the disks merged I was able to create a new virtual machine successfully using the base disk image (Base08A.vhd) which combined both the original and differencing disks. Since the differencing disk was merged, I could delete 6236A-NY-SQL-01.vhd.
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Gotcha 2&lt;/strong&gt;: After booting the virtual machine, I was able to log in using the pre-defined Student account. However, attempting to run the SQL Server Management Studio, I got an error that the SQL Server 2008 evaluation period has expired. I attempted to reset the Windows Server 2008 (guest OS) system date, but after a few seconds the date would revert to the present date. More binging the Internet solved the issue.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Shut down the VM.
&lt;/li&gt;&lt;li&gt;Open the vmc file in Notepad.
&lt;/li&gt;&lt;li&gt;Chang the last six digits to a year ago (070109)&lt;br /&gt;&amp;lt;time_bytes type=&amp;quot;bytes&amp;quot;&amp;gt;57002400060004&lt;strong&gt;070109&lt;/strong&gt;&amp;lt;/time_bytes&amp;gt;
&lt;/li&gt;&lt;li&gt;&lt;div&gt;Further down the file, disable guest-to-host OS time synchronization:&lt;br /&gt;&amp;lt;host_time_sync&amp;gt;
&lt;/div&gt;&lt;p&gt;&amp;lt;enabled type=&amp;quot;boolean&amp;quot;&amp;gt;&lt;strong&gt;false&lt;/strong&gt;&amp;lt;/enabled&amp;gt;
&lt;/p&gt;&lt;p&gt;    &amp;lt;frequency type=&amp;quot;integer&amp;quot;&amp;gt;15&amp;lt;/frequency&amp;gt;
&lt;/p&gt;&lt;p&gt;    &amp;lt;threshold type=&amp;quot;integer&amp;quot;&amp;gt;10&amp;lt;/threshold&amp;gt;
&lt;/p&gt;&lt;p&gt; &amp;lt;/host_time_sync&amp;gt;
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Boot VM. Now change the system date to 07-01-09. 
&lt;/div&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;Success!&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4127" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Training/default.aspx">Training</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Most Requested Features </title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/21/most-requested-features.aspx</link><pubDate>Mon, 21 Dec 2009 21:06:51 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4091</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;You can use the Microsoft Connect website to find most requested features. Unfortunately, the search doesn&amp;#39;t let you specify a product so the search results may be related to other products. For example, searching on &lt;em&gt;reporting services &lt;/em&gt;may bring in results from Analysis Services and &lt;em&gt;reporting&lt;/em&gt;. Nevertheless, it was quite interesting to find the top voted suggestions. For example, the following query shows the top suggestions for Reporting Services (flip to the Suggestions tab):
&lt;/p&gt;&lt;p&gt;&lt;a href="https://connect.microsoft.com/SQLServer/SearchResults.aspx?KeywordSearchIn=2&amp;amp;SearchQuery=%22reporting%22+AND+%22services%22&amp;amp;FeedbackType=1&amp;amp;Scope=0&amp;amp;SortOrder=10&amp;amp;TabView=0&amp;amp;wa=wsignin1.0"&gt;https://connect.microsoft.com/SQLServer/SearchResults.aspx?KeywordSearchIn=2&amp;amp;SearchQuery=%22reporting%22+AND+%22services%22&amp;amp;FeedbackType=1&amp;amp;Scope=0&amp;amp;SortOrder=10&amp;amp;TabView=0&amp;amp;wa=wsignin1.0&lt;/a&gt;
	&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Reporting Services-Recognize multiple result sets returned from a stored procedure – (50 votes)
&lt;/li&gt;&lt;li&gt;Merging / Linking datasets on report level (50 votes) – No 6 on my SSRS Top 10 &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/12/07/reporting-services-top-10-wish-list.aspx"&gt;wish list&lt;/a&gt;.
&lt;/li&gt;&lt;li&gt;SQL Reports should support stylesheets (43 votes) – No 9 on my list.
&lt;/li&gt;&lt;li&gt;Support for XML Paper Specification (XPS) Output Format (29 votes) – I am personally surprised about this one.
&lt;/li&gt;&lt;li&gt;Reporting Services Security Using Membership and Roles (29 votes), and so on
&lt;/li&gt;&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4091" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/General/default.aspx">General</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Running ReportViewer Under Trusted Account</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/15/running-reportviewer-under-trusted-account.aspx</link><pubDate>Wed, 16 Dec 2009 00:33:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4079</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: You have an Internet-facing web application that uses the Visual Studio ReportViewer control to render reports. The application takes care of authenticating the users. You want all report requests to the report server to go under a single (trusted) Windows account. There are at least two approaches to implement this scenario: &lt;/p&gt;
&lt;h2&gt;Basic Authentication &lt;/h2&gt;
&lt;p&gt;You can configure ReportViewer for basic authentication by implementing the &lt;span style="color:#2b91af;font-family:Courier New;font-size:10pt;"&gt;Microsoft.Reporting.WebForms&lt;/span&gt;.&lt;span style="color:#2b91af;font-family:Courier New;font-size:10pt;"&gt;IReportServerCredentials &lt;/span&gt;interface, as follows: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;[&lt;span style="color:#2b91af;"&gt;Serializable&lt;/span&gt;] &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MyReportServerCredentials&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;IReportServerCredentials &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; MyReportServerCredentials() &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;WindowsIdentity&lt;/span&gt; ImpersonationUser &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;get &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;span style="color:green;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ICredentials&lt;/span&gt; NetworkCredentials &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;get &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;NetworkCredential&lt;/span&gt;( &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;&amp;quot;reportUser&amp;quot;&lt;/span&gt;], &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color:#a31515;"&gt;&amp;quot;reportPassword&amp;quot;&lt;/span&gt;] &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:108pt;"&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;, &amp;quot;&amp;lt;your domain here&amp;gt;&amp;quot; &amp;ndash; comment out this line if a domain account is used as a trusted account &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-left:108pt;"&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;)&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; GetFormsCredentials(&lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Cookie&lt;/span&gt; authCookie, &lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; user, &lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; password, &lt;span style="color:blue;"&gt;out&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; authority) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;authCookie = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;user = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;password = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;authority = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Specifically, you need to implement the NetworkCredentials property of IReportServerCredentials. In my case, I read the trusted account credentials from web.config. Once IReportServerCredentials is implemented, you need to configure ReportViewer to use it. This takes one line of code: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;reportViewer.ServerReport.ReportServerCredentials = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;MyReportServerCredentials&lt;/span&gt;(); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The advantage of using IReportServerCredentals if flexibility. You can retrieve the account credentials from any place, such as security service, configuration file, database, etc. In addition, the impersonation is scoped for ReportViewer only. Other network calls made by the applications are unaffected. &lt;/p&gt;
&lt;h2&gt;Process Identity &lt;/h2&gt;
&lt;p&gt;The issue with IReportServerCredentals is the application must deal with the credentials of the trusted account, including the password. For added level of security, I try my best to avoid handling passwords and use Windows authentication whenever I can. Therefore, my preferred approach is to change the process identify of the web application. One way to do this is to change the identity of the IIS application pool the web application is running under, as follows: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If you don&amp;#39;t have a domain account to use as a trusted account, create a new domain account. &lt;/li&gt;
&lt;li&gt;On the web server, add the account to the &lt;strong&gt;IIS_WPG&lt;/strong&gt; local Windows group to give it the necessary rights to be used as an application pool account. &lt;/li&gt;
&lt;li&gt;In the IIS Manager, expand the server name, right-click the Application Pools folder, and click New Application Pool. &lt;/li&gt;
&lt;li&gt;Give the new pool a name. In the pool Properties page, click the Identity tab, select the Configurable option, and enter the credentials of the trusted account. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.prologika.com/blog/121609_0031_RunningRepo1.png" alt="" /&gt; &lt;/li&gt;
&lt;li&gt;Open the web application properties and change its application pool to the pool you just created.&lt;br /&gt;&lt;img src="http://www.prologika.com/blog/121609_0031_RunningRepo2.png" alt="" /&gt; &lt;/li&gt;
&lt;li&gt;If present, remove &amp;lt;identity impersonate=&amp;quot;true&amp;quot;/&amp;gt; element from the application web.config file so the network calls are made under the process identify instead of the anonymous user account, such as IUSR_&amp;lt;MACHINE_NAME&amp;gt;. &lt;/li&gt;
&lt;li&gt;At this point, if you run the web application, you may get a permission error because the domain account doesn&amp;#39;t have the necessary rights to specific folders, such as the web application folder and the temp folder. Using Windows Explorer, grant the domain account (or IIS_WPG group) rights to these folders. The error message should include the path of the folder you need to grant access to. &lt;/li&gt;
&lt;li&gt;Finally, use the Report Manager to grant the necessary rights to the trusted account, such as Browser, to the required folders.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.prologika.com/blog/121609_0031_RunningRepo3.png" alt="" /&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4079" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category></item><item><title>Infragistics Silverlight for Analysis Services</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/09/infragistics-silverlight-for-analysis-services.aspx</link><pubDate>Wed, 09 Dec 2009 22:11:39 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4055</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Don Demsak &lt;a href="http://labs.infragistics.com/silverlightdv/ctp/"&gt;pointed out&lt;/a&gt; another Silverlight-based control from Infragistics, which is currently in a CTP phase. There are actually two controls: XamWebDataChart and XamWebPivotGrid. I played a bit with it and it looks great. I liked the Excel-like paradigm with the metadata pane on the right and the PivotChart and PivotTable synchronized. As I&amp;#39;ve been saying – give me a Silverlight-based Excel Pivot and I am happy. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/120909_2209_Infragistic1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;See my &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/10/18/intelligencia-for-silverlight.aspx"&gt;previous blog&lt;/a&gt; about the Intelligencia for Silverlight which is another Siliverlight-based control for Analysis Services.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4055" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Analysis Services Top 10 Wish List</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/07/analysis-services-top-10-wish-list.aspx</link><pubDate>Mon, 07 Dec 2009 18:27:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4047</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Analysis Services leads the OLAP server market and it should be your platform of choice for historical and trend reporting. In the spirit of the season, here is my Top 10 Wish List for Analysis Services. All items are related to regular cubes and none to PowerPivot which I am yet to try. &lt;/p&gt;
&lt;ol style="margin-left:38pt;"&gt;
&lt;li&gt;Improved client support &amp;ndash; No 1 on my list has nothing to do with the server itself but with how well the Microsoft-provided clients support Analysis Services. To its credit, Microsoft continues improving the Excel OLAP support but still there are major functionality gaps from one tool to another. This is especially evident in the area of Reporting Services (see my No 1 SSRS &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/12/07/reporting-services-top-10-wish-list.aspx"&gt;wish list&lt;/a&gt; item). I am not sure if that&amp;#39;s possible from a technical standpoint but I wish the SSAS team re-factors the query generation logic into a MDX Query Generator binary of some kind which all tools can share to produce the same results consistently. &lt;/li&gt;
&lt;li&gt;Focus on UDM (aka Corporate BI) &amp;ndash; Although I see some useful scenarios for self-serviced OLAP with PowerPivot (previously known as Gemini), for various reasons I believe the focus should stay on UDM which now Microsoft refers to as Corporate BI. First, the business problems that I solve with UDM exceed by far Gemini&amp;#39;s capabilities. Second, if not a single source for reporting and a single version of the truth, I believe UDM should handle 80-90% of the reporting needs. Finally, based on my experience, data acquisition is the most difficult thing. This is why we have a dimensional model which IT would put together. But once data is cleaned and transformed, building UDM on top of it shouldn&amp;#39;t take that long &lt;/li&gt;
&lt;li&gt;Silverlight OLAP Viewer control - A Silverlight-based control that ships with Visual Studio to let developers embed an Excel-like Analysis Services browser into their ASP.NET applications. &lt;/li&gt;
&lt;li&gt;Improved performance &amp;ndash; Version 2008 has brought significant performance enhancement and SSAS performs great when aggregating regular measures. Usually, it is the calculations that will get you in trouble. So, anything that can be done to improve the server performance further will be welcome. For instance, the calculation engine executes the query on a single thread. It will be nice if a more complicated query can be parsed and executed in parallel. &lt;/li&gt;
&lt;li&gt;MDX Query Analyzer &amp;ndash; Related to performance, it will be great if we finally get a graphical query analyzer (a-la the T-SQL query analyzer) with hints about how to improve the query execution. &lt;/li&gt;
&lt;li&gt;Memory-bound partitions &amp;ndash; Again related to performance, it will be great if you could configure a partition to be memory-bound for super-fast access, as I mentioned in this &lt;a href="http://prologika.com/CS/blogs/blog/archive/2008/10/06/memory-dimensional-model-mdm-on-the-horizon.aspx"&gt;blog&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Detail reporting &amp;ndash; I wish Analysis Services improves the ability to report on detail level. For example, it will nice to support text measures that the server returns for the lowest grain. I also want detail queries, such as a query that returns accounts for given customer to perform faster and don&amp;#39;t give up with &amp;quot;The expression contains a function that cannot operate on a set with more than 4,294,967,296 tuples.&amp;quot; error. &lt;/li&gt;
&lt;li&gt;Resource governor &amp;ndash; Analysis Services should expand on letting the administrator manage resources, such as memory, connections, query timeouts, etc. &lt;/li&gt;
&lt;li&gt;Custom security &amp;ndash; Support custom authentication that is not Windows-based to facilitate Internet connectivity perhaps similar to custom security in Reporting Services. &lt;/li&gt;
&lt;li&gt;Modeling enhancements &amp;ndash; OK, this is a catch-all bucket for support issues that I logged and which were declared as&amp;nbsp;&amp;quot;by design&amp;quot; and &amp;quot;future enhancements&amp;quot; &lt;img src="http://prologika.com/CS/emoticons/emotion-2.gif" alt="Big Smile" /&gt;, such as aggregatable Many-to-Many relationships, fixing subselect issues, fixing exclusion filter with custom operator issue. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Happy holidays!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4047" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Reporting Services Top 10 Wish List</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/07/reporting-services-top-10-wish-list.aspx</link><pubDate>Mon, 07 Dec 2009 13:55:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4046</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Reporting Services has gone a long way for the past five years and it&amp;#39;s getting better. In the spirit of the season, here is my Reporting Services Top 10 Wish List revised from &lt;a href="http://prologika.com/CS/blogs/blog/archive/2005/12/02/703.aspx"&gt;three years&lt;/a&gt; ago. This list is based on my work, so your priorities may differ. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Improved Analysis Services integration &amp;ndash; Since its debut in SSRS 2005, the MDX query designer hasn&amp;#39;t changed. R2 continues the trend, so no hope until at least 2011, that&amp;#39;s six years! Yet, the MDX query designer has plenty of deficiencies and bugs to be addressed, such query schema limitations, poor support for parent-child hierarchies, parameter limitations, and so on. I use SSAS heavily in my real-life projects and have to battle these deficiencies on a daily basis. I think it&amp;#39;s time for Microsoft to poll customers and MVPs for feedback and improve the integration with SSAS. &lt;/li&gt;
&lt;li&gt;Eventing model &amp;ndash; Although SSRS 2008 introduced a Report Definition Customization Extension (RDCE) that lets you change the report definition when the report requested, this extensibility mechanism was added as an afterthought and it&amp;#39;s somewhat kludgy. What&amp;#39;s really needed is server-side events, such as OnReportRender, OnPrint, OnParameterLoad, etc., similar to the ASP.NET programming model. Imagine the flexibility you will have as a report author if the server raises events for various stages of report processing and passes the report definition to let you evaluate conditions and change collections and RDL on the fly. &lt;/li&gt;
&lt;li&gt;Supported RDL Object Model &amp;ndash; After promising an RDL object model at TechEd 2007, SSRS 2008 brought an unsupported version but R2 is on its way to &amp;quot;undo&amp;quot; it by making it publicly inaccessible. At the same time, there are many requirements that call for pre-processing report definitions. A supported RDL object model will definitely simplify this. &lt;/li&gt;
&lt;li&gt;Silverlight-based Report Viewer &amp;ndash; Silverlight established itself as a platform of choice for web-based development. A Sliverlight Report Viewer will be a welcome addition. &lt;/li&gt;
&lt;li&gt;More interactive reporting &amp;ndash; Currently, SSRS requires you to make design changes and preview them. It will be great if a future release blurs design and preview to support more interactive reporting similar to Excel PivotTable. &lt;/li&gt;
&lt;li&gt;Dataset enhancements, such as ability to navigate dataset rows and joining datasets at report level. &lt;/li&gt;
&lt;li&gt;More user-friendly ad-hoc reporting &amp;ndash; Report Builder 2.0/3.0 is one my favorite features that SSRS 2008/R2 brought in. However, some end-user oriented features from Report Builder 1.0 got &amp;quot;lost&amp;quot; along the way. This item is about these features, such as making it easier for the end user to filter report data. When connected to SSAS, for example, SSRS should be as user-friendly as Excel. &lt;/li&gt;
&lt;li&gt;ADO.NET dataset binding for server reports &amp;ndash; I keep on asking for this feature and I still think it could be very useful to be able to pass ADO.NET datasets to published reports without having to build a custom dataset extension. &lt;/li&gt;
&lt;li&gt;Report styling &amp;ndash; Ability to style and skin reports. &lt;/li&gt;
&lt;li&gt;Decoupling the Report Builder Designer and exposing it as a reusable .NET control which can be embedded in applications. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Happy holidays!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4046" width="1" height="1"&gt;</description></item><item><title>Microsoft Live Labs Pivot</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/02/microsoft-live-labs-pivot.aspx</link><pubDate>Wed, 02 Dec 2009 20:39:45 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4035</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In case you&amp;#39;ve missed this, the Pivot era has begun. After Excel PivotTable and PivotChart, we&amp;#39;ll have PowerPivot in SQL Server 2008 R2. But Pivot evolves… A co-worker showed me today a glimpse of the Pivot future which I guess is the &lt;a href="http://www.getpivot.com/"&gt;Microsoft Live Labs Pivot&lt;/a&gt;. Since grids and charts are not cool anymore we now have pictures and animation. It&amp;#39;s hard for me to understand at this point how this would apply to Business Intelligence but the Silverlight app with all these pictures sure looks catchy. 
&lt;/p&gt;&lt;p&gt;Long live Pivot!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4035" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/General/default.aspx">General</category></item><item><title>Expert Cube Development with Analysis Services 2008</title><link>http://prologika.com/CS/blogs/blog/archive/2009/12/02/expert-cube-development-with-analysis-services-2008.aspx</link><pubDate>Wed, 02 Dec 2009 14:00:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4032</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.packtpub.com/expert-cube-development-with-microsoft-sql-server-2008-analysis-services/book" title="&amp;quot;Expert Cube Development with Microsoft SQL Server 2008 Analysis Services&amp;quot;"&gt;&lt;img src="http://www.prologika.com/blog/120209_1358_ExpertCubeD1.png" align="left" border="0" alt="" /&gt;&lt;/a&gt;Now that I&amp;#39;ve got my copy and read it, I can say a few things about the &lt;a href="http://www.packtpub.com/expert-cube-development-with-microsoft-sql-server-2008-analysis-services/book"&gt;book&lt;/a&gt; Expert Cube Development with Microsoft SQL Server 2008 Analysis Services by Chris Webb, Alberto Ferrari, and Marco Russo. As mentioned in another &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/10/where-is-the-ssas-2008-book.aspx"&gt;post&lt;/a&gt;, the authors (all MVPs and prominent SSAS experts) don&amp;#39;t disappoint and you won&amp;#39;t go wrong picking up this book. The book is somewhat small in size (330 pages) but big in wisdom and best practices. It also includes plenty of references to external resources and blogs that the authors and other SSAS experts have written when you need further understanding of the topics discussed. Make no mistake though, this is not a step-by-step book and it doesn&amp;#39;t target novice users. As its title suggests, the book is geared toward more advanced users who have a few years of SSAS experience under their belt and are thirsty for more insightful knowledge. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Chapter 1 Designing the Data Warehouse for Analysis Services &lt;/h3&gt;
&lt;p&gt;The first and most important step for implementing a successful Analysis Services solution has nothing to do with Analysis Services at all. Its success depends on a solid schema design on which you&amp;#39;ll build the cube so the book is right on target to hit this topic first. Chapter 1 discusses common schema modeling challenges and provides plenty of tips to tackle them. One grudge I have here is about the following sentence &amp;quot;Beware of the temptation to avoid building a data warehouse and data marts&amp;quot; which may leave the reader with the impression that a data mart is a must. In fact, call me lazy but the first thing that I&amp;#39;d explore when starting a new SSAS project is if it&amp;#39;s possible to avoid a separate database. While a classic OLAP solution in many cases will require a new database (whatever you call it a data warehouse or a data mart) and the whole ETL enchilada that this entails, you may need to build a cube on top of simpler schemas, such on top of a DSS (decision support system) schema. In this case, I would explore the option to &amp;quot;dimensionalize&amp;quot; the source schema with a layer of SQL views. As with everything else, the keep-it-simple principle works for me. &lt;/p&gt;
&lt;h3&gt;Chapter 2 Basic Dimensions and Cubes &lt;/h3&gt;
&lt;p&gt;This chapter discusses the groundwork required to set up the raw dimensional model. This includes working with data sources, data source views, cubes, and dimensions. My favorite part of this chapter was the attribute design and setting up attribute relations. This often overlooked aspect of SSAS development is crucial for achieving good performance and the book explains why. &lt;/p&gt;
&lt;h3&gt;Chapter 3 Designing More Complex Dimensions &lt;/h3&gt;
&lt;p&gt;Next, the book explains how to handle more complex dimension schemas and hierarchies. This includes parent-child, ragged, slowly-changing, referenced, fact, and junk dimensions. The authors&amp;#39; real-life experience shows through. About junk dimensions, my preference is to avoid them wherever possible for performance reasons. Instead, I&amp;#39;d explore the option to keep the low-cardinality attributes in the fact table and use report or URL actions to view them. In my opinion, SSAS is not there yet as far as reporting on details. &lt;/p&gt;
&lt;h3&gt;Chapter 4 Measures and Measure Groups &lt;/h3&gt;
&lt;p&gt;The whole purpose of building a cube is to aggregate measures. Analysis Services supports various aggregation functions and the book provides essential coverage. You will learn how to implement semi-additive measures if you cannot afford the Enterprise Edition of SQL Server. Custom aggregation by using unary operators and custom member formulas are presented too. Then the book discusses more complex relationship types, including different grains, linked dimensions and measure groups, role-playing dimensions and fact relationships. &lt;/p&gt;
&lt;h3&gt;Chapter 5 Adding Transactional Data &lt;/h3&gt;
&lt;p&gt;Although most users would be interested in aggregated data, sometimes users may need to see the level of details behind a cell. The book explains how you can do this by using drillthrough and actions. Drillthrough options are covered in great details. Excellent coverage is provided for many-to-many relationships as well. &lt;/p&gt;
&lt;h3&gt;Chapter 6 Adding Calculations to the Cube &lt;/h3&gt;
&lt;p&gt;Cubes usually include business calculations in the form of MDX expressions. Chapter 6 gives lays the foundation for using MDX. It provides practical examples for calculated members, including YTD, ratios, growths, same period last previous year, moving averages, and ranks. Handling relative dates is a common business requirement. For example, I personally had to implement two custom types of relative dates as explained in this &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/08/19/yet-another-relative-dates-implementation.aspx"&gt;blog&lt;/a&gt;. The book provides a great example for implementing a custom calculation dimension for implementing more flexible relative dates that the BI Wizard provides. Finally, the chapter discusses static and dynamic named sets. &lt;/p&gt;
&lt;h3&gt;Chapter 7 Adding Currency Conversion &lt;/h3&gt;
&lt;p&gt;I consider myself lucky for never having to support international users because of the complexities surrounding the issue. If you have to, SSAS gives you the necessary features to tackle various localization requirements. This chapter walks you through the details of implementing currency conversion using the BI wizard, measure expressions, and writeback. My advice is to avoid writeback due to its limitations. Instead, consider an URL action that navigates the user to a custom web page for handing data changes and proactive caching for automatically updating the cube. &lt;/p&gt;
&lt;h3&gt;Chapter 8 Query Performance Tuning &lt;/h3&gt;
&lt;p&gt;SSAS bends backwards to provide great performance. You can help by following best practices for cube design. This chapter teaches you how to implement partitions and aggregations. I like the sections for monitoring partition and aggregation usage and building aggregations manually. The chapter presents useful tips to diagnose and resolve performance issues, such as by using the MDX Studio, named sets, calculated members, and caching. &lt;/p&gt;
&lt;h3&gt;Chapter 9 Securing the Cube &lt;/h3&gt;
&lt;p&gt;Chances are you will need to provide restricted access to the cube for groups of users. This chapter shows you how to implement and test roles. It covers cell and dimension security. It presents solutions for implementing custom dimension data security which are similar to the ones I discussed in this &lt;a href="http://prologika.com/CS/blogs/blog/archive/2007/09/21/protect-udm-with-dimension-data-security-reloaded.aspx"&gt;article&lt;/a&gt;. &lt;/p&gt;
&lt;h3&gt;Chapter 9 Productionization &lt;/h3&gt;
&lt;p&gt;Your SSAS solution is ready and it&amp;#39;s time to see daylight. This chapter covers the tasks associated with deploying and managing your SSAS solution in production environment. These include managing and generating partitions and processing. I liked the coverage of different processing options. &lt;/p&gt;
&lt;h3&gt;Chapter 10 Monitoring Cube Performance and Usage &lt;/h3&gt;
&lt;p&gt;As an administrator, your job doesn&amp;#39;t end once the solution is deployed. You need to monitor it on a daily basis to ensure that it performs optimally. The last chapter explains different server monitoring techniques, such as performance counters, tracing, Resource Monitor, SQL Profiler, and using Dynamic Management Views (DMVs). I personally liked the memory management tips. &lt;/p&gt;
&lt;p&gt;In summary, I highly recommend this book to anyone who has several years of experience in SSAS development and need a compass check to make sure that he follows the right track. Kudos to the authors for taking time to write it! &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4032" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category></item><item><title>SharePoint List Data Extension </title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/24/sharepoint-list-data-extension.aspx</link><pubDate>Tue, 24 Nov 2009 14:18:51 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4001</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;R2 brings several SharePoint enhancements, including:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for multiple SharePoint zones – Previously, SSRS supported access from SharePoint URLs in the default zone, as I &lt;a href="http://prologika.com/CS/blogs/blog/archive/2008/05/09/sharing-lost-reports-with-web-users.aspx"&gt;explained&lt;/a&gt; before.
&lt;/li&gt;&lt;li&gt;Support for the SharePoint Universal Logging service - Reporting Services introduced a new server interface called IRSSetUserToken. When this interface is implemented, the report server calls the UserToken Set property on this interface and passes the SharePoint user token to the data extension.
&lt;/li&gt;&lt;li&gt;Scripting with the rs utility - The rs utility now supports servers configured in SharePoint integrated mode. This lets you create scripts that automate management tasks that target report servers in SharePoint mode.
&lt;/li&gt;&lt;li&gt;New SharePoint List Data Extension – Lets you report from SharePoint lists
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The last on the list, the new SharePoint List data extension, probably picked up your interest and deserves more explanation. Previously, if you had to use the XML Data Provider to call the SharePoint web service if you wanted to report off SharePoint lists. The new extension simplifies this by supporting SharePoint lists natively. But before you get too excited about it, I have to dampen your enthusiasm by mentioning two limitations:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The extension supports querying a single list only.
&lt;/li&gt;&lt;li&gt;It doesn&amp;#39;t support folders if the list organizes items in folders.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The SharePoint List data extension is supported with both modes – native and SharePoint integrated. It supports Windows SharePoint Services 3.0 and 2010, as well as MOSS. Next, I&amp;#39;ll demonstrate the SharePoint List extension by setting up a dataset that retrieves items from the Issues list of a SharePoint site. The SharePoint list extension is available both in the BIDS Report Designer and Report Builder 3.0. For the purposes of this demo, I&amp;#39;ll use the BIDS Report Designer.
&lt;/p&gt;&lt;h2&gt;Configuring the data source
&lt;/h2&gt;&lt;p&gt;Start by setting up the data source as you would normally do when you author a report.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Set up a data source that uses the Microsoft SharePoint List provider.
&lt;/li&gt;&lt;li&gt;In the Connection String field, enter the URL of the SharePoint site that has the list you want to query.
&lt;/li&gt;&lt;li&gt;Switch to the Credentials tab and select the Use Windows Authentication option. Click OK to close the Data Source Properties dialog.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112409_1416_SharePointL1.png" alt="" /&gt;
	&lt;/p&gt;&lt;h2&gt;Configuring the dataset
&lt;/h2&gt;&lt;p&gt;Once the data source is in place, the next steps will be to set up a dataset. The SharePoint List data extension supports a graphical query designer that lets you select and filter a list. 
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Add a new dataset that uses the data source you&amp;#39;ve just created. On the Dataset Properties, click the Query Designer button.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Report Designer loads the graphical query designer. The SharePoint Lists pane shows all lists in the library. You can check a list to get all fields of the list or select individual fields. You can hover on a field to see additional properties as tooltips, such as Name, Identifier, Field Type and Hidden properties. 
&lt;/p&gt;&lt;p&gt;You can also filter the list. In this case, the Issues list is associated with a My Issues view. Since I don&amp;#39;t have any issues assigned to me, I had to overwrite the list filter by supplying a non-empty query filter. For demo purposes, I decided to set up a filter where the Title column contains the word &amp;quot;parameter&amp;quot; and the Modified date is after 10/1/2009.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112409_1416_SharePointL2.png" alt="" /&gt;
	&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Click the Run Query button to execute the query and see the data and the OK button to close the Query Designer and generate the dataset.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In case you are curious what the actual query looks like, click the Edit As Text query button.  If you want to get all fields, the query can omit the ViewFields element. 
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&amp;lt;RSSharePointList xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;  &amp;lt;ListName&amp;gt;Issues&amp;lt;/ListName&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;  &amp;lt;ViewFields&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    &amp;lt;FieldRef Name=&amp;quot;ID&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    &amp;lt;FieldRef Name=&amp;quot;ContentType&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    . . .
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;  &amp;lt;/ViewFields&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;  &amp;lt;Query&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    &amp;lt;Where&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;      &amp;lt;And&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;        &amp;lt;Contains&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;          &amp;lt;FieldRef Name=&amp;quot;Title&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;          &amp;lt;Value Type=&amp;quot;Text&amp;quot;&amp;gt;parameter&amp;lt;/Value&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;        &amp;lt;/Contains&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;        &amp;lt;Gt&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;          &amp;lt;FieldRef Name=&amp;quot;Modified&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;          &amp;lt;Value Type=&amp;quot;DateTime&amp;quot;&amp;gt;2009-10-01T00:00:00&amp;lt;/Value&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;        &amp;lt;/Gt&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;      &amp;lt;/And&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    &amp;lt;/Where&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;  &amp;lt;/Query&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&amp;lt;/RSSharePointList&amp;gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;The SharePoint List data extension is a new R2 feature that simplifies the process of authoring reports from SharePoint lists. Although it doesn&amp;#39;t support all features of third-party data extensions for SharePoint, it&amp;#39;s a welcome enhancement that lets you retrieve and filter items from a single SharePoint list.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4001" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Report Parts</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/23/report-parts.aspx</link><pubDate>Tue, 24 Nov 2009 01:41:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:4000</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;The major new R2 feature that debuts in CTP 3 (November CTP) of SQL Server 2008 R2 Reporting Services is report parts. A report part is a fragment of a report definition that you can publish to the report server to facilitate best practices and reuse. Just like a developer can refactor and share some piece of code, the report author can re-factor a portion of a report and publish it to the server so that end users can use it as it-is. The following report items can be published as report parts: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Charts &lt;/li&gt;
&lt;li&gt;Gauges &lt;/li&gt;
&lt;li&gt;Images &lt;/li&gt;
&lt;li&gt;Maps &lt;/li&gt;
&lt;li&gt;Parameters &lt;/li&gt;
&lt;li&gt;Rectangles &lt;/li&gt;
&lt;li&gt;Tables &lt;/li&gt;
&lt;li&gt;Matrices &lt;/li&gt;
&lt;li&gt;Lists&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A notable exception to this list is page headers and footers which are probably the most likely candidates for reuse but at this point they didn&amp;#39;t make the list. It&amp;#39;s important to note that if a data region uses a report-specific dataset (not a &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/16/shared-datasets.aspx"&gt;shared dataset&lt;/a&gt;), publishing the region as a report part will publish its dependent dataset. Report parts can best understood by example, so let&amp;#39;s walk through the workflow of publishing, using, and changing a report part. &lt;/p&gt;
&lt;h2&gt;Publishing report parts &lt;/h2&gt;
&lt;p&gt;You can use the BIDS Report Designer or Report Builder 3.0 to publish a report part. The following steps assume you use Report Designer. Let&amp;#39;s say I decided that the tablix with sparklines, which I discussed in a previous &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/20/sparklines-and-data-bars.aspx"&gt;blog&lt;/a&gt;, is a darn good and it should be promoted as a published report part that other users could enjoy for educational or other purposes. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start by setting the server folder where report parts will be published on deploy. In the project properties, set the TargetReportPartFolder (a new deployment setting) to the name of the server folder, such as Report Parts, or a SharePoint library URL for SharePoint integrated mode. &lt;/li&gt;
&lt;li&gt;With the report open in design mode, expand the Report main menu and click Publish Report Parts. If you use Report Builder 3.0, click the Report Builder 3.0 button (the round button in the topmost left area) and select Publish Report Parts. &lt;/li&gt;
&lt;li&gt;The Publish Report Parts dialog box shows the items on the report that are supported as report parts. Check the Tablix report item. &lt;/li&gt;
&lt;li&gt;You can rename a report part by double-clicking its name and typing the new name in place. Click the arrow next to it to expand the Tablix section. Enter a description, such as &amp;quot;A table with sparklines&amp;quot; and click OK to close the dialog box. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://www.prologika.com/blog/112409_0139_ReportParts1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; So far, you have configured which items will be promoted to report parts but you haven&amp;#39;t actually published them. To do so, you need to publish the containing report. In Solution Explorer, right-click the report and click Publish. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;At this point, you should see messages in the BIDS Output Window informing that the report and the report parts you defined are being published. &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:8pt;"&gt;Deploying report part &amp;#39;Tablix&amp;#39; to &amp;#39;/Report Parts&amp;#39;... &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:8pt;"&gt;Deploying report parts complete -- 1 succeeded, 0 failed, 0 skipped &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;6.&amp;nbsp;&amp;nbsp; Open Report Manager (or SharePoint) and navigate to the Report Parts folder. You should see the Tablix report part. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://www.prologika.com/blog/112409_0139_ReportParts2.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;If you go to its properties and download its definition, you will see that the file name has an *.rsc extension and that the report part is represented by a ComponentItem element in RDL. Notice also that the report part definition includes all datasets that report part uses. Once the report part is published, you can manage it just like you can manage a published report. For example, you can change its name, description, or security settings. &lt;/p&gt;
&lt;h2&gt;Using report parts &lt;/h2&gt;
&lt;p&gt;End users can consume published report parts. Notice that I said &amp;quot;end users&amp;quot; because more than likely this will be the most common scenario. In fact, the BIDS Report Designer doesn&amp;#39;t support referencing report parts, only publishing them. The Report Builder 3.0 has been extended to support this feature. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112409_0139_ReportParts3.png" alt="" /&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Report Builder 3.0 and create a blank report. &lt;/li&gt;
&lt;li&gt;Click the Report Builder 3.0 button, click Options and verify that the report server URL is set. &lt;/li&gt;
&lt;li&gt;Click the Report Part Gallery tab of the Properties window. Click the Search button to show all report parts that you have access to. &lt;/li&gt;
&lt;li&gt;Select the Tablix report part and notice that Report Builder 3.0 shows its properties below. &lt;/li&gt;
&lt;li&gt;Drag the Tablix report part and drop it on the report canvas. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Report Builder 3.0 adds the tablix region, the dataset is bound to and report parameters. From here, the report part takes a life of its own. You can make changes to the report as needed including changes to the report part elements. The layout changes you make are not reflected to the published part. If you want to re-publish the changed report part, you can click the Report Builder button and click Publish Report Parts. This will prompt you if you want to re-publish with default settings or review and make changes which will bring you to the Publish Report Parts dialog box. &lt;/p&gt;
&lt;h2&gt;Changing report parts &lt;/h2&gt;
&lt;p&gt;The original report part author or another user which appropriate permissions can make changes and re-publish a report part. End users can check if a report part has changed and choose to accept or not the changes. To do this, they have to poll the server for updates. Currently, there is no way for the server to push the changes to all reports who consume the report part in order to force the changes. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112409_0139_ReportParts4.png" alt="" /&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In Report Designer or Report Builder 3.0, open the report that has the Tablix report part. Make changes to the tablix region and deploy the report to re-publish the report part. &lt;/li&gt;
&lt;li&gt;In Report Builder 3.0, open a report that uses that report part. &lt;/li&gt;
&lt;li&gt;Click the Report Builder 3.0 button and click Check for Updates. Notice that Report Builder 3.0 detects the changes and displays a message that it has found one changed part. &lt;/li&gt;
&lt;li&gt;Click the View Updates button to see what report parts have changed. In the Update Report Parts dialog box, select the Tablix report part and click the Update button to refresh it. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Report Builder 3.0 replaces the tablix region the published version. However, Report Builder 3.0 keeps the existing dataset and parameters, even if they are not changed, and appends new datasets and parameters each time the part is refreshed. So, if you have a dataset called Main, refreshing a part will add a new dataset called Main2 and bind the refreshed part to Main2. &lt;/p&gt;
&lt;p&gt;Report parts are a new feature of SSRS R2. They promote consistency and reuse by letting you re-factor sections of a report and make them available for public consumption. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=4000" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Cumulative Update Package 5 for SQL Server 2008 Service Pack 1</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/20/cumulative-update-package-5-for-sql-server-2008-service-pack-1.aspx</link><pubDate>Fri, 20 Nov 2009 17:58:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3988</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Microsoft released &lt;a href="http://support.microsoft.com/kb/975977/LN/"&gt;Cumulative Update Package 5 for SQL Server 2008 Service Pack 1&lt;/a&gt;&amp;nbsp;(build 10.00.2746). Among other things, if fixes an SSRS &lt;a href="http://support.microsoft.com/kb/975756"&gt;issue&lt;/a&gt; with printing and conditional visibility of recursive groups which I reported.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3988" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category></item><item><title>Sparklines and Data Bars</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/20/sparklines-and-data-bars.aspx</link><pubDate>Fri, 20 Nov 2009 13:24:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3986</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Besides &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/18/indicators.aspx"&gt;indicators&lt;/a&gt;, R2 adds sparklines and data bars to the arsenal of data visualization features. Sparklines are small graphics embedded in a context of words, numbers, and images. They help end users visualize simple trends. You could implement sparklines and simple data bars in the previous versions of Reporting Services but you had to go through many steps to strip down the chart or gauge regions. R2 makes the process much simpler. Let&amp;#39;s see what it takes to author a sparkline report with R2 that is similar to the Sparklines report included in my &lt;a href="http://prologika.com/Books/0976635313/Book.aspx"&gt;book&lt;/a&gt; source code. (Please visit the site to view this media)&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112009_1322_Sparklinesa1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;This report helps the user visualize the performance of the Adventure Works sales persons. For each person, the report shows the employee&amp;#39;s trend based on the reseller sales made over four quarters and his performance ratio which is defined as the actual sales made by the employee divided by his sales quota. The report gets the data from the Adventure Works 2008 Analysis Services cube. &lt;/p&gt;
&lt;h3&gt;Configuring Sparklines &lt;/h3&gt;
&lt;p&gt;In Reporting Services, a sparkline is a scaled-down chart region. Configuring a sparkline takes a few simple steps. &lt;/p&gt;
&lt;p&gt;1. &lt;span style="font-size:x-small;"&gt;Right-click on a tablix cell and click Insert &lt;span style="font-family:Wingdings;"&gt;&amp;eth;&lt;/span&gt; Sparkline.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;2. &lt;/span&gt;&lt;span style="font-size:x-small;"&gt;In the Select Sparkline Type dialog box that follows, select the Line sparkline type. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112009_1322_Sparklinesa2.png" alt="" /&gt; &lt;/p&gt;
&lt;h6&gt;&lt;/h6&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; Double-click the sparkline region to open the Chart Data panel which is another new design feature in R2. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112009_1322_Sparklinesa3.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;4.&amp;nbsp; Click the plus sign in the Values pane and select the Reseller_Sales_Amount to configure the sparkline series. &lt;/p&gt;
&lt;p&gt;5.&amp;nbsp; Click the plus sign in the Category Groups pane to add the Category_Quarter_of_Year field to configure the category groups. &lt;/p&gt;
&lt;p&gt;That&amp;#39;s it! I&amp;#39;ve made a few more minor adjustments to finalize the sparkline, such as removing the chart border, setting the chart background for the &amp;quot;green bar&amp;quot; effect and increasing the line width. &lt;/p&gt;
&lt;h3&gt;Configuring Data Bars &lt;/h3&gt;
&lt;p&gt;To demonstrate data bars, I implemented the employee&amp;#39;s performance ratio using a data bar region. Similar to a sparkline, a data bar is a simplified chart. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;Right-click on a cell and click Insert &lt;span style="font-family:Wingdings;"&gt;&amp;eth;&lt;/span&gt; Data Bar. I actually, configured the data bar outside tablix first by embedding it inside the rectangle and copying and pasting it inside the tablix cell. I did that to make the bar narrower so it doesn&amp;#39;t occupy the entire cell height. &lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;On the Select Data Bar Type, leave the default Bar type selected. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112009_1322_Sparklinesa4.png" alt="" /&gt;&lt;span style="color:#17365d;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;3.&amp;nbsp; In the Chart Data panel, click the plus sign in the Value pane to add the PerformanceRatio field and set its aggregation function to Avg. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/112009_1322_Sparklinesa5.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;That&amp;#39;s pretty much it to set up the initial data bar although I had to go through a few more steps to configure the bar labels and appearance. &lt;/p&gt;
&lt;p&gt;Although not revolutionary features, Indicators, sparklines and data bars will save you time when you need to enhance your report with simple graphics. Sean Boon from the Reporting Services team has written an interesting blog &lt;a href="http://blogs.msdn.com/seanboon/archive/2009/11/16/building-win-loss-sparklines-in-sql-server-reporting-services-2008-r2.aspx"&gt;post&lt;/a&gt; that demonstrates more sparkline features to implement a win-loss sparkline.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3986" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Indicators</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/18/indicators.aspx</link><pubDate>Thu, 19 Nov 2009 02:47:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3981</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Often, reports need to show images that represent discrete values, such as an image that shows a KPI status. Previously, you didn&amp;#39;t have another option but to use images that are dynamically changed based on the field value. Indicators, a new R2 feature, make this much simpler. In Reporting Services, an indicator is a simplified gauge region that lets you associate images with states. Although you can use indicators as stand-alone regions, you would typically nest them in a tablix, as the following report (Please visit the site to view this media) demonstrates. The right-most column of this report shows the Gross Margin KPI status as an indicator. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111909_0245_Indicators1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Authoring this report takes a few simple steps: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add a dataset that requests the Status property of the Financial Gross Profit Margin KPI from the Adventure Works 2008 Analysis Services cube grouped by Year and Quarter. &lt;/li&gt;
&lt;li&gt;Use a tablix region to show the KPI status with Year and Quarter row groups. &lt;/li&gt;
&lt;li&gt;Right-click the cell in an empty column and click Insert &lt;span style="font-family:Wingdings;"&gt;&amp;eth;&lt;/span&gt; Indicator. &lt;/li&gt;
&lt;li&gt;In the Select Indicator Type dialog that follows, select the indicator type. In this case, I chose the default directional type. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111909_0245_Indicators2.png" alt="" /&gt; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Once the indicator region is added to tablix, right-click on it and click Indicator Properties. In the Indicator Properties dialog box, select the Value and States tab. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Since in this case I display numeric values and not percentages, change the States Measurement Unit drop-down list to Numeric. &lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;By default, the default directional indicator lets you defined three states, as shown below. However, you can add or delete states and use custom images if needed. In my case, I defined a range from -1 to 0.-99 for underperformance, 0 - 0.99 as acceptable performance, and 1 as good performance. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111909_0245_Indicators3.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Indicators are simple but very useful enhancement to Reporting Services. They lets you visualize discrete values on reports. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3981" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Pagination and Rendering Enhancements</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/17/pagination-and-rendering-enhancements.aspx</link><pubDate>Tue, 17 Nov 2009 13:52:16 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3976</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;R2 brings more control over pagination and rendering. A question that pops every now and then on the discussion list is how to name Excel worksheets for each instance of a row group.  This scenario wasn&amp;#39;t supported before R2.  In R2, there are addition page break options, as shown in the screenshot below. One of them is PageName.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111709_1350_Paginationa1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;In this case, I set the PageName property of the ProductCategory row group to the Category field. Then, I set up the BreakLocation of the ProductCategory row group to break when the product category changes. The screenshot below shows what the exported to Excel report looks like. As you can see, each worksheet is now named. If the row group spills on the next page, a new worksheet is added with the same name.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111709_1350_Paginationa2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Another welcome enhancement is the ability to reset page numbering. Suppose you have a master report that includes a subreport and you want to reset the page numbering before the subreport is rendered. This is another commonly requested scenario which wasn&amp;#39;t supported before R2. In the screenshot below, I have a report package that includes two subreports. I want to reset the page number after the first subreport renders. Since the subreport region doesn&amp;#39;t have page break properties, I enclosed the first subreport in a rectangle and set the rectangle PageBreak &lt;span style="font-family:Wingdings;"&gt;ð&lt;/span&gt; BreakLocation to End and PageBreak &lt;span style="font-family:Wingdings;"&gt;ð&lt;/span&gt; ResetPageNumber to True. In the page footer, I added &lt;em&gt;Globals!PageNumber of Globals!OverallTotalPages&lt;/em&gt;. Since you can reset the page number, the RS team has added also OverallPageNumber and OverallTotalPages built-in fields to the Globals collection. Given this setup, the report will increase the page number for each page in the Company Sales 2008 report. Once Company Sales 2008 has rendered, the server will reset the page number but it will show the overall number of pages.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111709_1350_Paginationa3.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Notice that there is also a Disabled page break property. Suppose that when exported to other formats you want your report to break on each row group instance but when exported to Excel you want the entire report to export to a single worksheet. R2 has added two additional built-in fields to the Globals collection, RenderFormat.Name and RenderFormat.IsInteractive, that lets you support such scenarios. In this case, I had to define the following expression for the PageBreak &lt;span style="font-family:Wingdings;"&gt;ð&lt;/span&gt; Disabled property:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;=Iif(Globals!RenderFormat.Name=&lt;span style="color:#a31515;"&gt;&amp;quot;EXCEL&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;True&lt;/span&gt;, &lt;span style="color:blue;"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If the user exports the report to Excel, the expression turns on the Disabled property and no page breaks are generated. However, if the user exports the report to another format, the report breaks on each instance of the row group.
&lt;/p&gt;&lt;p&gt;Finally, to round up the rendering enhancements, you have now the option to rotate text 270 degrees as shown in the report below. This can be easily achieved by setting the textbox WritingMode property to Rotate270. You probably would want to set also TextAlign to Center and VerticalAlign to Middle.
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111709_1350_Paginationa4.png" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3976" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Shared Datasets</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/16/shared-datasets.aspx</link><pubDate>Mon, 16 Nov 2009 14:15:24 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3970</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When the Reporting Service team asked my opinion about shared datasets, a new feature in the forthcoming SQL Server Reporting Services R2, I was somewhat skeptical. I preferred them to focus on more important in my mind features, such as the ability to join datasets at report level. But the more I look at the way shared datasets got implemented, the more real-life scenarios I think may benefit from this enhancement. 
&lt;/p&gt;&lt;p&gt;Think of a shared dataset a hybrid between a shared data source and report execution. Similar to a shared data source, a shared dataset is a report dataset that can be managed independently and shared among reports. A shared dataset must use a shared data source. The shared datasets can be parameterized and reports that use it can pass parameters to it. Similar to report executions, a shared dataset can also be cached and refreshed on a schedule. In my opinion, there are two main scenarios where shared datasets can be useful: 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Easier maintenance – Suppose you have a dataset that you can re-use across reports, such as a dataset that populates the parameter available values. You want all reports to reuse the dataset and pick up the dataset query changes automatically. 
&lt;/li&gt;&lt;li&gt;Improved report performance – You may have query that takes very long to execute. You want to execute the query in an unattended mode, such as outside working hours, perhaps for different set of parameters, and cache the dataset for a specific duration. 
&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Creating Shared Datasets 
&lt;/h3&gt;&lt;p&gt;Creating a shared dataset is easy. Both BIDS Report Designer and Report Builder 3.0 are capable of creating shared datasets. In Report Designer, you right-click on the new Shared Datasets folder in Solution Explorer, and click Add New Dataset. In Report Builder 3.0, you click the Create Dataset option on the main Create Report or Dataset popup screen. 
&lt;/p&gt;&lt;p&gt;You can easily convert a report-specific dataset to a shared dataset. Just right-click any dataset in Report Data Window and click Convert to Shared Dataset. Consequently, Report Designer will re-factor the dataset as a shared and it will add its definition to as an *.rsd file to the Shared Datasets folder in Solution Explorer. In the screenshot below, I have converted the EmployeeSalesDetails dataset in the Employee Sales Summary 2008 report to a shared dataset. Notice that the EmployeeSalesDetails dataset reference inside the report has a special icon. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111609_1413_SharedDatas1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;As I mentioned in a previous &lt;a href="http://prologika.com/CS/blogs/blog/archive/2009/11/10/bids-2008-and-r2-project-support.aspx"&gt;post&lt;/a&gt;, the project properties dialog get enhanced to support new deployment settings that are specific to shared datasets. Specifically, the OverwriteDatasets setting specifies if the shared dataset definition will overwritten on deployment if it exists and the TargetDatasetFolder specified in which folder the dataset definitions will be deployed to. 
&lt;/p&gt;&lt;p&gt;Once the dataset is configured as shared, you can set up its properties, which include the dataset query, fields, and filters. Then, you can configure the dataset reference inside the report to pass parameters to the shared dataset or to have its own filters. This is similar to how to you configure a subreport. What if you want to use row-level security and you need to pass the user identify to the dataset query (User!UserID)? Just add a query parameter to the shared dataset, such as LoginID, and configure the dataset reference inside the report to pass User!UserID as a parameter to the shared dataset. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111609_1413_SharedDatas2.png" alt="" /&gt;
	&lt;/p&gt;&lt;h3&gt;Managing Shared Datasets 
&lt;/h3&gt;&lt;p&gt;Once the shared dataset is deployed, it can be managed just like any other published item using Report Manager or SharePoint. Common management tasks include setting the data source reference, caching, and security. The most interesting of these is caching. Just like report executions, you can cache a shared dataset. When a shared dataset is configured for caching, the report server will cache a dataset copy for each parameter combination. The same restrictions apply as with caching report executions. Specifically, the data source cannot use Windows Security or Prompt for Credentials authentication options. You can configure cache expiration options. For example, if data latency of 30 minutes is acceptable, you can configure the dataset cache to expire in 30 minutes. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111609_1413_SharedDatas3.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Let&amp;#39;s say you a dataset query that takes very long to execute. You can set up a cache refresh plan to warm up the dataset cache on a set schedule. Cache refresh plans are also a new R2 feature. Previously, you pre-execute reports by creating a subscription using the NULL delivery provider. Moving to R2, you don&amp;#39;t need to use the NULL provider anymore and you can refresh shared datasets independently from reports. In the process of setting up a cache refresh plan, you need to specify an item-specific or shared schedule and default values for each parameter, just like you would do with snapshot caching or subscriptions. 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.prologika.com/blog/111609_1413_SharedDatas4.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;As you can see, shared datasets can help you implement some interesting scenarios when you need to reduce the management effort or improve the report performance. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3970" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Not All Calculated Members Are Born Equal</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/13/not-all-calculated-members-are-born-equal.aspx</link><pubDate>Fri, 13 Nov 2009 14:30:56 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3953</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;An interesting issue popped up yesterday regarding the calculated member syntax. I had to multiply negative amounts in a financial cube for certain account categories that had negative amounts. The cube also had a Many:Many relationship between financial accounts and account groups which may be related to the issue. So, I had the following scope assignment:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;CREATE&lt;/span&gt;
			&lt;span style="color:blue;"&gt;MEMBER&lt;/span&gt;
			&lt;span style="color:blue;"&gt;CURRENTCUBE&lt;/span&gt;.[Multiplier] &lt;span style="color:#4f6228;"&gt;/* Old Style*/&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;
			&lt;span style="color:blue;"&gt;AS&lt;/span&gt; [Financial Account].[Financial Account Hierarchy].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;Properties&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Multiplier&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;TYPED&lt;/span&gt;), 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;VISIBLE&lt;/span&gt; = 0;    
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;Scope&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;(
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;    [Financial Account].[Financial Account Hierarchy].&lt;span style="color:blue;"&gt;Members
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;);      
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;
			&lt;span style="color:blue;"&gt;this&lt;/span&gt; = [Financial Account].[Financial Account Hierarchy].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt; * [Measures].[Multiplier];
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt;
			&lt;span style="color:blue;"&gt;Scope&lt;/span&gt;;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Multiplier calculated member returns the Multiplier property of the current account member, which could be 1 or -1 (if the account has to be negated). Then, the scope assignment overwrites all measures for the current member. As simple as it is, the assignment didn&amp;#39;t work and the account amounts didn&amp;#39;t get converted although the Multiplier calculated member would return the correct number. I stripped out the entire cube script to only these two script definitions but I couldn&amp;#39;t make it to work. After some research, I came to this &lt;a href="http://cwebbbi.spaces.live.com/blog/cns!7B84B0F2C239489A!823.entry?wa=wsignin1.0&amp;amp;sa=943438212"&gt;interesting discussion&lt;/a&gt; between Chris Webb and Read Jacobsen, which made me think that the issue probably has something to do with the solve order of the calculated member. As it turned out, the new style has a higher pass so the following fixed the issue:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;CREATE&lt;/span&gt;
			&lt;span style="color:blue;"&gt;HIDDEN&lt;/span&gt; [Multiplier] = [Financial Account].[Financial Account Hierarchy].&lt;span style="color:maroon;"&gt;CurrentMember&lt;/span&gt;.&lt;span style="color:blue;"&gt;Properties&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Multiplier&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;TYPED&lt;/span&gt;); &lt;span style="color:#4f6228;"&gt;/* New Style*/&lt;/span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;As Chris suggested, I tend to believe that it&amp;#39;s a bug especially given the fact that I&amp;#39;ve recently &lt;a href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=508308"&gt;logged&lt;/a&gt; another nasty calculated member-related issue, where scope assignments would produce wrong results if the calculated members with the old style definitions are hidden. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3953" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Aggregates of Aggregates</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/11/aggregates-of-aggregates.aspx</link><pubDate>Thu, 12 Nov 2009 01:54:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3933</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Aggregates of aggregates is a new feature in SQL Server R2 Reporting Services. It can be better understood by the sample Aggregates.rdl report ((Please visit the site to view this media)). It shows sales grouped by year and quarter. The Year group subtotals use the Sum aggregation function to sum the quarter sales. The report footer total averages the year subtotals. &lt;/p&gt;
&lt;p&gt;&lt;img height="338" width="417" src="http://www.prologika.com/blog/111209_0151_Aggregateso1.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Prior to R2, authoring such a report would require dividing the total sales by the number of quarters, which you can obtain by using the CountRows function. You cannot just use the Avg function in the footer as the Bad Sales measure shows: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;=Avg(Fields!Internet_Sales_Amount.Value) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If you do so, the Avg function would operate on the detail rows (all quarter rows) and it would produce 2,258,360. R2 lets you nest aggregate functions. The Sales footer total uses the following expression: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;=Avg(Sum(Fields!Internet_Sales_Amount.Value, &lt;span style="color:#a31515;"&gt;&amp;quot;Year&amp;quot;&lt;/span&gt;)) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this case, the Average function operates over the aggregated year subtotals. Note that not all aggregate functions can be nested. For example, you cannot define an aggregate over the Aggregate, RunningValue and Previous functions. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3933" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://prologika.com/CS/blogs/blog/archive/tags/SQL+Server+2008+R2/default.aspx">SQL Server 2008 R2</category></item><item><title>Where is the SSAS 2008 Book?</title><link>http://prologika.com/CS/blogs/blog/archive/2009/11/10/where-is-the-ssas-2008-book.aspx</link><pubDate>Tue, 10 Nov 2009 22:50:00 GMT</pubDate><guid isPermaLink="false">bb61d221-b363-4d22-8192-4aa25b39c5db:3913</guid><dc:creator>Teo Lachev</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Readers have been asking about a revised edition of my Applied Microsoft Analysis Services book for version 2008. First of all, I&amp;#39;d like to thank all my readers who bought and liked the book. This book has been a great success and it really exceeded my expectations in any way! It has great reviews on &lt;a href="http://www.amazon.com/gp/product/0976635305/ref=s9_simz_gw_s1_p14_i1?pf_rd_m=ATVPDKIKX0DER&amp;amp;pf_rd_s=center-2&amp;amp;pf_rd_r=1RCYD6508ZXJJBH6CZ8P&amp;amp;pf_rd_t=101&amp;amp;pf_rd_p=470938631&amp;amp;pf_rd_i=507846"&gt;Amazon&lt;/a&gt; and it has sold over 10,000 copies to date, which is not a bad sales record for a technical book. I am still supporting my readers on the book &lt;a href="http://prologika.com/CS/forums/5.aspx"&gt;discussion list&lt;/a&gt; and more than likely will continue doing so for foreseeable future. At the same time, I decided not to write a revision for SSAS 2008 or R2 for two main reasons: &lt;/p&gt;
&lt;ol style="margin-left:38pt;"&gt;
&lt;li&gt;I just need a break from book writing. It took me several months to write the &lt;a href="http://www.prologika.com/Books/0976635313/Book.aspx"&gt;Applied Microsoft SQL Server 2008 Reporting Services&lt;/a&gt; and &lt;a href="http://www.amazon.com/MCTS-Self-Paced-Training-Exam-70-448/dp/0735626367/ref=ntt_at_ep_dpi_1"&gt;BI toolkit&lt;/a&gt;. I am not ready to start a new book and &amp;hellip; face a divorce. Seriously, writing books is not easy and it takes a lot of time away from the family. And I just can&amp;#39;t write small. &lt;/li&gt;
&lt;li&gt;Version 2008 of Analysis Services has been an incremental and stabilization release. The theme was &amp;quot;don&amp;#39;t rock the boat&amp;quot; since the boat was rocked big time in SSAS 2005, which was essentially a re-write of Analysis Services from ground up. The major 2008 enhancements were in the area of &lt;a href="http://prologika.com/CS/blogs/blog/archive/2007/11/19/sql-server-2008-november-ctp-is-out.aspx"&gt;performance&lt;/a&gt; and manageability. So, hardly enough material to write a revision from a feature standpoint although I definitely have plenty of real-life experience to contribute. So, Applied Microsoft Analysis Services 2005 is still not outdated and I hope you won&amp;#39;t go wrong reading it. Speaking of this book, since it looks like the demand for it waned in the past months (everyone jumped on the 2008 bandwagon, and this is what you should do) I&amp;#39;m not planning a new print. Instead, I lowered the price of the &lt;a href="http://www.ebooks.com/ebooks/book_display.asp?IID=332588"&gt;e-book version&lt;/a&gt; to $29.95, so the book is still available in e-book format if you decide to buy it. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Although I am not planning a new SSAS book anytime soon, I am committed to Analysis Services, which I like very much and use heavily in real-life projects. Looking forward, I am planning a new SSAS revision for SQL Server 11, which is next major release of SQL Server after R2. Meanwhile, I offer an Analysis Services 2008 &lt;a href="http://www.prologika.com/Training/Training.aspx"&gt;training class&lt;/a&gt; if you are looking for instructor-led online training. &lt;/p&gt;
&lt;p&gt;What Analysis Services 2008 books would I recommend? &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Novice User &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Professional-Microsoft-Analysis-Services-Programmer/dp/0470247983/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257891437&amp;amp;sr=1-1"&gt;Professional Microsoft SQL Server Analysis Services 2008 with MDX&lt;/a&gt; &amp;ndash; written by members of the SSAS team &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Microsoft%C2%AE-Server%C2%AE-Analysis-Services-Microsoft/dp/0735626200/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257891437&amp;amp;sr=1-3"&gt;Microsoft SQL Server 2008 Analysis Services Step by Step&lt;/a&gt; &amp;ndash; a good introduction to Analysis Services &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Microsoft%C2%AE-Server%C2%AE-2008-Step-Microsoft/dp/0735626189/ref=sr_1_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257891437&amp;amp;sr=1-7"&gt;Microsoft SQL Server 2008 MDX Step by Step&lt;/a&gt; &amp;ndash; I&amp;#39;ve heard good things about this book from my co-workers who used it to learn MDX basics &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/MCTS-Self-Paced-Training-Exam-70-448/dp/0735626367/ref=ntt_at_ep_dpt_1"&gt;MCTS Self-Paced Training Kit (Exam 70-448): Microsoft SQL Server 2008 Business Intelligence Development and Maintenance&lt;/a&gt; &amp;ndash; if you plan to take the 70-448 BI exam, we wrote this book for you. My contribution was the SSAS chapters. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Experienced User &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Expert-Development-Microsoft-Analysis-Services/dp/1847197221/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257891437&amp;amp;sr=1-2"&gt;Expert Cube Development with Microsoft SQL Server 2008 Analysis Services&lt;/a&gt; &amp;ndash; You won&amp;#39;t go wrong with the fellow MVPs: Marco Russo, Alberto Ferrari, and Chris Webb. I reviewed this book &lt;a target="_blank" href="http://prologika.com/CS/blogs/blog/archive/2009/12/02/expert-cube-development-with-analysis-services-2008.aspx"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Microsoft-Server-Analysis-Services-Unleashed/dp/0672330016/ref=sr_1_4?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257891437&amp;amp;sr=1-4"&gt;Microsoft SQL Server 2008 Analysis Services&lt;/a&gt; &amp;ndash; if you really want to get under the hood, you won&amp;#39;t get disappointed by the folks who implemented Analysis Services &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/MDX-Solutions-Microsoft-Analysis-Services/dp/0471748080/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1257894953&amp;amp;sr=1-1"&gt;MDX Solutions: With Microsoft SQL Server Analysis Services 2005 and Hyperion Essbase&lt;/a&gt; &amp;ndash; Bring your MDX knowledge to the next level. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Speaking of books and writing, I have an exciting announcement which I&amp;#39;ll make soon in another blog. Stay tuned&amp;hellip;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://prologika.com/CS/aggbug.aspx?PostID=3913" width="1" height="1"&gt;</description><category domain="http://prologika.com/CS/blogs/blog/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item></channel></rss>