CTP3 Build of SQL Server 2005 Service Pack 2 Released

In the spirit of the season, the SQL Server team give us the third (and probably last before the final release) CTP3 build (version 9.00.3033.0000) for the forthcoming SQL Server 2005 Service Pack 2.

Losing Identity

After installing CTP2 of SQL Server 2005 SP2, I started getting a rather annoying exception when attempting to launch the Report Builder.

An application for this deployment is already installed with a different application identity.

I’ve noticed that this happens when I run the Report Builder form a server that has CTP2 installed and then I run it from my local machine that doesn’t have CTP2 installed. While I wasn’t able to find what’s causing ClickOnce to lose identity, the workaround I found was to nuke the Report Builder download folders as follows:

  1. Open Windows Explorer and navigate to C:\Documents and Settings\<your user name>\Local Settings\Apps\2.0
  2. Delete all folders below the folder except the Data folder.

SSRS-SharePoint Integration in SP2 (the Good, the Bad, and the Ugly)

As noted before, a major SSRS enhancement in the SQL Server 2005 Service Pack 2 is integration with SharePoint v3.0 and Microsoft Office SharePoint Server. After the RTM release of SQL Server 2005, the SSRS team has been hard at work to implement this feature. Starting with the newly released CTP2 build of SQL Server 2005 Service Pack 2, the SharePoint integration mode is available for public review and testing.

Here are my initial high-level observations after testing the SSRS SharePoint integration in CTP2.

The Good

Integrating reports in dashboards and portals is an increasingly popular requirement. It is obvious that the major design goal that the RS team has set up from the get-go was a seamless integration between SSRS and SharePoint. Many changes were made to the SSRS architectural stack to materialize this goal. The final result speaks for itself (see attached screenshot ).

Once the Report Server is configured in a SharePoint mode, the report definitions are equal citizens to the other documents that are deployed to the SharePoint repository. You can carry all of the report management and delivery tasks right within SharePoint. For example, you can upload the report definitions, set up report security, parameters, subscriptions, and view reports. No, no web-based report authoring yet (not in this release). Instead, use the Report Designer or Report Builder to deploy reports to a SharePoint library.

The Report Server security polices get superseded with SharePoint security. In other words, in SharePoint mode, the Report Server honors the SharePoint security policies and groups, e.g. Home Owners. Behind the scenes, viewing reports is carried by a Report Viewer web part which wraps the ASP.NET ReportViewer that debuted in VS.NET 2005.

Overall, you will undoubtedly like the tight SharePoint integration especially if you have used the old SharePoint Report Explorer web part which was just a wrapper on top of the Report Manager UI. As the popular add goes on, everyone can see the difference. SSRS reports just blend in and "light up" SharePoint. Moreover, the new integration model enables new features (native to SharePoint) that the Report Server doesn't support, such as version control of report definitions and workflow support. For example, you can set up a workflow that requires a formal approval when a new report is uploaded.

The Bad

Many moving parts. New web services endpoints (2006) and security extension are installed on the Report Server to support the SharePoint integration model. A Reporting Services add-in needs to be installed on the SharePoint box so SharePoint can "talk" to the Report Server (only single-server deployment scenario is supported in CTP, the final release will support installing SharePoint and Report Server on separate machines) .

Without going into technical details, a synchronization process takes place at runtime to synch the report definitions between the SharePoint repository and the Report Server catalog. In other words, the SharePoint is the master, the Report Server is the slave. Each time you run a report, the Report Server checks if the report definition exists in its catalog and, if not, calls down to SharePoint to retrieve and upload the report definition. That's because some management tasks are carried by SharePoint (mainly storing the report definitions), while others (subscriptions, snapshot caching, rendering) are executed by the Report Server. Upgrading an existing report catalog to SharePoint is not supported. You need to create a new report catalog enabled in a SharePoint integration mode (use the RS Configuration Utility) and upload manually or programmatically the existing report definitions.

The Ugly

My biggest gripe is the lack of backward application compatibility. If you have an existing application(s) that call down to the Report Server APIs and your requirements call for surfacing your reports to SharePoint you may find that this is not that simple. Not only the web service end points have changed but also the report paths are different to reflect the fact that report definitions are now stored in SharePoint, e.g. #. Further, some features didn't make to SharePoint because they don't have equivalents, such as linked Reports and batching. These changes will necessitate either rewriting your RS code to bent to the SharePoint integration mode (assuming you want to keep everything in SharePoint) or maintaining two report catalogs (one in the "classic" RS mode and a second for SharePoint integration). Of course, the later scenario would require an additional effort to synchronize both catalogs.

Finally, despite that extensibility has been an RS hallmark since its first release, the SharePoint web parts are not extensible. For example, as with the Report Manager, developers won't be able to change the parameter prompts, e.g. to implement more advanced parameter validation or replace them with custom controls. In short, if your requirement go beyond the built-in feature set, you don't have another choice but to abandon the Microsoft SharePoint implementation altogether and do it yourself.

Since I'd prefer centralizing the report management into a single report catalog whenever possible (as opposed to having multiple catalogs for each integration scenario), I couldn't help it but wish for a "semi-tight" integration where the SharePoint web parts just act as a thin presentation layer to the Report Server similar to the Report Manager. But again, I am not an expert in SharePoint and don't know what compromises this approach would have required or how difficult it could have been to achieve the SharePoint look and feel if the report definitions are not stored in SharePoint.Not to mention that the backward compatability issue I listed above may not be a problem if your requirements call for having two separate sets of reports anyway – one for application consumption (operational reports) and second for a SharePoint dashboard (management reports). In this case, having two distinct report catalogs may be preferable.

SharePoint Services 3.0 Released

Download location: http://www.microsoft.com/technet/windowsserver/sharepoint/download.mspx

Demo: http://office.microsoft.com/en-us/sharepointtechnology/HA102055631033.aspx

Report Snapshots and rsReportNotReady

Two very useful features of Reporting Services (version 2000 and above) are snapshot execution and report history. Snapshot execution allows you to cache the report execution. Optionally, you can keep the cached reports in history, e.g. if the user wants to keep a copy of the report for historical analysis.

Once a report is enabled for snapshot execution, you can generate the history snapshot by invoking the CreateReportHistorySnapshot API assuming you need to do so programmatically, e.g.:

historyID = managementProxy.CreateReportHistorySnapshot(reportPath, out warnings);

However, if your code just calls CreateReportHistorySnapshot and the end user requests the report by clicking on the report link in the Report Manager or SharePoint (if the server is configured for SPS integration with SQL Server 2005 SP2), the user will get:

The selected report is not ready for viewing. The report is still being rendered or a report snapshot is not available. (rsReportNotReady)

This error is generated despite the fact that the report has history runs generated already. What’s going on? Why doesn’t the report server returns the last history run automatically? It turns out that the report snapshot and history runs are kept in two different places in the report catalog and are treated differently. To avoid this error change your code as follows:

managementProxy.UpdateReportExecutionSnapshot(reportPath);

ReportHistorySnapshot[] history = managementProxy.ListReportHistory(reportPath);

historyID = history[history.Length – 1].HistoryID;

The first line of code generates the report execution snapshot so clicking on the report link in the Report Manager would show the last snapshot. Assuming the report history for the report is enabled and “Store all report execution snapshots in history” option is enabled, this will also copy the report snapshot to the report history. The second line retrieves the definitions of all report history runs. Finally, the third line gets the last history identifier to return to the client if this is what the client is expecting.

Visual Studio 2005 Team Edition for Database Professionals

The newly released CTP7 of Visual Studio 2005 Team Edition for Database Professionals (aka DataDude) now supports bi-directional schema updates. Once you generate the scripts from your database schema, you can choose either the database or the scripts as a source of changes and commit the changes to the target. Visual Studio 2005 Team Edition for Database Professionals requires Visual Studio 2005 Team Edition.

SQL Server 2005 SP2 CTP 2 Build Released Today

The second CTP (Community Technology Preview) build of the forthcoming SQL Server 2005 Service Pack 2 was released today. Besides bug fixes, SP2 includes major BI features and enhancements including:

Reporting Services

  • SharePoint 2007 integration – this one is a true enzilla (enhancement Godzilla) and deserves a separate post. Suffice to say that unlike the previous Explorer and Viewer webparts, SP2 will allow you to move the report catalog to SharePoint to enable publishing, viewing, and managing SSRS 2005 reports within SharePoint 2007.
  • Report Builder support for Oracle 9.2.0.3 or above (previously only SQL Server and Analysis Services 2005 were supported for Report Builder models)
  • New .NET Data Provider for Hyperion 9.3 BI+ Essbase Enterprise Analytics
  • Select All option has been restored with multi-valued parameters (it was disabled in SP1 for performance reasons).

Analysis Services

  • Better Excel 2007 integration – advanced filtering, cube formulas, offline cubes.
  • Data mining add-ins for Excel 2007 — Table Analysis Tools for Excel, Data Mining Client for Excel, Data Mining Templates for Visio
  • Performance improvements with subselects, arbitrary shapes, running sum calculations, visual totals, ROLAP dimensions, cell writeback, many-to-many dimensions, 64-bit NUMA hardware, semi-additive measures and unary operators.
  • Supportability enhancements – enhanced memory dumps, filtered dumps, best practices analyzer

More information about what's new in SQL Server 2005 SP2 CTP2 is available in the readme file.

Office 2007 RTM’ed

Microsoft Corp. today announced the completion of the 2007 Microsoft® Office system code and confirmed its release to manufacturing (RTM).

Linked Attribute Hierarchies

In UDM, the cube space is defined by attribute hierarchies. Dimensions are just logical containers of attribute hierarchies. It will be great if the next release of SQL Server (Katmai) could expand further on the attribute nature of UDM and solve some nagging issues that modelers currently face.

Let’s consider an example. Say, you have Geography and Customer dimension tables (see the AdventureWorksDW database). It is logical to expect that end users may be willing to browse data by the Geography-Customer hierarchy. As common this requirement is, modelers today need to make some tradeoffs to meet this requirement.

To start with, you could embrace the star schema and build two UDM dimensions (Geography and Customer) on top of the corresponding dimension tables. Then, the end users can drop these two dimensions side-by-side in their favorite OLAP browser to slice the data by Geography and Customer. Behind the scenes, the server will cross-join these two dimensions . Although cross-joing dimensions may meet the business need, there are a couple of well-known issues with this approach. First, you won’t be able to define easily useful hierarchy-related calculations, such as ratios of children to parent because there are no user-defined hierarchies. Second, cross-joining large dimensions may impact performance.

Alternatively, you could decide to create a user-defined hierarchy (aka multi-level hierarchy) that spans Geography and Customer attributes. This is where the things get trickier. Assuming a star schema, both dimension tables would join the fact table. To build a Customer dimension spanning both tables, you need to bridge them via the fact table – a definite no-no situation. The other solution is to duplicate the Geography columns to the Customer dimension table but this leads to duplication of database and UDM storage and will complicate the ETL processes.

At this point, ditching the star schema and showflaking the Geography table off the Customer table starts to look appealing. Now, you could build the Customer dimension on top of the Geography and Customer dimension tables – the approach that the sample AdventureWorks UDM takes. The first tradeoff is that you may need to fight an uphill battle with fans of the “classic” dimensional modeling that swear by star schemas. Second, this approach still results in duplication of UDM storage. That’s because, when the Geography and Customer dimensions are processed, the server will still build all dimension attribute hierarchies irrespective of the fact that some of them of identical. For example, if you have a City attribute (from the Geography table) in the Customer dimension, the server will build two City attribute hierarchies – one when building the Geography dimension and another one when building the Customer dimension.

It will be nice if a future SSAS version supports linking attributes from one dimension to another. With this feature, the database schema (star or snowflake) could become irrelevant. The City attribute from the Geography dimension could be linked to the Customer dimension. Of course, the cube schema will still be constrained by the underlying database schema and table relationships. However, cross-dimension attribute relationships will certainly enable more flexible scenarios.