MDX查询报The Measures hierarchy already appears in the Axis0 axis错误如何解决
MDX查询度量维度多轴冲突问题解决
错误根因
MDX语法明确规定Measures作为特殊的内置维度,在同一个查询中只能出现在单个查询轴上,不允许同时在行、列等多个轴定义度量成员。你当前查询在列轴(Axis0)定义了[Measures].[Average Rate],又在行轴(Axis1)直接将[Measures].[End of Day Rate]作为行成员,直接触发了该规则限制,返回对应错误。
具体解决步骤
- 第一步:明确业务逻辑对应的行维度。你原来的写法错误地将度量作为行轴成员,正常场景下,行轴应该放置你要统计的业务维度成员(比如汇率统计场景下的日期维度、币种维度等),度量仅作为统计值展示。
- 第二步:将所有需要展示的度量统一放在同一个轴上,避免
Measures维度出现在多个轴。 - 第三步:调整
Order、TOPCOUNT、NONEMPTY函数的嵌套逻辑,对行维度的成员做排序、截取、非空过滤。
修改后查询示例(以日期维度作为行维度为例)
SELECT -- 所有要展示的度量统一放在列轴 {[Measures].[Average Rate], [Measures].[End of Day Rate]} ON COLUMNS, NONEMPTY( TOPCOUNT( -- 对行维度成员按Average Rate升序排序 Order( [Date].[Date].[Date].Members, -- 可替换为你实际需要的维度成员集合,比如币种维度 [Measures].[Average Rate], ASC ), 201 ), -- 过滤掉没有End of Day Rate数据的维度成员 {[Measures].[End of Day Rate]} ) ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING
特殊场景适配
如果你的业务需求确实需要将度量作为行维度展示,只需将所有度量统一移至行轴,列轴放置其他业务维度即可,示例:
SELECT -- 列轴放置其他业务维度,比如年份 [Date].[Calendar Year].[Calendar Year].Members ON COLUMNS, -- 所有度量统一放在行轴 {[Measures].[Average Rate], [Measures].[End of Day Rate]} ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING
内容的提问来源于stack exchange,提问作者TAMILARASAN R
相关产品推荐
相关产品推荐

