MDX如何实现维度同时出现在筛选器和行轴中不报错?
报错核心原因
MDX 中的 WHERE 子句本质是切片轴,同样属于维度使用的场景,因此禁止同一个维度同时出现在行轴、列轴、切片轴的任意两个及以上位置,这是触发报错的根本原因。
解决方案
无需拆分查询,两种常用实现方式如下:
方案1:将过滤逻辑合并到行轴定义(推荐,写法最简洁)
直接把状态维度的过滤条件从WHERE子句移到行轴的成员集合中,修改后代码:
SELECT NON EMPTY { [confidentialstring].Members } ON COLUMNS, NON EMPTY { [APMWORDER].[LEVEL01].Members * [APMSTDOPR].[LEVEL01].Members * { [AWOUSTAT].[E0001], [AWOUSTAT].[E0002] } * [ANOTIFCTN].[LEVEL01].Members } ON ROWS FROM [APM_CP002/APM_CP002_QX006]
该写法既满足仅返回两个指定状态数据的过滤要求,也可以直接在行维度中展示对应状态值,后续要新增过滤的状态值,直接在[AWOUSTAT]的成员集合中追加即可。
方案2:用子查询包裹过滤逻辑(适合复杂多层过滤场景)
如果场景需要保留外层查询的维度引用结构,可以把过滤逻辑放到内层子查询中,外层正常引用维度做展示,代码示例:
SELECT NON EMPTY { [confidentialstring].Members } ON COLUMNS, NON EMPTY { [APMWORDER].[LEVEL01].Members * [APMSTDOPR].[LEVEL01].Members * [AWOUSTAT].[LEVEL01].Members * [ANOTIFCTN].[LEVEL01].Members } ON ROWS FROM ( SELECT { [AWOUSTAT].[E0001], [AWOUSTAT].[E0002] } ON 0 FROM [APM_CP002/APM_CP002_QX006] )
内容的提问来源于stack exchange,提问作者Gijs van Kersen
相关产品推荐
相关产品推荐

