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

如何在Power BI中基于变动起始日期按周日-周六规则计算活动周数?

问题描述

我的Power BI报表中有如下表格:

DateOfferOffer_startOffer_endOffer_day
15/03/24A15/03/2417/03/241
16/03/24A15/03/2417/03/242
17/03/24A15/03/2417/03/243
18/03/24B18/03/2420/03/241
31/12/24C31/12/2410/01/251
01/01/25C31/12/2410/01/252

其中Offer_day是计算列,公式为:

Offer_day = DATEDIFF(mytable[Offer_start], mytable[Date], DAY) + 1

需要新增Offer_week列,按周日至周六的周定义标记每个日期对应的活动周数,规则如下:

  • 同一活动内,周日开启新的周周期,周数递增1
  • 新活动启动时,周数重置为1
  • 支持跨年度的活动场景

期望结果如下:

DateOfferOffer_startOffer_endOffer_dayOffer_week
15/03/24A15/03/2417/03/2411
16/03/24A15/03/2417/03/2421
17/03/24A15/03/2417/03/2432
18/03/24B18/03/2420/03/2411
31/12/24C31/12/2410/01/2511
01/01/25C31/12/2410/01/2521
解决方案

在Power BI中创建计算列,使用以下DAX公式即可实现需求:

Offer_week = 
VAR OfferStartWeekStart = 
    // 计算活动起始日期所在周的周日(周定义:周日至周六)
    DATEADD(
        mytable[Offer_start],
        -WEEKDAY(mytable[Offer_start], 1) + 1,
        DAY
    )
VAR CurrentDateWeekStart = 
    // 计算当前日期所在周的周日
    DATEADD(
        mytable[Date],
        -WEEKDAY(mytable[Date], 1) + 1,
        DAY
    )
RETURN
    // 计算两个周起始日的周数差,加1得到当前活动周数
    DATEDIFF(OfferStartWeekStart, CurrentDateWeekStart, WEEK) + 1

公式逻辑说明

  1. WEEKDAY函数参数:WEEKDAY(日期, 1)返回1(周日)到7(周六),通过DATEADD可以将任意日期调整到其所在周的周日(周起始日)。
  2. 基准周起始日:OfferStartWeekStart定位到活动开始日期对应的周起始日,作为周数计算的基准点。
  3. 当前周起始日:CurrentDateWeekStart定位到当前日期对应的周起始日。
  4. 周数计算:用DATEDIFF计算两个周起始日之间的周数差,加1后得到当前的活动周数——同一活动的起始日和当前日期若在同一周,差值为0,结果为1;跨越N个周起始日,结果为N+1,完全符合需求。

场景验证

  • 活动A的17/03/24:活动起始日15/03/24的周起始日是10/03/24,当前日期17/03/24的周起始日是17/03/24,周数差为1,加1后得到2,与期望结果一致。
  • 活动C的01/01/25:活动起始日31/12/24的周起始日是29/12/24,当前日期01/01/25的周起始日也是29/12/24,周数差为0,加1后得到1,跨年度场景正常生效。
  • 活动B的18/03/24:起始日与当前日期同属一个周,周数为1,符合规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:28:20