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

MDX新手求助:获取数据库所有Cube的所有Measure及2017、2018年统计值

嘿,作为MDX新手能想到这么具体的需求已经很赞啦!完全可以实现你要的查询,下面我给你拆解思路和具体语句:

核心思路

要实现这个需求,我们需要结合OLAP系统的元数据视图(用来遍历所有Cube和度量)和实际的时间维度过滤,把每个度量在2017、2018年的总计数据关联起来,最终输出你要的结构化结果。

具体MDX查询语句

这里以常见的SSAS环境为例,给出通用的查询模板,你可以根据自己的数据库调整细节:

WITH 
  -- 定义计算成员,提取当前度量所属的Cube名称
  MEMBER [Measures].[CubeName] AS 
    [Measures].CurrentMember.Properties('CUBE_NAME')
  -- 提取当前度量的名称
  MEMBER [Measures].[MeasureName] AS 
    [Measures].CurrentMember.Name
  -- 提取当前年份维度的名称(比如2017/2018)
  MEMBER [Measures].[DateYear] AS 
    [Date].[Year].CurrentMember.Name
SELECT 
  -- 输出你要的四个列
  {
    [Measures].[CubeName],
    [Measures].[MeasureName],
    [Measures].CurrentMember, -- 这里直接取当前度量的数值,替换成你的度量名也可以
    [Measures].[DateYear]
  } ON COLUMNS,
  -- 交叉所有有效度量和目标年份,过滤空值
  NON EMPTY
  CrossJoin(
    -- 从系统元数据中获取所有非计算型度量(可根据需求去掉NOT条件)
    Filter(
      $SYSTEM.MDSCHEMA_MEASURES.MEMBERS,
      NOT [Measures].CurrentMember.IsCalculated
    ),
    -- 指定要查询的两个年份
    {[Date].[Year].[2017], [Date].[Year].[2018]}
  ) ON ROWS
FROM $System -- 针对整个数据库的元数据查询,部分引擎可能需要调整为具体Cube或数据库名
关键细节说明
  • $SYSTEM.MDSCHEMA_MEASURES是OLAP系统内置的元数据视图,能返回数据库中所有Cube下的所有度量成员,这是实现“遍历所有Cube和度量”的核心。
  • 如果你不同Cube的时间维度命名不一样(比如有的叫[Calendar].[Year],有的叫[Time].[Year]),可以考虑统一命名,或者用更灵活的方式匹配年份成员。
  • 如果你的度量有统一的数值字段名(比如都叫[Measures].[TotalValue]),可以把[Measures].CurrentMember替换成这个具体的度量名,结果会更准确。
  • NON EMPTY用来过滤掉那些在对应年份没有数据的度量记录,避免出现空值行。

执行这个查询后,就能得到你想要的结果格式:

CubeNameMeasureNameMeasureCountDateYear
Cube 1Price1500002017
Cube 1Price2000002018

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:58:36