如何在Power BI中基于变动起始日期按周日-周六规则计算活动周数?
问题描述
我的Power BI报表中有如下表格:
| Date | Offer | Offer_start | Offer_end | Offer_day |
|---|---|---|---|---|
| 15/03/24 | A | 15/03/24 | 17/03/24 | 1 |
| 16/03/24 | A | 15/03/24 | 17/03/24 | 2 |
| 17/03/24 | A | 15/03/24 | 17/03/24 | 3 |
| 18/03/24 | B | 18/03/24 | 20/03/24 | 1 |
| 31/12/24 | C | 31/12/24 | 10/01/25 | 1 |
| 01/01/25 | C | 31/12/24 | 10/01/25 | 2 |
其中Offer_day是计算列,公式为:
Offer_day = DATEDIFF(mytable[Offer_start], mytable[Date], DAY) + 1
需要新增Offer_week列,按周日至周六的周定义标记每个日期对应的活动周数,规则如下:
- 同一活动内,周日开启新的周周期,周数递增1
- 新活动启动时,周数重置为1
- 支持跨年度的活动场景
期望结果如下:
| Date | Offer | Offer_start | Offer_end | Offer_day | Offer_week |
|---|---|---|---|---|---|
| 15/03/24 | A | 15/03/24 | 17/03/24 | 1 | 1 |
| 16/03/24 | A | 15/03/24 | 17/03/24 | 2 | 1 |
| 17/03/24 | A | 15/03/24 | 17/03/24 | 3 | 2 |
| 18/03/24 | B | 18/03/24 | 20/03/24 | 1 | 1 |
| 31/12/24 | C | 31/12/24 | 10/01/25 | 1 | 1 |
| 01/01/25 | C | 31/12/24 | 10/01/25 | 2 | 1 |
解决方案
在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
公式逻辑说明
- WEEKDAY函数参数:
WEEKDAY(日期, 1)返回1(周日)到7(周六),通过DATEADD可以将任意日期调整到其所在周的周日(周起始日)。 - 基准周起始日:
OfferStartWeekStart定位到活动开始日期对应的周起始日,作为周数计算的基准点。 - 当前周起始日:
CurrentDateWeekStart定位到当前日期对应的周起始日。 - 周数计算:用
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
相关产品推荐
相关产品推荐

