如何解决SSAS中MDX查询的「类型不匹配错误」
修复SSAS MDX中的类型不匹配错误
咱们先拆解下你遇到的「类型不匹配」问题,大概率是这几个细节没处理好:
问题根源
TopNSet集合类型不匹配:如果这个集合不是[DimClient].[Client]维度下的成员集合,Exists函数在对比维度成员时会出现类型冲突;- 冗余的
EXISTING关键字:你嵌套了EXISTING和Exists,前者用于限定当前上下文的集合范围,后者用于判断成员是否存在于目标集合,叠加使用反而会让MDX解析器混淆类型; - 嵌套表达式的类型歧义:原查询里的
Count((EXISTING Exists(...)))多层嵌套,可能导致返回值的类型不符合度量值的要求。
具体修复方案
方案1:用IS IN简化判断(推荐)
直接判断当前客户成员是否在TopNSet中,语法更清晰,彻底避免类型混淆:
-- 先确保TopNSet是[DimClient].[Client]维度的集合(示例定义,替换成你的实际逻辑) WITH SET TopNSet AS TopCount([DimClient].[Client].Members, 10, [MEASURES].[Volume]) MEMBER [MEASURES].[TopNFilter] AS IIF( [DimClient].[Client].CurrentMember IS IN TopNSet, 1, -1 ) SELECT { [MEASURES].[Volume], [MEASURES].[TopNFilter] } ON COLUMNS, {TopNSet} ON ROWS FROM [Cube];
方案2:修正Exists的用法(若你坚持用Exists)
去掉多余的EXISTING关键字,确保TopNSet是同维度成员集合:
WITH SET TopNSet AS TopCount([DimClient].[Client].Members, 10, [MEASURES].[Volume]) MEMBER [MEASURES].[TopNFilter] AS IIF( Count(Exists([DimClient].[Client].CurrentMember, TopNSet)) > 0, 1, -1 ) SELECT { [MEASURES].[Volume], [MEASURES].[TopNFilter] } ON COLUMNS, {TopNSet} ON ROWS FROM [Cube];
关键注意点
- 必须确认
TopNSet的定义:它只能是[DimClient].[Client]层级下的成员集合,不能包含其他维度的成员或度量值,否则必然触发类型不匹配; - 度量值成员要求返回数值类型,你的
1和-1是符合要求的,只要前面的判断条件返回布尔值即可。
内容的提问来源于stack exchange,提问作者Mike Eale
相关产品推荐
相关产品推荐

