SSAS计算成员复杂过滤问题:计算度量值返回Null求助
解决SSAS多维数据集计算度量值返回Null的问题
嘿,我来帮你排查这个问题~你的计算度量值返回Null,核心原因是MDX元组的语法规则被违反了:在MDX的元组中,同一个维度只能出现一个成员,而你原来的代码里AccountType和JE Type维度都同时放了多个成员,这会导致元组无效,最终返回Null。
错误写法的问题分析
你原来的代码:
([Measures].[Amount],[Scenarios].[Scenario Key].&[1],[AccountType],[AccountType].[Account Type].&[Bank],[AccountType].[Account Type].&[Cash],[AccountType].[Account Type].&[NotesReceivable],[JE Type].[JE Type].&[CI],[JE Type].[JE Type].&[NR])
这里AccountType维度连续出现了3个成员,JE Type出现了2个成员,不符合元组“每个维度最多一个成员”的要求,MDX无法识别这种结构,所以返回Null。
正确的写法示例
要实现你需要的多条件筛选(Scenario Key=1,Account Type包含指定值,JE Type包含指定值),可以用Sum函数结合符合条件的成员集合来计算总和,以下是两种可行的写法:
方法1:使用Crossjoin组合筛选集合
CREATE MEMBER CURRENTCUBE.[Measures].[Filtered Amount] AS Sum( -- 组合AccountType和JE Type的目标成员集合 Crossjoin( {[AccountType].[Account Type].&[Bank], [AccountType].[Account Type].&[Cash], [AccountType].[Account Type].&[NotesReceivable]}, {[JE Type].[JE Type].&[CI], [JE Type].[JE Type].&[NR]} ), -- 针对每个组合成员,计算Scenario Key=1的Amount值 ([Measures].[Amount], [Scenarios].[Scenario Key].&[1]) ), -- 可选:设置数值格式 FORMAT_STRING = "Currency";
方法2:使用Exists函数精准筛选
如果你担心维度成员的层级关系,也可以用Exists来确保筛选的是有效成员:
CREATE MEMBER CURRENTCUBE.[Measures].[Filtered Amount] AS Sum( Exists( [AccountType].[Account Type].[Account Type], {[AccountType].[Account Type].&[Bank], [AccountType].[Account Type].&[Cash], [AccountType].[Account Type].&[NotesReceivable]} ), Sum( Exists( [JE Type].[JE Type].[JE Type], {[JE Type].[JE Type].&[CI], [JE Type].[JE Type].&[NR]} ), ([Measures].[Amount], [Scenarios].[Scenario Key].&[1]) ) ), FORMAT_STRING = "Currency";
额外注意事项
- 确保成员引用的正确性:比如
&[Bank]是成员的键值,如果你的维度是用名称而不是键来引用,要改成[AccountType].[Account Type].[Bank](去掉&)。 - 检查多维数据集的维度结构:确认
AccountType和JE Type的层次结构是否正确,有没有存在层级嵌套导致的成员引用错误。
内容的提问来源于stack exchange,提问作者Mümin
相关产品推荐
相关产品推荐

