Friday, July 22, 2011

SSRS: Hierarchies issue in report parameters with Analysis Services

Reporting Services offers great support for Analysis Services (getting data from cubes). Admittedly however, you will sooner or later meet with several little annoyances that hinder report development, especially if you are not confident or have no knowledge in MDX.

One common issue occurs when setting a dimension hierarchy as a parameter, as in screenshot 1 (for this example, I will be using Customer Geography hierarchy in the AdventureWorks Cube).
Screenshot 1 - Parameter
Reporting Services automatically creates a new hidden dataset, that retrieves the dimension members and all the members of its levels to use as available values for the report parameter. For instance, if you want the countries as parameter, you also get cities and names along with it, which could make the dropdown list parameter huge and messy, as in screenshot 2. While sometimes this is desired, other times it is not.

Screenshot 2 - Large dropdown list
So what can you do if you want only the countries? One option, of course, is to have each level as a separate hierarchy defined in the cube, as seen in the AdventureWorksDW. This is not always possible however. The steps below show you how to do this in the report, and can be applied for any case.

Solution 1 (if you only need the top level in the hierarchy):
  • In the Report Data, right click the Datasets folder and select "Show Hidden Datasets".
Screenshot 3 - Show Hidden Datasets
  • Right click the new dataset that appeared, and select "Query...". You'll be shown some scary, unformatted code (called MDX). Don't fret!
Screenshot 4 - MDX with ALLMEMBERS
  • In the code, there is one and only one place with the text "ALLMEMBERS", as seen in screenshot 4. This can be safely replaced with "CHILDREN" as in screenshot 5. If you execute the query, you will see that you only get the members without all the lower levels.
Screenshot 5 - MDX with CHILDREN
  • Click OK to save the query and preview the report. The dropdown list only shows the countries now, and is much cleaner than before.
Screenshot 6 - Clean dropdown list
Solution 2 (to get a specific level in the hierarchy):
  • The first solution works only if you require the members at the highest level (in the example, countries). But what if we want cities only for example? The first thing is to repeat the steps as above until screenshot 4.
  • This time, we will leave ALLMEMBERS as it is, and instead replace the statement preceding it. In this case, it is [Customer].[Customer Geography]. In the left column under the Metadata tab, find the level that you require and hover the mouse over it to get the statement you need, as in screenshot 7.
Screenshot 7 - Getting level MDX statement
  • We replace the statement in the MDX code as shown in the screenshot above. Finally we get the desired level members.
Screenshot 8 - Dropdown list with cities
Tags: reporting services analysis services mdx report parameters hierarchies level issue problem messy large dropdown list

3 comments:

  1. Hi Andrew,

    Your blog is very helpful for me.
    But my scenario is I want to see the hierarchy upto level 2 that is top level and middle level but I don’t want to see lower level. If you have any idea please share.

    Thanks a lot in advance.

    Sudhanshu

    ReplyDelete
    Replies
    1. You can achieve this and more by adding a filter on [ParameterLevel] to the hidden dataset.

      Delete
  2. It was really helpful. Thank you very much.

    ReplyDelete