Pros & Cons of Using the OLE DB Provider for SSAS 10.0 when Reporting in SSRS

Overview:  This entry discusses some considerations for using the OLE DB Provider for SSAS 10.0 connection.  The pros & cons mentioned are relevant to SQL Server Reporting Services, with SQL Server Analysis Services as a data source.  SQL Server 2008 R2 is used for all screen shots.

Introduction

Typically when using SQL Server Reporting Services (SSRS) to retrieve data from an Analysis Services (SSAS) database, the first choice is to use the default data processing extension: 

 image

However, there are times it’s useful to use the OLE DB Provider instead:

image

Versions of the OLE DB Provider:

  • Version 10.0:  SQL Server 2008
  • Version 9.0:  SQL Server 2005
  • Version 8.0:  SQL Server 2000

Pros & Cons of the OLE DB Provider for SSAS 10.0

So, why would you want to use OLE DB when reporting within SQL Server Reporting Services?  To get some additional flexibility not afforded by standard SSAS connectivity.

Pros:

  1. Returns parent/child results more flattened, in separate fields. 
  2. Intrinsic Member Properties (aka Dimension Properties) can be returned in the dataset as “real” fields.
  3. Can use a cellset in the query.
  4. Allows you to place measures on rows rather than just columns. 
  5. Better performance in some situations. 

Cons:

  1. Does not accept query parameters.  (The workaround for this is to combine expressions with strings to build the query, which results in far more complex datasets which are more difficult to maintain.)
  2. No automatic mapping of Extended Field Properties (aka Cell Properties).  (The workaround for this is to adjust the connection string.)
  3. Default field names are much longer. 
  4. No query designer available.  (The workaround for this is to use the query expression pane.)
  5. No support for server aggregates.

The following sections explore these Pros & Cons in greater detail.  Let’s take a look at the Pros first.

Pro 1:  Returning Parent/Child Results More Flattened

Following is a very simple query, using the parent/child hierarchy in the Employees dimension:

image 

The above screen shot is using the standard SSAS connection.  Using the MDX generated by the GUI (shown on the right above), I will create a second dataset using an OLE DB connection instead.  In the next screen shot below, see how Level 2 is a different field than Level 3, which is different from Level 4, etc?

image

The MDX is actually the same in both datasets shown above; it’s the difference in the connection that drives the output.

The “flattening” of the parent/child levels can provide additional flexibility in report layout depending on what you need to do with your report.  You definitely need to be careful with this though – summing the measure accurately is trickier after it’s been flattened out.  It may be better to leave this as is, and use SSRS properties to report parent/child levels.

Pro 2:  Intrinsic Member Properties Can Be Returned in Dataset as “Real” Fields

The same query used in Pro 1 above illustrates this topic nicely.  In the following screen shot we have the MDX generated by SSRS, which asks for Dimension Properties (i.e., intrinsic member properties):

image

With the standard connection, member properties are not available in the drag-and-drop MDX Designer interface in SSRS, but they are accessible via expressions. Instead of the typical “Value” in an expression, the syntax would be:

  • Fields!FieldName(“PropertyName”) or
  • Fields!FieldName.PropertyName

image

 

However, if we use an OLE DB connection, we get the member properties of MEMBER_UNIQUE_NAME, PARENT_UNIQUE_NAME, and LEVEL_NUMBER are returned as “real” fields:

image

This isn’t a major advantage of the OLE DB connection type, but is kind of nice.  It can be a bit more clear if an SSRS novice is trying to understand a report which has already been developed. 

Pro 3:  Using a Cellset in the Query

This one is a bit misleading – we do still need a rowset for Reporting Services.  However, we can get away with a bit more in the MDX source query.

With the standard connection, a multidimensional cellset type of query (shown below) is not permitted.

image

If you attempt to use a cellset (like shown in the above query) with the standard connection, you will get this error:

The query cannot be prepared: The query must have at least one axis.  The first axis of the query should not have multiple hierarchies, nor should it reference any dimension other than the Measures dimension.

image

However, you can execute the same query with the SSAS OLE DB connection type.  The results are still flattened into a rowset for SSRS to process - see how the Measure & the Product Line are combined into one field returned by the dataset:

image

The flexibility of using a cellset is a particularly nice reason to use the OLE DB connection. 

Pro 4:  Place Measures on Rows

Very similar to Pro 3 mentioned above, the OLE DB connection permits you to place measures on the rows, whereas the standard connection requires measures to be placed only in columns.

With the standard connection, a query with measures on the rows (shown below) is not permitted.

image

If you attempt to place measures on the rows with the standard connection, you will get this error:

The query cannot be prepared: The query must have at least one axis. The first axis of the query should not have multiple hierarchies, nor should it reference any dimension other than the Measures dimension.

image

However, you can execute the query with the SSAS OLE DB connection type.  The results are still flattened into a rowset for SSRS to process - see how the “Measures Level” is combined by the dataset:

image

The flexibility to place measures on either columns or rows is another nice reason to use the OLE DB connection.

Pro 5:  Better Performance

I haven’t done any performance testing, so I will defer to Chris Webb’s discussion, as it relates to populating a drop-down list for a parameter.

Con 1:  OLE DB Connection Does Not Accept Query Parameters

This is by far the biggest negative to using the OLE DB connectivity.  The workaround to using parameters is to build the query with a combination of expressions & strings.  For example:

image

Note in the above query the equals sign ( = ) is used at the beginning, so the entire thing is evaluated as an expression.  The only thing not within double quotes are the expressions which SSRS evaluates to bring back the parameter value.

The vbcrlf’s are used just for readability – you could avoid a lot of the plus signs ( + ) and double quotes if more text was on each line.  However, since the SSRS expression box doesn’t wrap terribly well, I tend to make my rows pretty narrow.  Usage of the vbcrlf is discussed in this blog entry.  A side benefit of formatting your MDX for readability with the vbcrlf’s is the MDX comes out quite readable within SQL Server Profiler.

Con 2:  No Automatic Mapping of Extended Field Properties

Cell Properties, also known as Extended Field Properties, don’t come through the OLE DB connection type automatically.  However, there is a workaround for this:  you can modify the data source connection string.

Let’s start with the following query.  Note how several Cell Properties are requested, such as BACK_COLOR, FORE_COLOR, FORMAT_STRING, etc.

image

Using the OLE DB connection with its default settings, these Cell Properties are not returned in the following dataset.

image

The standard connection doesn’t return the Extended Properties as “real” fields, and they aren’t available in the drag-and-drop MDX Designer interface in SSRS, but they are accessible via expressions. Instead of the typical “Value” in an expression, the syntax would be:

  • Fields!FieldName(“PropertyName”) or
  • Fields!FieldName.PropertyName

However, if we modify the connection string within our OLE DB connection, we can get them to return as “real” fields.

Provider=MSOLAP.4;Data Source=Localhost;Initial Catalog="Adventure Works DW 2008R2";Extended Properties="ReturnCellProperties=true"

image

After modifying the connection string, we get them returned as “real” fields:

image

Con 3:  Default Field Names are Much Longer

This is not a big issue, but the field names generated by SSRS are significantly longer when using the OLE DB connection type.  You could edit them if you prefer, but I don’t usually bother.

Con 4:  No Query Designer Available

This is a big one in terms of usability:

  • No Query Designer is available
  • Cannot execute this query & preview results within the SSAS dataset

You need to use the expression pane for the query, as shown below.  The Query Designer window (even if you click MDX mode instead of GUI mode) is not available. 

Remember…if you click the “fx” button & paste in an mdx query (from SSMS or another tool), be sure to remove the equals sign ( = ) in there by default.  (Or, alternatively, wrap the entire thing in double quotes if the = sign remains in front.)  Normally I don’t use the = sign unless parameters are involved, which was discussed up in the Con 1 section above.

image

After you paste a query into the expression pane, if you click on the Fields pane (on the left), you’ll see the fields get added.  If you manually edit the query & add or change fields, the Fields pane will not detect those changes automatically. 

Con 5:  No Support for Server Aggregates

This refers to the ability to use an expression such as =Aggregate(Fields!FieldName.Value) within the OLE DB connection type.  The results will be blank because, according to Robert Bruckner, the OLE DB provider does not implement a RS data extension interface (IDataReaderExtension).   You can use a Sum() or Count(), etc.

Summary

Personally, I use the standard SSAS connectivity unless I have a reason to switch to the OLE DB connection.  The standard connectivity is newer, and is recommended by Microsoft.  However, if you need some flexibility, using the OLE DB connectivity a good option to consider.

Finding More Information

MSDN:  Data Sources Supported by Reporting Services (SSRS)

Chris Webb’s Blog:  Tuning SSRS-Generated MDX Parameter Queries

Teo Lachev’s Blog:  How to Get Extended Properties with SSAS OLE DB Provider

Greg Galloway’s Blog:  Retrieving Cell Properties    <—Really good stuff here!

MSDN:  Analysis Services OLE DB Provider (Analysis Services – Multidimensional Data)

Analysis Services and PowerPivot Team Blog:  Impact of the SQL Server OLE DB Deprecation on Analysis Services

MSDN:  Intrinsic Member Properties

MSDN:  Using Extended Field Properties for an Analysis Services Dataset