具有多个列列的SSRS 2008中的参数化MDX查询

时间:2012-02-07 17:59:31

标签: reporting-services parameters mdx rank

我正在努力想出这个,并希望那里的人可以提供帮助。

我有一份SSRS(2008)报告,它直接连接到SSAS OLAP Cube。我有5个不同的列,每个列显示不同的度量,按“管理器”维度划分。我还在SSRS中有参数化下拉列表,可根据各种事物过滤数据。

这是让我达到这一点的代码:

SELECT
NON EMPTY{
[Measures].[Metric A]
,[Measures].[Metric B]
,[Measures].[TMetric C]
,[Measures].[Metric D]
,[Measures].[Metric E]
 } ON COLUMNS
,NON EMPTY{
 ([Ops Hierarchy].[Manager].[Manager].ALLMEMBERS )
 } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

 FROM
 (
     SELECT
     (
         STRTOSET(@CompleteDateCalendar, CONSTRAINED) ) ON COLUMNS
         FROM
         ( 
             SELECT
             (
             STRTOSET(@City, CONSTRAINED) ) ON COLUMNS

             FROM
             (
                 SELECT
                 (
                     STRTOSET(@Region, CONSTRAINED) ) ON COLUMNS
                     FROM
                     (
                        SELECT
                        (
                        STRTOSET(@Country, CONSTRAINED) ) ON COLUMNS

                        FROM
                        [CUBE]
                     )
                 )
             )
         )

 WHERE
 (
 IIF( STRTOSET(@Country, CONSTRAINED).Count = 1, STRTOSET(@Country, CONSTRAINED)
 , [Ops Hierarchy].[Division Name].currentmember )
 , IIF( STRTOSET(@Region, CONSTRAINED).Count = 1, STRTOSET(@Region, CONSTRAINED)
 , [Ops Hierarchy].[Region Name].currentmember )
 , IIF( STRTOSET(@City, CONSTRAINED).Count = 1, STRTOSET(@City, CONSTRAINED)
 , [Ops Hierarchy].[System Name].currentmember )
 , IIF( STRTOSET(@CompleteDateCalendar, CONSTRAINED).Count = 1, STRTOSET(@CompleteDateCalendar, CONSTRAINED)
 , [CompleteDate].[Calendar].currentmember )
 )
  CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

当然,SSRS会自动为每个@parameter创建相应的下拉列表。

现在,我需要帮助:

我有新要求为每个指标添加“排名”列。因此,例如,在“度量标准A”列旁边,将出现另一个名为“度量标准A排名”的列,该列将该行上的管理者与报告中显示的其他管理者进行排名(基于在下拉菜单)。

现在,我知道我可以添加:

WITH

SET [OrderedSet1] AS ORDER(FILTER([Ops Hierarchy].[Manager].MEMBERS,[Measures].[Metric A] <> NULL),[Measures].[Metric A],BASC)
MEMBER [Measures].[Metric A Rank] AS RANK([Ops Hierarchy].[Manager].CurrentMember,[OrderedSet1])

SET [OrderedSet2] AS ORDER(FILTER([Ops Hierarchy].[Manager].MEMBERS,[Measures].[Metric B] <> NULL),[Measures].[Metric B],BASC)
MEMBER [Measures].[Metric B Rank] AS RANK([Ops Hierarchy].[Manager].CurrentMember,[OrderedSet2])

等,到MDX查询的顶部,然后在我的select语句中引用[Measures]。[Metric A Rank]和[Measures]。[Metric B Rank]。

我不知道该怎么做是使用SSRS下拉列表过滤集合,以便我只对报告中显示的内容进行排名。

例如,如果有人在SSRS中选择了Country =“USA”,Region =“South”,City =“Atlanta”和CompleteDate =“Jan 2012”,并且我将度量A排在OrderedSet1之后,那么我只想要展示2012年1月每位经理如何与亚特兰大的其他经理人竞争。

如何使用SSRS下拉菜单“参数化”WITH子句中的集合,以便我只针对用户选择的子集进行排名?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在Set声明中,您可以使用

SET [OrderedSet1] AS ORDER(FILTER([Ops Hierarchy].[Manager].MEMBERS*
[Ops Hierarchy].[System Name].currentmember
,[Measures].[Metric A] <> NULL),[Measures].[Metric A],BASC)