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

如何在Power BI中编写DAX公式实现按周的WTD(周累计)同比对比?

Power BI 周累计(WTD)与去年同期差值度量值构建指南

前提准备

必须拥有标记为日期表的规范日期维度表,包含至少以下字段(可通过DAX生成):

  • 日期:完整日期列
  • ISO年份:基于ISO周规则的年份(避免跨年周歧义)
  • ISO周数:ISO标准周数(周一为周起始)
  • 周内天数:周内日期排序(1=周一,7=周日)

可选DAX字段生成(用于ISO周规范)

ISO年份 = YEAR('日期表'[日期] - WEEKDAY('日期表'[日期], 2) + 4)
ISO周数 = WEEKNUM('日期表'[日期], 21) -- 21对应ISO周规则
周内天数 = WEEKDAY('日期表'[日期], 2) -- 1=周一,7=周日

核心度量值构建

1. 当期周累计(WTD)

使用TOTALWTD简化计算,自动匹配当前上下文的周范围:

当期WTD = TOTALWTD(SUM('业务数据表'[度量值列]), '日期表'[日期])

替换'业务数据表'[度量值列]为你的实际数值列(如销售额、订单量),若需自定义周起始(如周一),修改为:

当期WTD = TOTALWTD(SUM('业务数据表'[度量值列]), '日期表'[日期], 2) -- 2代表周一为周起始

2. 去年同期周累计(WTD)

方案1:基于自然周(SAMEPERIODLASTYEAR)

适合周定义与日历自然周完全匹配的场景:

去年同期WTD = CALCULATE([当期WTD], SAMEPERIODLASTYEAR('日期表'[日期]))

方案2:基于ISO周(无跨年歧义)

解决跨年周(如12月最后一周属于下一年ISO周)的匹配问题:

去年同期WTD(ISO周) = 
VAR 当前ISO年 = MAX('日期表'[ISO年份])
VAR 当前ISO周 = MAX('日期表'[ISO周数])
VAR 当前周内天 = MAX('日期表'[周内天数])
RETURN
CALCULATE(
    SUM('业务数据表'[度量值列]),
    '日期表'[ISO年份] = 当前ISO年 - 1,
    '日期表'[ISO周数] = 当前ISO周,
    '日期表'[周内天数] <= 当前周内天
)

3. WTD同比差值

直接计算当期与去年同期的差值:

WTD同比差值 = [当期WTD] - [去年同期WTD]

关键注意事项

  • 务必将日期表标记为日期表:右键日期表 → 标记为日期表,确保时间智能函数正常生效。
  • 周起始规则统一:所有涉及周的计算需使用相同的起始日(如全用周一或全用周日),避免上下文冲突。
  • 上下文过滤:在报表中使用日期表的日期/周字段进行切片或筛选,不要直接使用业务表的日期列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:40