DAX如何计算上一财年截至去年同日的累计发票总额
DAX 财年上年同期累计金额计算方案
现有代码与需求
当前可正常运行的DAX代码用于计算2021财年(FY2021)全年CLIN Total总和:
Cum FY21 Invoice Total = CALCULATE( SUM('Invoice Amounts'[CLIN Total]), FILTER( ALL('Calendar'), 'Calendar'[Fiscal Year] = 2021 && 'Calendar'[Date] < MAX('Calendar'[Date]) && 'Calendar'[Date] < NOW()) )
需要实现的逻辑:计算截至上年同日的累计金额。例如当前日期为2022年7月1日时,返回2021财年从财年初到2021年7月1日的CLIN Total累计总和。
此前尝试的写法运行失败:
&&'Calendar'[Date]< DATEADD(now(),-1,YEAR)
报错原因
DAX的DATEADD属于时间智能函数,第一个参数必须传入日期列引用,不能直接传入NOW()返回的单个日期标量,因此该写法不符合语法要求。
正确实现代码
Cum FY21 Prior YTD Invoice Total = VAR CutoffDate = EDATE(TODAY(), -12) RETURN CALCULATE( SUM('Invoice Amounts'[CLIN Total]), FILTER( ALL('Calendar'), 'Calendar'[Fiscal Year] = 2021 && 'Calendar'[Date] < MAX('Calendar'[Date]) && 'Calendar'[Date] <= CutoffDate ) )
说明
- 用
EDATE(TODAY(), -12)直接计算一年前的同日日期,不需要依赖时间智能函数对列的要求,还能自动处理闰年2月29日这类特殊日期,比手动拼接年/月/日的写法更稳定 - 日期判断场景优先用
TODAY()代替NOW(),NOW()会返回带时分秒的时间戳,可能导致当日日期匹配出现偏差 - 现有筛选条件已经限定了统计范围为2021财年,不需要额外调整财年逻辑,计算出的结果就是2021财年截至上年同日的累计值
内容的提问来源于stack exchange,提问作者Robert Kendall
相关产品推荐
相关产品推荐

