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

如何将两个针对BI_CUBE的MDX查询通过UNION ALL合并为单查询?

MDX合并查询解决方案

要将两个查询合并为单个MDX查询,核心是利用MDX的Union函数(对应SQL的UNION ALL),同时保证两个行集的结构完全一致(每个Tuple的维度数量、顺序相同)。以下是实现代码:

SELECT
  { [Measures].[P Count] } ON COLUMNS,
  Union(
    -- 第一个子查询对应的行集:保留Imp X为True的成员,Imp Y取默认成员
    Crossjoin(
      [Dim P View].[Person Key].[Person Key].ALLMEMBERS,
      [Dim P View].[Is Sensitive Data A].[Is Sensitive Data A].ALLMEMBERS,
      [Dim P View].[Is Sensitive Data B].[Is Sensitive Data B].ALLMEMBERS,
      { [Dim P View].[Is Person Imp X].&[True] },
      { [Dim P View].[Is Person Imp Y].[Is Person Imp Y].DefaultMember }
    ),
    -- 第二个子查询对应的行集:保留Imp Y为True的成员,Imp X取默认成员
    Crossjoin(
      [Dim P View].[Person Key].[Person Key].ALLMEMBERS,
      [Dim P View].[Is Sensitive Data A].[Is Sensitive Data A].ALLMEMBERS,
      [Dim P View].[Is Sensitive Data B].[Is Sensitive Data B].ALLMEMBERS,
      { [Dim P View].[Is Person Imp X].[Is Person Imp X].DefaultMember },
      { [Dim P View].[Is Person Imp Y].&[True] }
    )
  ) DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS
FROM [BI_CUBE]
WHERE (
  -- 筛选Imp X为True 或 Imp Y为True的记录
  Filter(
    Crossjoin(
      [Dim P View].[Is Person Imp X].[Is Person Imp X].MEMBERS,
      [Dim P View].[Is Person Imp Y].[Is Person Imp Y].MEMBERS
    ),
    [Dim P View].[Is Person Imp X].CurrentMember IS [Dim P View].[Is Person Imp X].&[True]
    OR [Dim P View].[Is Person Imp Y].CurrentMember IS [Dim P View].[Is Person Imp Y].&[True]
  )
)

关键说明:

  1. 结构一致性:两个行集都扩展为包含5个维度的Tuple,其中未筛选的属性取默认成员(如All成员),确保Union函数可以正常合并。
  2. 筛选逻辑:通过Filter实现原两个查询的OR条件,只返回Is Person Imp X为True或Is Person Imp Y为True的记录。
  3. 贴近原逻辑:直接指定筛选后的目标成员(&[True]),避免返回不必要的空成员组合。

如果需要过滤无数据的空行,可以在每个Crossjoin外层包裹NonEmpty函数:

NonEmpty(
  Crossjoin(...),
  { [Measures].[P Count] }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:19