2.18 PowerBI数据建模-周环比

加入 PowerBI自己学 知识星球:下载源文件,边学边练;遇到问题,提问交流,有问必答。

社会越来越卷,节奏越来越快,很多销售团队会以周作为销售追踪的周期,每周开周会都要看过来这一周对比上周的销量增长情况,需要在报告中给出个周环比增长率。问题是在PowerBI中计算上周销量的时候,发现平时使用的时间智能函数DATEADD,只支持按年/季/月/日平移时间段,没有周这个选项。该如何写周环比这个度量值呢?

解决方案  

只要给日期表中的周做个从小到大的排序,取上周就是取当周对应的序号减1,就这么简单。这个周排序,第一章的《复制粘贴PowerQuery代码,生成多功能日期表》,已经一步到位生成了,按跨年和不跨年有Week_Offset和YearWeek_Offset两列。如果不想切换日期表,也可以通过DAX快速生成两列周排序。

操作步骤

STEP 1 日期表中要具备这些列:年、周序号(周在年内的序号)、每周第一天的日期、周几(用来辅助检查)。通过DAX生成这些计算列如下:

年:

Year = YEAR([Date])

周序号(周在年内的序号):

WeekOfYear = WEEKNUM([Date],2)

周几:

DayOfWeek = WEEKDAY([Date],2)

每周第一天的日期(以周一为例):

StartOfWeek = [Date]-WEEKDAY([Date],2)+1

其中,WEEKNUM函数和WEEKDAY函数的第二个参数,可以切换每周第一天是周几,2代表周一,1代表周日;每周第一天的日期是用当前日期减去周几与周一的间隔得到的。

STEP 2使用RANK函数新增年周序号和周序号。

年周序号:

YearWeek_Order =

RANK(

    DENSE,

    ALL(Dim_Date[Year],Dim_Date[WeekOfYear]),

    ORDERBY([Year],ASC,[WeekOfYear],ASC)

)

周序号:

Week_Order =

RANK(

    DENSE,

    ALL(Dim_Date[StartOfWeek]),

    ORDERBY([StartOfWeek],ASC)

)

STEP 3 基于年周序号/周序号书写上周销量和周环比的度量值。

销量:

Sales = SUM(Fact_Sales[数量])

上周销量(不跨年):

Sales_LastYearWeek =

CALCULATE([Sales], FILTER(ALL(Dim_Date), [YearWeek_Order]=MAX(Dim_Date[YearWeek_Order])-1))

周环比增长率(不跨年):

WoW Gr%_YearWeek = DIVIDE([Sales]-[Sales_LastYearWeek],[Sales_LastYearWeek])

上周销量(跨年):

Sales_LastWeek =

CALCULATE([Sales], FILTER(ALL(Dim_Date), [Week_Order]=MAX(Dim_Date[Week_Order])-1))

周环比增长率(跨年):

WoW Gr%_Week = DIVIDE([Sales]-[Sales_LastWeek],[Sales_LastWeek])

拓展

这种方法在物理表中新建了辅助列,回归到环比修改上下文到上一个的本质,清除日期表的筛选,然后平移日期时间段,易于理解,操作也不难。窗口函数也可以很便捷地实现环比计算,后续介绍窗口函数时会做讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值