MDX计算度量未按行过滤:单个产品查询结果异常求助
问题分析
你的计算度量AmountR的定义存在上下文覆盖问题:元组([Product].[ProductType].&[R], [Measures].[Amount])会强制将ProductType维度切换到R成员,完全忽略行轴上的[Product].[Product].&[2308]筛选上下文,因此无论你选择哪个产品,都会返回所有R类型产品的总金额。
解决方案
修改计算度量的定义,保留当前的Product筛选上下文,同时只计算属于R类型的产品金额,以下是几种可行实现方式:
方式1:使用EXISTING函数保留上下文
EXISTING会保留当前查询中的Product维度筛选,再与指定的ProductType成员结合,是最简洁的修复方式:
WITH MEMBER [Measures].[AmountR] AS ( EXISTING [Product].[ProductType].&[R] ,[Measures].[Amount] ) ,FORMAT_STRING = "# ##0.00" SELECT { [Measures].[AmountR] ,[Measures].[Amount] } ON 0 ,NON EMPTY [Product].[Product].&[2308] * [Product].[ProductType].MEMBERS ON 1 FROM Test;
方式2:使用Filter筛选符合条件的产品
通过Filter限定当前产品集中属于R类型的成员,适合需要更复杂逻辑的场景:
WITH MEMBER [Measures].[AmountR] AS Sum( Filter( EXISTING [Product].[Product].Members ,[Product].[ProductType].CurrentMember IS [Product].[ProductType].&[R] ) ,[Measures].[Amount] ) ,FORMAT_STRING = "# ##0.00" SELECT { [Measures].[AmountR] ,[Measures].[Amount] } ON 0 ,NON EMPTY [Product].[Product].&[2308] * [Product].[ProductType].MEMBERS ON 1 FROM Test;
方式3:使用Scope定义(适合持久化到多维数据集)
如果需要将该度量永久添加到多维数据集中,推荐使用Scope语句,它能更精准地控制计算上下文:
SCOPE ([Measures].[AmountR]); SCOPE ([Product].[ProductType].[ProductType]); THIS = IIF( [Product].[ProductType].CurrentMember IS [Product].[ProductType].&[R] ,[Measures].[Amount] ,NULL ); END SCOPE; SCOPE ([Product].[Product].[Product]); THIS = ( [Product].[ProductType].&[R] ,[Measures].[Amount] ); END SCOPE; END SCOPE;
验证效果
修改后,查询单个R类型产品2308时,AmountR会返回该产品的121.6€,同时按ProductType维度查询的结果仍保持正常。
内容的提问来源于stack exchange,提问作者user21427211
相关产品推荐
相关产品推荐

