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

如何使DAX中YTD的去年同期值仅包含今年已过月份对应数据?

解决DAX去年同期数据匹配当前已过月份的问题

问题出在你添加的all(Dates[Year])筛选器——它会清除年份的上下文筛选,导致SAMEPERIODLASTYEAR返回整个去年的日期范围,而不是和当前已过月份对应的同期区间。

方案1:移除多余的年份清除筛选(适用于常规同期匹配)

直接去掉all(Dates[Year]),让SAMEPERIODLASTYEAR自动继承当前上下文的日期范围:

SalesAmount_LY = CALCULATE(
    SUM(Invoice[SalesAmount]),
    SAMEPERIODLASTYEAR(Dates[FullDateKey])
)

方案2:用变量限定同期范围(适用于需严格匹配当前已过最大日期的场景)

如果需要确保去年数据严格对应今年截至当前的已过月份(比如今年只到8月,去年只取1-8月),可以通过变量先获取当前日期范围的边界,再计算去年同期的对应区间:

SalesAmount_LY = 
VAR CurrentMaxDate = MAX(Dates[FullDateKey])
-- 获取去年同期的截止日期
VAR LastYearEndDate = DATE(YEAR(CurrentMaxDate)-1, MONTH(CurrentMaxDate), DAY(CurrentMaxDate))
-- 生成去年同期的日期区间(从去年年初到同期截止日)
VAR LastYearPeriod = DATESBETWEEN(
    Dates[FullDateKey],
    DATE(YEAR(CurrentMaxDate)-1, 1, 1),
    LastYearEndDate
)
RETURN
CALCULATE(
    SUM(Invoice[SalesAmount]),
    LastYearPeriod
)

测试度量值的修改方式

针对你的1_LYTest,同样用变量限定同期范围即可:

1_LYTest = 
VAR CurrentPeriod = DATESYTD(DateDimension[Date])
VAR LastYearPeriod = SAMEPERIODLASTYEAR(CurrentPeriod)
RETURN
CALCULATE(
    SUM(Invoice[LineTotal]),
    LastYearPeriod
)

关键说明

  • 不要随意使用all()清除筛选,除非明确需要忽略该维度的所有上下文。这里的年份筛选是SAMEPERIODLASTYEAR正确计算同期的基础。
  • 如果报表中存在动态日期筛选(比如选择任意月份范围),方案2的变量法能更精准地匹配对应的去年同期区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:37:22