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

使用DATEADD函数获取上月数据的DAX度量跨年时失效

问题分析与修改方案

原代码的核心问题是手动拆分月份和年份进行判断,当处理12月的Data Deployment Date时,MONTH(Table[Data Deployment Date]) -1得到11,但结合DATEADD(Calendar[Deployment Date],1,MONTH)的筛选逻辑,此时日历表日期已跳转至下一年1月,导致年份判断条件会错误匹配下一年的11月数据,从而引发异常。

改用EOMONTH函数可以自动处理跨年份的月份计算,无需手动判断年份和月份,以下是修改后的代码:

Completed Days on Site DOS = 
CALCULATE(
 SUM(Table[# Actual DOS]),
 DATEADD(Calendar[Deployment Date],1,MONTH), // 取提前一个月的报告数据
 // 判断Visit Date是否为Data Deployment Date的前一个月
 EOMONTH(Table[Visit Date], 0) = EOMONTH(Table[Data Deployment Date], -1)
)

代码说明

  • EOMONTH(Table[Visit Date], 0):返回Visit Date所在月份的最后一天
  • EOMONTH(Table[Data Deployment Date], -1):返回Data Deployment Date前一个月的最后一天
  • 通过对比两个日期的月末值,即可精准匹配Visit Date属于Data Deployment Date前一个月的所有记录,自动处理1月(匹配上一年12月)和12月(匹配同年11月)的跨年份场景。

若需要更直观的年份+月份匹配写法,也可以使用以下代码:

Completed Days on Site DOS = 
CALCULATE(
 SUM(Table[# Actual DOS]),
 DATEADD(Calendar[Deployment Date],1,MONTH),
 // 组合年份和月份,判断是否为前一个月
 DATE(YEAR(Table[Data Deployment Date]), MONTH(Table[Data Deployment Date]), 1) = DATEADD(Table[Visit Date], 1, MONTH)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:50:33