Power BI中这么计算同期对比,我被业务怼了!
Hello,小伙伴们大家好啊!今天给大家分享的是Power BI在实际业务场景中的一个应用。需求是非常简单的,业务需要按照月份计算出今年每个月的业绩与去年的每个月的业绩对比,也就是我们常说的同比(YOY)。稍微有些DAX基础的小伙伴可能会说,这个需求太简单了,用时间智能函数简直轻松加愉快地就能解决,于是,立马在脑子里面想到几个能够实现的时间智能函数,于是有了下面的表达式和下面的计算结果。计算完全没有问题,但是,如果你把这样的数据给到业务去看的时候,大概率会被怼。Why?现在我们假设一个场景,今天是9月20日,很明显2021年的9月份的数据应该是9月1-20日的数据合计,但是,我们可以看到去年同期2这个字段里面显示的结果是6263,也就是说这里计算的是去年9月份完整月份的数据(9月1-9月30),问题就在这如果我是9月2号,那么我用9月1-2号的数据和去年9月完整月份的数据进行对比是毫无业务意义的。
去年同期 = CALCULATE([销售额_],DATEADD('Dim Date'[Date],-1,YEAR))
被业务怒怼之后,发现确实是这个道理。发现了问题,基本上问题被解决了一半。接下来我们就得想想办法如何解决这个问题,其实也很简单,我们只需要在日期表里面新建一列做个判断,获取当前有销售额的最大日期,然后根据这个日期判断下如果日期表的日期小于等于这个日期则返回Y,否则返回N,也就是规避了我们日期偏移的时候是整个月的偏移。我们直接上DAX表达式看看,以下代码仅供参考。
DateWithSales =
VAR MaxBusinessDay = MAX('Fact Sales'[销售日期])
RETURN
IF(MaxBusinessDay>='Dim Date'[Date],'Y','N')
去年同期 =
CALCULATE (
[销售额_],
CALCULATETABLE (
DATEADD ( 'Dim Date'[Date], -1, YEAR ),
'Dim Date'[DateWithSales] = 'Y'//做了筛选
)
)
最终我们将调整后的表达式拖入到表格里面来看下。我们调整后的去年同期度量值显示去年9月份的数据是4400,这个4400实际上代表的是去年9月份1-20号的数据合计,这样我们就能够规避上文业务怼我们的问题了。还是那句话,DAX计算没有错误之分,只有是否符合业务需求之别,很多用法书上给出的和实际业务需求不一致,需要我们多点想象力。好了,最后给大家留一个思考题,2021年的10-12月份销售额部分没有数据显示为空,强迫症的业务同事要求你把没有数据(或者说是未来还没产生业务数据)的月份不显示,这个需求该如何实现呢?欢迎小伙伴们给小编留言,下期我再和大家分享我的做法!