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

能否在Mondrian MDX中编写两个Cube的UNION查询?附示例

在Mondrian MDX中实现多Cube的UNION查询

当然可以在Mondrian MDX中对两个Cube执行UNION操作!不过有个关键前提——这两个Cube的维度结构需要兼容(比如拥有相同的层级、成员类型,或者你能通过MDX函数将它们对齐),这样UNION才能正确合并结果集。

基础实现示例

假设Sales_INDIA和Sales_Germany两个Cube都包含[Time].[Year]、[Product].[Category]维度,以及[Measures].[Sales Amount]度量,你可以通过以下方式实现UNION:

SELECT
  {[Measures].[Sales Amount]} ON COLUMNS,
  NON EMPTY UNION(
    -- 从Sales_INDIA提取数据,添加Cube标识便于区分来源
    [Time].[Year].Members * [Product].[Category].Members * [Sales_INDIA].[Cube Name].&[Sales_INDIA],
    -- 从Sales_Germany提取数据,同理添加标识
    [Time].[Year].Members * [Product].[Category].Members * [Sales_Germany].[Cube Name].&[Sales_Germany]
  ) ON ROWS
FROM [Sales_INDIA], [Sales_Germany]

核心注意事项

  • 维度必须对齐:参与UNION的两个结果集,维度的数量、层级结构要一致。如果某个Cube缺少某个维度,可以用NULL或ALL MEMBERS补全,或者用CROSSJOIN调整结构。
  • 标记数据来源:上面例子中添加的[Cube Name]成员,是为了在结果中清晰区分数据来自哪个Cube,你也可以用计算成员自定义标记。
  • 过滤空行:NON EMPTY用于过滤没有度量值的空行,让结果更简洁。
  • 跨Cube查询基础:必须在FROM子句中同时指定两个Cube,这是Mondrian支持跨Cube操作的前提。

处理维度不匹配的情况

如果两个Cube维度不完全一致(比如Sales_Germany多了[Region].[State]维度),可以用NULL填充缺失的维度部分:

SELECT
  {[Measures].[Sales Amount]} ON COLUMNS,
  NON EMPTY UNION(
    -- Sales_INDIA没有State维度,用NULL填充对应位置
    [Time].[Year].Members * [Product].[Category].Members * {NULL} * [Sales_INDIA].[Cube Name].&[Sales_INDIA],
    -- Sales_Germany保留完整的State维度
    [Time].[Year].Members * [Product].[Category].Members * [Region].[State].Members * [Sales_Germany].[Cube Name].&[Sales_Germany]
  ) ON ROWS
FROM [Sales_INDIA], [Sales_Germany]

只要保证两个Cube的结果集在列结构(维度+度量)上兼容,就可以通过UNION()轻松合并数据。遇到结构差异时,灵活使用MDX的维度调整函数就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:27:08