Reporting services SSRS 2012-根据OLAP评估多个参数

Reporting services SSRS 2012-根据OLAP评估多个参数,reporting-services,ssrs-2008,ssas,mdx,olap,Reporting Services,Ssrs 2008,Ssas,Mdx,Olap,我对MDX很陌生。我有一个名为@MeasureType的多选参数,它有3个可能的标签(我知道名称令人困惑,但“Measure”在这里是一个行业术语): CMS 海迪斯 CMS/HEDIS @MeasureType需要限制两列的结果:MeasureType和ContractType 参数值将逐字映射到MeasureType。为了将它们映射到ContractType,我们需要应用一些逻辑。逻辑是这样的: 如果@MeasureType=“CMS”,则第2列应为“CMS” 如果@MeasureTy

我对MDX很陌生。我有一个名为@MeasureType的多选参数,它有3个可能的标签(我知道名称令人困惑,但“Measure”在这里是一个行业术语):

  • CMS
  • 海迪斯
  • CMS/HEDIS
@MeasureType需要限制两列的结果:MeasureType和ContractType

参数值将逐字映射到MeasureType。为了将它们映射到ContractType,我们需要应用一些逻辑。逻辑是这样的:

  • 如果@MeasureType=“CMS”,则第2列应为“CMS”
  • 如果@MeasureType=“HEDIS”,则第2列应为“HEDIS”
  • 如果@MeasureType=“CMS/HEDIS”,则第2列应为“CMS”或“HEDIS”
  • 如果@MeasureType为全选,则第2列应为“CMS”或“HEDIS”或“其他”
为了让逻辑更加清晰,下面介绍了如何用SQL编写它(有更好的编写方法,但它能让人理解这一点):

我试过几种方法

第一个是为@ContractType创建第二个(隐藏)参数,我使用一系列评估参数的IIF设置了该参数!MeasureType.Label。表达方式如下:

=IIF(
JOIN(Parameters!MeasureType.Label) = "CMS CMS/HEDIS HEDIS", 
"[HealthPlan].[ContractType].&[CMS] [HealthPlan].[ContractType].&[HEDIS] [HealthPlan].[ContractType].&[Other]",
IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS/HEDIS" ), 
    "[HealthPlan].[ContractType].&[CMS] [HealthPlan].[ContractType].&[HEDIS]",
     IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS" ), 
     "[HealthPlan].[ContractType].&[CMS]",
     "[HealthPlan].[ContractType].&[HEDIS]" )
) )
然后我在数据集的parameters选项卡中声明了这两个参数。我可以在查询设计器中运行MDX,但当我尝试预览报表时,我遇到了以下错误…”““[HealthPlan]”的语法不正确。”因此我认为参数构造肯定有问题。我创建了几个文本框来查看参数的内容。选择“全选”时,联接(Parameters!MeasureType.Value)如下所示:

  • [Measure].[MeasureType].[CMS][Measure].[MeasureType].[HEDIS][Measure].[MeasureType].[CMS/HEDIS]。”
和参数!ContractType.Value如下所示:

  • [Measure].[MeasureType]和[CMS][Measure].[MeasureType]和[HEDIS][Measure].[MeasureType]和[Other]”
这似乎是正确的。这是我用于此方法的MDX

SELECT NON EMPTY { [Measures].[Physician Count], 
                   [Measures].[Population], 
                   [Measures].[Unmet],[Measures].[Met] } ON COLUMNS,
 NON EMPTY { (NONEMPTY([Affiliation].[Affiliation1].[Affiliation1].Members, 
                       [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation2].[Affiliation2].Members, 
                       [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation3].[Affiliation3].Members, 
                       [Measures].[Population]) *
              NONEMPTY([Measure].[Registry].[Registry].Members, 
                       [Measures].[Population]) * 
              NONEMPTY(([Measure].[Measure].[Measure].Members,
                        [Measure].[MeasureKey].[MeasureKey].Members,
                        IIf (
                          StrToSet ( @MeasureType, CONSTRAINED ) .Count = 1,
                          StrToSet ( @MeasureType, CONSTRAINED ),
                          [Measure].[MeasureType].Members
                             )

                        ), [Measures].[Population]) *
              NONEMPTY(([Physician].[PCPNameCode].[PCPNameCode].Members, 
                        [Physician].[PCPID].[PCPID].Members, 
                        [Specialty].[Specialty].[Specialty].Members
                        ), [Measures].[Population]) ) 
            } 
              DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM (
  SELECT ( StrToSet ( @MeasureType, CONSTRAINED ) ) ON COLUMNS
  FROM (
        SELECT ( StrToSet ( @ContractType, CONSTRAINED ) ) ON COLUMNS
        FROM [Model]
        )
      )
WHERE ( 
    IIf (
      StrToSet ( @ContractType, CONSTRAINED ) .Count = 1,
      StrToSet ( @ContractType, CONSTRAINED ),
      [HealthPlan].[ContractType].CurrentMember
    ) )
CELL Properties Value,BACK_COLOR,FORE_COLOR,FORMATTED_VALUE,FORMAT_STRING,FONT_NAME,FONT_SIZE,FONT_FLAGS
我尝试过的另一种方法是通过使用case语句创建计算成员来评估MDX中的@MeasureType。MDX在下面。当我运行它时,我没有得到任何结果

WITH MEMBER [HealthPlan].[ContractType].[ContractType2] 
AS
                CASE @MeasureType
                        WHEN "CMS" THEN "[HealthPlan].[ContractType].&[CMS]"
                        WHEN "CMS/HEDIS" THEN "[HealthPlan].[ContractType].&[CMS] [HealthPlan].[ContractType].&[HEDIS]"
                        WHEN "HEDIS" THEN "[HealthPlan].[ContractType].&[HEDIS]"
                        WHEN "CMS CMS/HEDIS HEDIS" THEN "[HealthPlan].[ContractType].&[CMS] [HealthPlan].[ContractType].&[HEDIS] [HealthPlan].[ContractType].&[Other]"
                END

SELECT NON EMPTY { [Measures].[Physician Count], [Measures].[Population], [Measures].[Unmet],[Measures].[Met] } ON COLUMNS,
 NON EMPTY { (NONEMPTY([Affiliation].[Affiliation1].[Affiliation1].Members, [Measures].[Population]) *
                          NONEMPTY([Affiliation].[Affiliation2].[Affiliation2].Members, [Measures].[Population]) *
                          NONEMPTY([Affiliation].[Affiliation3].[Affiliation3].Members, [Measures].[Population]) *
                          NONEMPTY([Measure].[Registry].[Registry].Members, [Measures].[Population]) * 
                          NONEMPTY(([Measure].[Measure].[Measure].Members,
                                                [Measure].[MeasureKey].[MeasureKey].Members,
                                                IIf (
                                                  StrToSet ( @MeasureType, CONSTRAINED ) .Count = 1,
                                                  StrToSet ( @MeasureType, CONSTRAINED ),
                                                  [Measure].[MeasureType].Members
                                                         )
                                                ), [Measures].[Population]) *
                          NONEMPTY(([Physician].[PCPNameCode].[PCPNameCode].Members, 
                                                [Physician].[PCPID].[PCPID].Members, 
                                                [Specialty].[Specialty].[Specialty].Members
                                                ), [Measures].[Population]) ) 
                        } 
                          DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM [Model]
WHERE [HealthPlan].[ContractType].[ContractType2] 
CELL Properties Value,BACK_COLOR,FORE_COLOR,FORMATTED_VALUE,FORMAT_STRING,FONT_NAME,FONT_SIZE,FONT_FLAGS

我在这一点上迷路了。任何帮助都将不胜感激

隐藏参数方法应该有效。创建MDX集的正确语法为:

{[HealthPlan].[ContractType].&[CMS], [HealthPlan].[ContractType].&[HEDIS]}
要仅测试参数,请使用尽可能短的查询,可能类似于以下内容

SELECT  { 
     [Measures].[Population] 
 } ON COLUMNS,
StrToSet ( @MeasureType, CONSTRAINED ) 
  ON ROWS
FROM [Model]
如果有问题,请尝试在SSMS中构建MDX查询。使用SSMS,您可以快速检查上述集合的语法是否正确(可能不正确,因为我没有测试它的多维数据集!):


一旦知道需要构建集合的文本,就可以设置reporting Services表达式来构建该文本。

这是一个适合我的解决方案。使用正确的语法设置@ContractType是关键。多亏了菲林

@ContractType设置为

=IIF(
JOIN(Parameters!MeasureType.Label) = "CMS CMS/HEDIS HEDIS", 
"{[Member].[ContractType].&[CMS], [Member].[ContractType].&[HEDIS], [Member].[ContractType].&[Other]}",
IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS/HEDIS" ), 
    "{[Member].[ContractType].&[CMS], [Member].[ContractType].&[HEDIS]}",
     IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS" ), 
     "{[Member].[ContractType].&[CMS]}",
     "{[Member].[ContractType].&[HEDIS]}" )
) )
我使用的MDX是

SELECT NON EMPTY { [Measures].[Physician Count], [Measures].[Population], [Measures].[Unmet],[Measures].[Met] } ON COLUMNS,
 NON EMPTY { (NONEMPTY([Affiliation].[Affiliation1].[Affiliation1].Members, [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation2].[Affiliation2].Members, [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation3].[Affiliation3].Members, [Measures].[Population]) *
              NONEMPTY(
                        (
                            [Measure].[Registry].[Registry].Members, 
                            [Measure].[Measure].[Measure].Members,
                            [Measure].[MeasureKey].[MeasureKey].Members,
                            StrToSet ( @MeasureType )
                          ), [Measures].[Population] 
                       ) *
              NONEMPTY(
                        (
                            StrToSet ( @ContractType )
                          ), [Measures].[Population] 
                       ) *
              NONEMPTY(
                        ([Physician].[PCPNameCode].[PCPNameCode].Members, 
                        [Physician].[PCPID].[PCPID].Members, 
                        [Physician].[Specialty].[Specialty].Members
                         ), [Measures].[Population]
                       ) 
             )
            } 
              DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM [Model]

再加一句。我们倾向于在SSRS表达式的代码中构建集合表达式,从而将其完全传递给查询,这样就只需要一个简单的stroset了。这是可行的!我需要的是参数集中成员的正确语法。关于上述内容,您的意思是在dataset表达式中构建MDX并将参数连接到语句中吗?如果是这样的话,这样做比将MDX中的参数引用为@Parm有好处吗?不,保留@Param,这就是方法。我只是想向大家展示一下如何用更小的步骤来构建这些东西。如果您首先在SSMS中使用字符串,那么您就可以更容易地让MDX查询按您想要的方式工作。然后你可以在第二步中对其进行参数化。非常感谢你们两位!如果有人对我的文章感兴趣的话,我会把我的结论贴出来。
=IIF(
JOIN(Parameters!MeasureType.Label) = "CMS CMS/HEDIS HEDIS", 
"{[Member].[ContractType].&[CMS], [Member].[ContractType].&[HEDIS], [Member].[ContractType].&[Other]}",
IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS/HEDIS" ), 
    "{[Member].[ContractType].&[CMS], [Member].[ContractType].&[HEDIS]}",
     IIF( INSTR( JOIN(Parameters!MeasureType.Label), "CMS" ), 
     "{[Member].[ContractType].&[CMS]}",
     "{[Member].[ContractType].&[HEDIS]}" )
) )
SELECT NON EMPTY { [Measures].[Physician Count], [Measures].[Population], [Measures].[Unmet],[Measures].[Met] } ON COLUMNS,
 NON EMPTY { (NONEMPTY([Affiliation].[Affiliation1].[Affiliation1].Members, [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation2].[Affiliation2].Members, [Measures].[Population]) *
              NONEMPTY([Affiliation].[Affiliation3].[Affiliation3].Members, [Measures].[Population]) *
              NONEMPTY(
                        (
                            [Measure].[Registry].[Registry].Members, 
                            [Measure].[Measure].[Measure].Members,
                            [Measure].[MeasureKey].[MeasureKey].Members,
                            StrToSet ( @MeasureType )
                          ), [Measures].[Population] 
                       ) *
              NONEMPTY(
                        (
                            StrToSet ( @ContractType )
                          ), [Measures].[Population] 
                       ) *
              NONEMPTY(
                        ([Physician].[PCPNameCode].[PCPNameCode].Members, 
                        [Physician].[PCPID].[PCPID].Members, 
                        [Physician].[Specialty].[Specialty].Members
                         ), [Measures].[Population]
                       ) 
             )
            } 
              DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM [Model]