Reporting services SSRS 2012-根据OLAP评估多个参数
我对MDX很陌生。我有一个名为@MeasureType的多选参数,它有3个可能的标签(我知道名称令人困惑,但“Measure”在这里是一个行业术语):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
- CMS
- 海迪斯
- CMS/HEDIS
- 如果@MeasureType=“CMS”,则第2列应为“CMS”
- 如果@MeasureType=“HEDIS”,则第2列应为“HEDIS”
- 如果@MeasureType=“CMS/HEDIS”,则第2列应为“CMS”或“HEDIS”
- 如果@MeasureType为全选,则第2列应为“CMS”或“HEDIS”或“其他”
=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]。”
- [Measure].[MeasureType]和[CMS][Measure].[MeasureType]和[HEDIS][Measure].[MeasureType]和[Other]”
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]