SSAS Cube未展示全部维度成员,添加measure后成员数增多问题咨询
SSAS Cube维度成员随度量值新增扩容问题的根因与解决方案
根因说明
你遇到的现象既不是Excel设置问题,也不是维度配置问题,是MDX中非空过滤的默认计算规则导致的:
- 未选中任何度量时,SSAS会自动调用当前维度关联的默认度量值做非空过滤,你排查到的「未显式设置默认度量时取第一个度量组的首个度量」逻辑完全正确,此时只有和该默认度量存在关联事实的维度成员会返回,所以仅展示3个成员。
- 新增第一个度量后,非空过滤的基准变为「该度量不为空」,只要和这个度量有对应事实的维度成员都会展示,该度量的非空集合比默认度量多2个成员,所以总数变为5个。
- 新增第二个度量后维度成员继续扩容,和缓存无关,核心原因是MDX中
NON EMPTY关键字的默认逻辑是OR匹配:只要任意一个选中的度量不为空,对应的维度成员就会被返回,而非需要所有度量都不为空。你观察到的「所有行两个度量都有对应值」是因为新增的第6个成员仅在第二个度量上有值,第一个度量为NULL,仅在你看到的展示范围内刚好两个度量都有值而已。
你可以在SSMS中手动执行MDX验证逻辑:
仅带第一个度量的查询:SELECT [Measures].[你新增的第一个度量] ON 0, NON EMPTY [你用到的维度].[层级].Members ON 1 FROM [你的Cube名称]带两个度量的查询:
SELECT {[Measures].[你新增的第一个度量],[Measures].[你新增的第二个度量]} ON 0, NON EMPTY [你用到的维度].[层级].Members ON 1 FROM [你的Cube名称]对比两次返回的维度成员,就能看到多出来的第6个成员对应的第一个度量值为NULL,仅第二个度量有值。
解决方案
- 如果你需要多度量场景下仅返回所有选中度量都不为空的维度成员,不要用
NON EMPTY关键字,改用NonEmpty函数指定过滤基准:SELECT {[Measures].[度量1],[Measures].[度量2]} ON 0, NonEmpty([维度].[层级].Members, {[Measures].[度量1],[Measures].[度量2]}) ON 1 FROM [Cube名称] - 统一无度量选中场景的返回结果:给Cube或对应维度显式设置默认度量,避免SSAS自动取首个度量的不可控行为。
- 要排查Excel端的实际查询逻辑,可通过SQL Server Profiler跟踪SSAS实例的查询请求,直接抓取Excel提交的MDX语句确认规则。
内容的提问来源于stack exchange,提问作者skk
相关产品推荐
相关产品推荐

