You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:02