CTP1 of PivotViewer Extension for Reporting Services Available Now

Pivot No Comments »

It’s here! It’s here!

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=d31f609d-a353-41ad-a1a4-f81456e3a6c4

PivotViewer Extension for Reporting Services is a utility that enables users to effortlessly build stunning data experiences on top of their Business Intelligence data. You can:

  • Interactively explore and analyze your Business Intelligence data in a very visual and dynamic manner, using a SharePoint web part that embeds the PivotViewer Silverlight control.
  • Instantly generate a PivotViewer application for SharePoint on top of your BI data, using the tools provided.
  • Go beyond standard limitations of the PivotViewer control and define collections that span large numbers of items and use the provided WCF service for SharePoint 2010 in order to serve these collections in a scalable and high performing manner.

Problem: MOSS Alternate Access Mapping (AAM) & PerformancePoint Reporting Services Reports

PerformancePoint 5 Comments »

(This refers to MOSS 2010 and PPS V2)

Today I needed to make an internal PPS demo available via the internet, so some alternate access mapping within SharePoint was in order.

I added an AAM entry for my default web site, essentially converting http://foo into http://demoname.domain.com inside MOSS.

When I fired up the dashboard via http://demoname.domain.com, my analytical grids/charts, scorecards and filters worked correctly. However, the PPS reports which are based on SSRS RDLs living in an integrated-mode SSRS server were broken. I got “Internet Explorer cannot display the webpage” errors instead of my reports.

It appeared to me that PPS Services wasn’t “checking in” with MOSS AAM to see if it needed to “fix things up” when it came to SSRS reports.  To validate this hunch, I used Fiddler while launching the dashboard. All of the calls to render my charts and filters dutifully hit demoname.domain.com. However, I saw a lone call to “foo”. The URL was:

http://foo/ReportServer?http://foo/Report%2520Library/WWReach_ClickThroughRate.rdl&rs:Command=Render&rc:Toolbar=false&rc:Parameters=false&rc:DocMap=false&rc:Zoom=100&rs:Format=HTML4.0

Bingo! I also tested an SSRS report embedded directly into a MOSS Reporting Services Web Part. It worked fine, too.  Looks like a problem with PPS only.

And I’m actually dealing with two reports – one with parameters, one without. I went into PPS Dashboard Designer and updated the Report Server URL and Report URL property for both. For example:

http://foo/ReportServer became http://demoname.domain.com/ReportServer …and… 

http://foo/Report%20Library/ReportName.RDL  became  http://demoname.domain.com/Report%20Library/ReportName.RDL:

Each time I made the change, DD threw this error:

Unable to find report server specified by URL. Please verify that both Server URL and Report URL are correct.

So it looks like the Dashboard Designer isn’t attempting to be “AAM-aware”, either.

Anyway, I re-published both modified reports from Dashboard Designer and checked the dashboard again. The report which did not use parameters worked fine. However, the parameterized report (which accepts input from PPS filters) still failed, but with a new error:

Unable to get filter values from “Filter Name”. You do not have permissions to view this data.

Sigh.

Back in Dashboard Designer, I saw the problem: By plugging in http://demoname.domain.com instead of http://foo, I had essentially “zeroed out” the parameters for my report. The only way I could get the parameters for this report to populate correctly was if I pointed  to http://foo, which obviously wasn’t going to do me any good.

The solution:

When in doubt, try notepad.  First, I used Dashboard Designer to “re-point” the Report Server URL and Report URL values of the still broken report back to http://foo so I could get my parameters populated again. I saved my changes.

After that, I opened the DDWX file up in notepad. I did a search for the property names “ServerURL” and “ReportURL”.  When I found the entries for my “broken” report, I swapped in demoname.domain.com for foo in both places and saved once again.

After that, it was time to open up the DDWX one more time in Dashboard Designer. I used the Mark Differences command to verify that PPS “saw” a change between what was on the server and in DD, then I did a Save All.

Lo and behold, the dashboard now worked…both SSRS reports were happy.

Creating Pivot collections via Reporting Services & SQL Analysis Services: Challenges and Solutions!

Pivot, SQL Analysis Services, SQL Reporting Services No Comments »

While watching the keynote from the recent BI Conference, I saw a demo of the Pivotviewer Extensions for Reporting Services. This is an interesting tool that will help automate creating Pivot collections. Unfortunately, even as an Microsoft FTE I can’t get my hands on a preview copy until after the end of the month…and I have a project due before then.

So, what the hell, let’s re-create the wheel! You can download some samples here. The samples aren’t a complete solution, but demonstrate the uglier/trickier bits of the process.  The code is ugly and not commented…you get what you pay for.

Goal:

Create a collection which surfaces online advertising metrics (impressions, clicks, click through rates, etc.) for 10 ad agency clients. Each client has multiple campaigns and placements with a number of different packages, ads, and creative items which are served by multiple vendor websites.  

Create a Pivot “card” for each combination of Client-Campaign-Placement-Ad-Site . Each “card” should also display interesting metrics on a day-by-day basis.

All data is to be sourced from an SSAS cube.

Approach:

Short and sweet: Create an SSRS report and code to repeatedly export a JPEG in order to generate the images used in the Pivot collection. Once complete, use the Pivot command-line tools to create the cxml document. Simple, right? Here’s how I did it:

Pull information from SSAS

First, I “wrote some MDX” to pull dimension attributes (like client, campaign, etc.) and metrics (impressions, clicks, click through rate)  from the cube.  I had to add additional fields to this query to return the actual UNIQUENAME of the dimension members I was returning. Why? You’ll see in the next section…

WITH          
MEMBER [Measures].[ClientNameUNIQUE] AS [Clients].[Client Name].CURRENTMEMBER.UNIQUENAME          
MEMBER [Measures].[CampaignNameUNIQUE] AS [Campaigns].[Campaign Name].CURRENTMEMBER.UNIQUENAME
MEMBER [Measures].[AdNameUNIQUE] AS [Ads].[Ad Name].CURRENTMEMBER.UNIQUENAME
MEMBER [Measures].[SiteNameUNIQUE] AS [Ads].[DFA Site Name].CURRENTMEMBER.UNIQUENAME          
        
SELECT {[Measures].[ClientNameUNIQUE], [Measures].[CampaignNameUNIQUE] , [Measures].[AdNameUNIQUE], [Measures].[SiteNameUNIQUE],
 [Measures].[Impressions],[Measures].[Clicks],[Measures].[CTR],[Measures].[Calculated Cost],[Measures].[Direct Sales], [Measures].[Indirect Sales]} ON COLUMNS,
NONEMPTY(         
{ { { [Date].[Year].[All].CHILDREN } *
{ [Clients].[Client Name].[All].CHILDREN}  *
{ [Campaigns].[Campaign Name].[Campaign Name].ALLMEMBERS} *
{ [Placements].[Target Market].[Target Market].ALLMEMBERS} *
{ [Placements].[Package Name].[Package Name].ALLMEMBERS} *
{ [Ads].[Ad Name].[Ad Name].ALLMEMBERS} *
{ [Ads].[DFA Site Name].[DFA Site Name].ALLMEMBERS} *
{ [Creative].[Technology Type Name].[Technology Type Name].ALLMEMBERS}

 }}

, [Measures].[Impressions]) ON ROWS           
FROM [WWReach]

I wrote a simple SSIS package (PopulatePivotSupport.dtsx) to take the resultset from this query and drop it into SQL for staging purposes.

Create SSRS report

Next, I created a parameterized SSRS report which contains a fictional client logo, as well as multiple SSRS charts which are used to plot daily online metrics for the client/campaign in question.

The report is parameterized so that I can feed in arbitrary values used to filter data in the charts.  My report uses 5  parameters to filter by  client, campaign, ad, (vendor) site, ad serving technology, etc.

Here’s an example :

sample RDL can be found in the files I mentioned at the top of the article.

Challenge #1

Things normally don’t go 100% smoothly for me when I need to do heavy parameterization on a report which uses SSAS as a data source. I normally have issues with StrToSet-related errors, trying to plug in values which SSRS doesn’t see as valid (due to CONSTRAINED flags in my MDX), etc.  To try and avoid as many of these problems as possible, I did the following for each parameter in my report:

  • Deselected Allow multiple values
  • Under Available Values, I chose None instead of Query
  • Double-checked that I only had one default value per parameter (see bullet #1)
  • Removed the CONSTRAINED sections of MDX from my queries

Challenge #2

I need to provide parameter values to SSRS/SSAS in the [dimension].[attribute].&[attributekey] format.  That’s why I created several MEMBERs in my MDX. I used those to return not only a dimension attribute value like “Us Rail” (a client’s name), but the client’s Unique Name: [Clients].[Client Name].&1001. This was the critical step. Life was good once I had all the “friendly” values (like Client Name = “Us Rail”) as well as the “not so friendly ones” that I needed to feed back to SSAS for filtering purposes ([Clients].[Client Name].&1001) in a staging table.

Write code to render (repeatedly) reports to JPEG files

I decided to create another SSIS package named  PrintSSRS.dtsx to do this work. Essentially, the package does the following:

  • Grabs rows from the staging table. Each row runs my SSRS report once.  I used an Execute SQL task for this and stuffed the results into an Object Variable
  • Uses a For..Each task to iterate through the rows in the Object variable, grabbing values from each row like the Client ID, Campaign Key, Site ID, etc.
  • Executes a Script task inside the For…Each loop. The script task populates the SSRS report’s parameter collection and calls .Render() against SSRS to create the JPEG report which is saved to disk.

..I ended up with about 5,500 JPEG “reports” on my hard drive…each one was about 50K. It took about 2 hours in total for this code to generate all the reports I needed.

Generate the Pivot Collection

Since I hadn’t used the (new) Pivot Command-line tools yet , I thought I would give those a try instead of the Excel-Add in. You can download them from http://www.getpivot.com

I still used Excel heavily though:

  • First I imported that staging table from SQL into a worksheet.
  • I deleted the Excel columns I didn’t care about (the “MEMBER” columns)
  • I used the Pivot documentation to create 3 worksheets in Excel which defined my collection
  • I ran the Command-line tool to create a deepzoom output and went to dinner.

I’ve dropped the workbook I created into the samples, too.

Other Stuff

I learned the hard way that I should have spent a bit more time with the Pivot developer documents. My first collection actually consisted of over 72K distinct Pivot tiles because I decided to also break down my clients/campaigns/ads/sites/technologies by week. Bad idea – I actually couldn’t get the command-line tools to finish the job of creating the CXML file…they would run out of memory on my 16 GB box before they were through :)

I next tried breaking things down by month instead of week…I was able to get a working collection of about 15K tiles at that point, but it looked terrible in viewer. So, I threw our the idea of filtering by time altogether, and here is the result (FYI, “City of New York” is purely fictional – I’m a native, so just used them as a make-believe ad agency client):

 

As I said, I should have RTFM, because it said my collections should try and stick to around 5,000 items.

So there you go. If you’re impatient and don’t want to wait for the “official” PivotViewer Extensions, just roll one yourself. Microsoft’s version is going to be much better than this hack, btw: faster, able to handle more rows, etc.

Silverlight PivotViewer Launched!

Pivot 3 Comments »

It’s official! The Silverlight Pivot control is now available to the general public. Download now!

http://www.silverlight.net/learn/pivotviewer/

Can’t find ReportExecutionService?

SQL Reporting Services No Comments »

Proof positive you need to keep writing code or your skills atrophy. This morning I needed to write some simple code to render an SSRS report as an image using the SSRS Web Services….

In VS, I added a Service Reference to ReportExecution2005.asmx and my proxy was dutifully generated. However, I couldn’t find ReportExecutionService – the only thing I saw that looked “about right” was ReportExecutionServiceSoap and ReportExecutionServiceSoapClient.

I flailed around for a bit and then realized I hadn’t actually added a Web Reference, I had added a Service Reference: Two different things. I killed my Service References, opened the Add Service Reference dialog, and clicked the Advanced button – The “Add a Web Reference isntead of a Service Reference” button was all I needed.

Business Intelligence Indexing Connector “breaks” PowerPivot Gallery on “All in One” machine

PowerPivot, SQL Reporting Services No Comments »

Today I installed the BI Indexing Connector for the first time (neat stuff!) and pretty quickly saw a change in the way the PowerPivot gallery renders Reporting Services reports.

When installing the backend component of the connector, you are instructed to append NoGetRedirect=”True” to a partcular element in the ServerFiles_ReportServer.xml file (http://technet.microsoft.com/en-us/library/ff678217.aspx). Doing so allows the connector to crawl Reporting Services reports.

Unfortunately, this change also modifies how the PowerPivot Gallery Silverlight application renders SSRS reports. The default behavior is “click on an SSRS report and I’ll render it for you in the browser”.  However, once you make the change above, when you click on an SSRS report in the PowerPivot Theater, Carousel, or Gallery…whoops!

Rather than rendering the report as one would expect, the actual RDL file for the report  is returned to the browser and you get the standard “Save as File” dialog!

I’ll update this post when I find out more about the behavior, but if you bump into this issue, you’ve done nothing wrong :)

Update 1:

Looks like this is only occurs if you install everything on one machine. In the real world, I suspect that very few people running FAST will do what I did in terms of building out a machine which acts as a front-end and back-end. However, if you do, be prepared.

More Good Stuff Ahead: The All-up BI VPC 9.2

Sample Data 15 Comments »

 You heard it here first! (?)

 The next major release of the All-up Virtual Machine for Business Intelligence will be made available to Microsoft Partners in the near future (No, no word on whether the general public will be able to get their hands on it, and no exact date for partners, either – “soon”.)

 This particular platform is based on Windows 2008 R2 and the “November CTP” release wave of products: SQL Server 2008 R2, MOSS 2010, and Office 2010.  I’ve been playing with it for just under a couple of hours, and am quite impressed. It includes some interesting wrinkles like the use of sexed-up mapping (Silverlight + Bing for some really nice visualization) and PhotoSynth. It does an excellent job of showing off the new “social” features of MOSS 2010, as well as all the good self-service BI encapsulated in PowerPivot and Report Builder 3.0

 If you’re a partner, look sharp and download this sucker as soon as it’s available. You’ll need a large-ish machine to run the image on as it requires 6-8 GB of RAM and about 90 GB of HD space, but it’s worth it. I’m running it with 8 GB, 4 cores with the VHD file on a RAID 0 striped disk, and I’m really happy with performance after the initial warm up.

Gartner 2010 Magic Quadrant for BI released

Uncategorized No Comments »

Noticed that Gartner’s MQ for Business Intelligence  is now out there for 2010:

http://www.gartner.com/technology/media-products/reprints/microsoft/vol10/article7/article7.html  

Compared to 2009, it appears that Microsoft (yay!), Oracle, and MicroStrategy moved up and to the right in the leader’s quadrant.

http://www.gartner.com/technology/media-products/reprints/sas/vol5/article8/article8.html

Of all the players in the MQ, it looks like Actuate is the big loser – it made a pretty big move down and to the left in the niche quadrant.

Having problems unzipping the Contoso SSAS/OLAP backup file?

Sample Data No Comments »

There are reports that the SSAS archive out on http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=868662dc-187a-4a85-b611-b7df7dc909fc is corrupt….”damaged, truncated, or has been changed”, to exact :)

To open it, simply rename the cube zip file to Contoso_Retail.zip and then try again – happy OLAP-ing.

New large DW and OLAP sample databases available: Contoso!

Sample Data 2 Comments »

For those of you who attended SQL PASS or other recent Microsoft-related technical conferences, you may have seen our new BI “Contoso” demo. Well, the data that powers it has now been made available for download. You’ll find both an OLTP DW and an OLAP cube for your data-munching pleasure.

 I haven’t had time to actually test-drive the dataset, but it is supposed to have millions of rows and be very real-world. Someone please download this thing and tell me how much data I have to look forward to playing with!??

Please?

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=868662dc-187a-4a85-b611-b7df7dc909fc