MDX地理层级排除特定城市后提取大洲数据的方案求助
解决MDX从过滤后City层级聚合到Continent层级的问题
既然你已经成功过滤掉了特定的City成员,要把这些符合条件的城市向上聚合到Continent层级,完全可以用Generate+Ancestor+Distinct的组合来实现,完美避开你不能使用WHERE子句或嵌套FROM的限制。
具体实现代码
Distinct( Generate( -- 你已经完成的City层级过滤集合 Except( [Zone].[GeographyHierarchy].[City].ALLMEMBERS, { [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant].&[AreaIWant].&[CityIDontWant] } ), -- 为每个过滤后的City获取其所属的Continent祖先 { Ancestor( CurrentItem(), [Zone].[GeographyHierarchy].[Continent] ) } ) )
代码逻辑解释
Generate函数:遍历你已经过滤好的所有City成员,对每一个City执行后续的祖先定位操作。Ancestor函数:精准获取当前City成员在Continent层级的父节点,也就是它所属的大洲。Distinct函数:因为同一个大洲下会有多个符合条件的City,Generate会为每个City生成一次对应的Continent,用Distinct去重后就能得到唯一的、包含所有符合条件City的Continent集合。
为什么你之前的Continent层级EXCEPT尝试无效
你之前直接在Continent层级用EXCEPT排除Descendants返回的成员,本质是试图移除整个Continent,但你的需求是保留该Continent(因为它还有其他有效City),只是排除其中一个特定City。所以从City层级过滤后再向上聚合,才是正确的思路——毕竟你要排除的是单个City,而不是整个大洲。
内容的提问来源于stack exchange,提问作者Leh
相关产品推荐
相关产品推荐

