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

MDX多条件筛选查询求助:实现类似SQL或逻辑的维度组合筛选

MDX查询实现多维度OR逻辑筛选

我明白你遇到的问题了——单维度筛选没问题,但要实现OR逻辑的多维度组合筛选确实和SQL的思路不太一样。MDX里的交叉连接(*)是AND逻辑,而你需要的是两个条件的并集,我们可以用Union()函数或者Filter()函数来实现。

方法一:用Union()实现高效的OR逻辑(推荐)

这个方法直接合并两个符合条件的成员集合,性能更优,适合你的场景:

SELECT 
  {[Measures].AllMembers} ON COLUMNS,
  NON EMPTY 
    Union(
      -- 第一个集合:所有CodGer为A的成员
      {[ModelosGers].[CodGer].[A].Members},
      -- 第二个集合:所有CodModel为B01的成员
      {[ModelosGers].[CodModel].[B01].Members}
    ) ON ROWS
FROM [Tasas]
WHERE {[Periodos].[Periodos].[Periodos].[260]}

说明:

  • Union()函数会把两个集合的成员合并,自动去重(如果有成员同时满足CodGer=A和CodModel=B01,只会出现一次)。
  • 如果你的CodGer是父层级,下面包含多个CodModel,那么[ModelosGers].[CodGer].[A].Members会返回A下的所有子成员,正好符合你"CodGer为A"的需求。

方法二:用Filter()实现灵活的条件筛选

如果你的筛选条件更复杂,或者不确定具体成员路径,可以用Filter()遍历维度成员并判断条件:

SELECT 
  {[Measures].AllMembers} ON COLUMNS,
  NON EMPTY 
    Filter(
      -- 遍历ModelosGers维度的所有成员
      [ModelosGers].[ModelosGers].AllMembers,
      -- 判断当前成员是否满足任一条件
      [ModelosGers].[CodGer].CurrentMember.Name = 'A' 
      OR 
      [ModelosGers].[CodModel].CurrentMember.Name = 'B01'
    ) ON ROWS
FROM [Tasas]
WHERE {[Periodos].[Periodos].[Periodos].[260]}

说明:

  • Filter()会逐个检查维度成员,符合条件的才会被保留。这种方式更灵活,但如果维度成员数量很大,性能可能不如Union()。

为什么原来的查询不能实现OR逻辑?

你之前用的[ModelosGers].[CodGer].[A] * [ModelosGers].[CodModel].[A01]是交叉连接,相当于SQL里的AND逻辑——只有同时满足CodGer=A和CodModel=A01的成员才会被选中,这和你需要的OR逻辑正好相反。

内容的提问来源于stack exchange,提问作者erpota

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:37:40