PowerBI 中计算周环比的技巧

2021-04-16 14:38:04 浏览数 (1)

在 Power BI 中常常遇到与周计算有关的问题。我们将按照不同场景分拆来进行介绍,给出最佳实践。

年季月周日

在业务中,由于管理和运营的周期不同,大部分情况会涉及到:年,季,月,周,日。

其中,周 是一个比较特殊的周期。

年是最大的范围,没有问题。

季度一年固定出现 4 个,也没有问题。

月度一年固定出现 12 个,也没有问题。

日期则按照自然顺序排列,也没有问题。

周,不管在月,季,年的范围来看,都是一种不固定的周期,例如:

1、不同的月,周的规律不同

2、不同的年,周的规律也不同

然后,很多业务都是以周作为周期来进行的,因为人们日常周一到周五上班,周六和周日休息。周其实是人们生活的规律。

所以,必须要来处理周的问题。

Power BI DAX 对周的支持

Power BI DAX 对周的内置支持是:无。

DAX 的时间智能函数固然强大而且方便,但却没有提供对于周粒度的内置支持,可见:周问题并无统一规律。

对与周相关计算有过探索的伙伴很快就可以发现:

用 -7 DAY 这个方法,并不能处理周的问题。因为,在很多场景,我们要的是一个整个周。例如:我们想知道上周整体的量,和上上周整体的量的对比。

移动日期和获取整个区间,是完全不同的。

年周序号

为了获得一个整周,大家会在日期表里增加一个周序号字段,用 DAX 实现,如下:

代码语言:javascript复制
ADDCOLUMNS(
    date_table_base , 
    "WeekNumerInYear" , WEEKNUM( [Date] , 2 ) 
)

则有:

代码语言:javascript复制
本周序号 = MAX( Calendar[WeekNumerInYear] )
上周序号 = 本周序号 - 1

那么,这样就可以计算本周的量和上周的量,进而计算环比了。

然而,很快就会意识到一个错误:在跨年的时候是不能正确计算的。恍然了解,没有错。但思路立马就有了:

  • 如果是第 1 周,则上周用去年的最后 1 周。
  • 否则正常按上述方式计算。

很可惜,很快又会发现问题:

  • 去年最后 1 周,并不是 1 个完全周

彻底崩溃,即使处理这个问题,也会导致逻辑很复杂。

没有错。这是一个分水岭。

有人想:这么复杂,只是想算一个周环比而已。算了,找 IT 吧。

不难发现:复杂的不是工具,而是业务本身,要做这样的业务计算,就存在这样的业务逻辑。

全局周与全局月

回顾这个问题的难点,我们是因为惯性思维:

  • 年内的计算是正确的
  • 发现跨年是错误的
  • 由于思维惯性想到:
    • 如果年内则按规则算
    • 如果跨年则单独解决这个特殊点

这是很常规的思维特点,也是很好的,一般思路和特殊点的处理,但创新的思维也常常是受限于无法克服思维惯性。

这里给出全局周的概念,从历史开始,逐个累计,那么就不存在跨年的问题了。用 DAX 实现如下:

代码语言:javascript复制
    ADDCOLUMNS(
        date_table_base , 
        "WeekNumerInYear" , WEEKNUM( [Date] , 2 ) ,
        "WeekNumberGlobal" , 
            DATEDIFF( 
                MINX( FILTER( date_table_base , [DayNumberInWeek] = 1 ) , [Date] ) , 
                [Date] - 1 , 
                WEEK 
            )
    )

习惯用模板的伙伴就不要问为什么了,直接用吧;有好奇非要看懂逻辑的,那自己看吧。

结果是:

相信你已经可以猜出全局周的威力了。那么计算周环比就很简单了,不再展开。留给读者自己实现。

总结

本文表面给出了周环比的计算技巧,实际上提出了全局周期的通用计算定式。同时,指出了创新的思维来自克服思维惯性,并示范了思维惯性的表现。

关于时间维度计算,我们将在 2021-04-15 微软社区上演精彩的演说,请记住:复杂的不是工具,复杂的是业务本身;要配得上简单,就得穿越复杂。但不要紧,我们将和大家一起穿越这些复杂,为大家带来各种定式,模式,套路。不论是想偷用模板,还是想好奇研究,都是上佳的,不容错过。

只对当时参与的伙伴提供案例资源,后续索要,不再回复,请理解你没时间就没机会的复杂逻辑来自业务本身如此。

立刻报名:(报名截至 2021-04-14 23点)

PowerBI 技术讲座系列 - BI佐罗专场 - 时间智能分析

你可能还想知道:

超级福利中国版PowerBI高级个人版现已开通,从零免费无限试用法泄露

PowerBI 实现客户同期群分析及可视化

全网首发 Power BI 零售通用系统化解决方案大型模板

BI真经 - 让数据真正成为你的力量

DAX 设计模式(第二版)中文在线学习正式开放

0 人点赞