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

如何修改DAX公式实现近3个月每月累计总额的正确展示?

DAX公式修改请求:移除Month列后近3个月累计总额展示异常

当前实现情况

已通过DAX创建三个度量值,实现展示近3个月(两个月前、上月、本月)的每月累计总额,带Month列时表格结果符合预期:
当前结果截图

现有DAX代码如下:

Two Months Running Total = 
VAR _twomonthbeforetoday    = DATE( YEAR( TODAY() ), MONTH( TODAY() ) -2, 1 )
VAR _monthend               = IF( MONTH( MAX( DimDate[Date] ) ) = MONTH( _twomonthbeforetoday ), MAX( DimDate[Date] ), BLANK() )
RETURN
CALCULATE( [Cumulative Sales],
FILTER( ALL( DimDate ), DimDate[Date] >= _twomonthbeforetoday && DimDate[Date] <= _monthend))

Previous Month Running Total = 
VAR _previousmonth  = DATE( YEAR( TODAY() ), MONTH( TODAY() ) -1, 1 )
VAR _monthend       = IF( MONTH( MAX( DimDate[Date] ) ) = MONTH( _previousmonth ), MAX( DimDate[Date] ), BLANK() )
RETURN
CALCULATE( [Cumulative Sales],
FILTER( ALL( DimDate ), DimDate[Date] >= _previousmonth && DimDate[Date] <= _monthend))

This Month Running Total = 
VAR _today          = DATE( YEAR( TODAY() ), MONTH( TODAY() ), 1 )
VAR _monthend       = IF( MONTH( MAX( DimDate[Date] ) ) = MONTH( _today ), MAX( DimDate[Date] ), BLANK() )
RETURN
CALCULATE( [Cumulative Sales],
FILTER( ALL( DimDate ), DimDate[Date] >= _today && DimDate[Date] <= _monthend))

问题描述

移除Month列后,表格结果不符合预期,异常情况如下:
异常结果截图

期望效果

移除Month列后,仍能正确展示近3个月的每月累计总额,预期效果如下:
预期结果截图

数据字段说明

当前数据模型相关字段截图:
数据字段截图

修改后的DAX公式

原公式依赖行上下文的Month列和MAX(DimDate[Date])判断,移除Month列后上下文失效导致结果异常。调整后直接计算目标月份的起止日期,不依赖行上下文:

Two Months Running Total = 
VAR _targetMonthStart = EOMONTH(TODAY(), -3) + 1 // 获取两个月前的月初日期
VAR _targetMonthEnd = EOMONTH(_targetMonthStart, 0) // 获取两个月前的月末日期
RETURN
CALCULATE(
    [Cumulative Sales],
    DATESBETWEEN(DimDate[Date], _targetMonthStart, _targetMonthEnd)
)

Previous Month Running Total = 
VAR _targetMonthStart = EOMONTH(TODAY(), -2) + 1 // 获取上月月初日期
VAR _targetMonthEnd = EOMONTH(_targetMonthStart, 0) // 获取上月月末日期
RETURN
CALCULATE(
    [Cumulative Sales],
    DATESBETWEEN(DimDate[Date], _targetMonthStart, _targetMonthEnd)
)

This Month Running Total = 
VAR _targetMonthStart = EOMONTH(TODAY(), -1) + 1 // 获取本月月初日期
VAR _targetMonthEnd = IF(
    TODAY() < EOMONTH(_targetMonthStart, 0),
    TODAY(),
    EOMONTH(_targetMonthStart, 0)
) // 若当前未到月末,取今日为结束日期;否则取月末
RETURN
CALCULATE(
    [Cumulative Sales],
    DATESBETWEEN(DimDate[Date], _targetMonthStart, _targetMonthEnd)
)

修改说明

  1. 使用EOMONTH函数直接计算目标月份的起止日期,避免依赖行上下文的日期判断
  2. 用DATESBETWEEN替代FILTER(ALL(DimDate)),语法更简洁且性能更优
  3. 本月累计逻辑增加判断,自动适配未到月末的情况,取当日作为累计截止日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:33:20