对于许多业务场景,尤其是零售、电商和快消行业,周是个重要的分析粒度。然而,长期以来,Power BI 用户在进行周粒度分析时都面临一个痛点:官方强大的时间智能函数,其原生支持的最小粒度只到年、季、月、日,唯独缺少了“周”。
以往,为了实现周同比、周环比等常见分析,我们不得不依赖一套相对复杂的 DAX 逻辑,例如通过计算周数和年份来构建筛选上下文,对于初学者来说不太友好,参考:学会了这个思路,你也可以轻松进行周分析!
但现在,这个痛点将成为历史!在9月更新中,Power BI 推出了一个重磅功能:增强 DAX 时间智能。终于将“周”纳入了官方时间智能函数的版图。
本文带你了解如何利用这一新功能,彻底改变你的周分析体验。
现在依然需要先在日期表中建立周相关的字段,比如周编号、年度周数、星期几等,你可以根据实际的业务逻辑需求来构造周的字段。
然后右键日期表,选择“日历选项”或选择表工具后在“表工具”功能区中的“日历选项”:
在弹出的窗口中我们先定义一个周日历:
有了这个日历以后,和周相关的时间智能函数就都可以用了。
本周至今
有专门的时间智能函数TOTALWTD来计算本周至今,它的第一参数用上面定义的周日历,下同。
本周至今 =TOTALWTD([销售额],‘周日历’)
计算本周至今还可以用DATESWTD函数:
本周至今=
CALCULATE([销售额],DATESWTD(‘周日历’))
上周同期
DATEADD函数的第三参数,也多了一个week的粒度。
上周同期 =
CALCULATE( [销售额], DATEADD(‘周日历’,-1,WEEK))
本周至今的上周同期
以上两个度量值进行嵌套,就可以实现本周至今的上周同期计算。
本周至今 上周同期 =
CALCULATE([本周至今],DATEADD(‘周日历’,-1,WEEK))
上周总计
上周的总计有专门的时间智能函数PREVIOUSWEEK。
上周总计 =CALCULATE([销售额],PREVIOUSWEEK(‘周日历’))
对于下周总计,同样有NEXTWEEK函数。
除了上面这几个常用的周函数,还有下面这几个:
STARTOFWEEK:返回当前周的第一天:
销售额 本周第一天 =
CALCULATE([销售额],STARTOFWEEK(‘周日历’))
ENDOFWEEK:返回当前周的最后一天
销售额 本周最后一天 =
CALCULATE([销售额],ENDOFWEEK(‘周日历’))
OPENINGBALANCEWEEK:返回当前周初数据
销售额 周初 =
OPENINGBALANCEWEEK([销售额],’周日历’)
CLOSINGBALANCEWEEK:返回当前周末数据(本周最后一天)
销售额 周末 =
CLOSINGBALANCEWEEK([销售额],’周日历’)
请注意,以上关于周的时间智能函数,都需要基于增强时间智能的定义的日历,不能用正常的日期表。
相比传统方法,增强时间智能功能具有以下优势:
-
代码简洁:原生函数大幅减少DAX代码量
-
逻辑清晰:函数命名直观,易于理解
PowerBI增强时间智能功能的推出,终于填补了周粒度分析的空白。通过这些新函数,我们可以轻松实现各类周分析需求,大幅提升分析效率和模型可维护性。
建议所有需要进行周分析的需求尽快尝试这些新功能,体验原生周分析带来的便利。对于更复杂的时间分析场景,如财年、自定义周等,也可以基于这些函数构建灵活的解决方案。
