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

求助:使用MDX查询SSAS服务器无法获取同期对比数据

MDX同期对比查询解决方案

原有写法问题分析

  • 原有逻辑通过CASE判断[Hire Date]当前成员的日期范围,行轴未放置[Hire Date]维度时,当前成员默认为维度的"所有成员",条件永远不匹配导致返回空值
  • 新增[Hire Date]到行轴后,会按每个入职日期拆分出行,无法按[Employee].[Title]维度聚合分组,不符合预期输出

优化后查询代码

WITH
-- 当年数据:聚合指定日期范围内的销售配额
MEMBER [Measures].[current year data] AS 
SUM(
    FILTER(
        [Employee].[Hire Date].[Hire Date].ALLMEMBERS,
        CDate([Employee].[Hire Date].CurrentMember.MemberValue) >= CDate('2002-01-01') 
        AND CDate([Employee].[Hire Date].CurrentMember.MemberValue) <= CDate('2002-12-31')
    ),
    [Measures].[Sales Amount Quota]
)
-- 上年同期数据:聚合上一年对应日期范围的销售配额
MEMBER [Measures].[previous year data] AS 
SUM(
    FILTER(
        [Employee].[Hire Date].[Hire Date].ALLMEMBERS,
        CDate([Employee].[Hire Date].CurrentMember.MemberValue) >= CDate('2001-01-01') 
        AND CDate([Employee].[Hire Date].CurrentMember.MemberValue) <= CDate('2001-12-31')
    ),
    [Measures].[Sales Amount Quota]
)
SELECT
{
    [Measures].[current year data],
    [Measures].[previous year data]
} ON COLUMNS,
-- 行轴仅保留职位维度,按职位名称升序排列,过滤空值行
NONEMPTY(
    ORDER(
        [Employee].[Title].[Title].ALLMEMBERS,
        [Employee].[Title].CurrentMember.Member_Caption,
        ASC
    ),
    {[Measures].[current year data], [Measures].[previous year data]}
) ON ROWS
FROM [Sales Targets]
CELL PROPERTIES VALUE, FORMATTED_VALUE, FORMAT_STRING

逻辑说明

  • 采用SUM+FILTER组合直接聚合对应日期范围的度量值,不需要将[Hire Date]维度放进行轴,自动按行轴的[Employee].[Title]维度分组
  • 日期范围可以直接修改FILTER中的起止日期实现动态调整,适配任意时间段的同期对比需求
  • 行轴仅保留[Employee].[Title]成员,通过NONEMPTY过滤掉两年数据均为空的无效行
  • 若Cube中存在独立的标准日期维度,可替换为ParallelPeriod函数进一步简化同期计算逻辑,无需手动编写上年日期范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04