如何修改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) )
修改说明
- 使用
EOMONTH函数直接计算目标月份的起止日期,避免依赖行上下文的日期判断 - 用
DATESBETWEEN替代FILTER(ALL(DimDate)),语法更简洁且性能更优 - 本月累计逻辑增加判断,自动适配未到月末的情况,取当日作为累计截止日期
内容的提问来源于stack exchange,提问作者Attie Wagner
相关产品推荐
相关产品推荐

