换个思路丨环比断点
2019年的年末,白茶曾经写过一期《TOPN函数丨环比断点》的文章,主要是利用TOPN函数来解决实际销售挂蛋(“当日无数据”)的情况。
然而,随着对DAX函数的深入了解,白茶发现还有其他的解决思路!
这是白茶之前使用的案例数据。
这是之前,白茶利用TOPN函数计算的结果图。
(示例文件会放到知识星球中,小伙伴们可以搜索“PowerBI丨需求圈”,文章结尾处会有二维码。)
先来看看之前的代码:
TOPN日环比 =
IF (
HASONEFILTER ( '示例'[时间] ),
VAR BCMAX =
MAX ( '示例'[时间] )
VAR TP =
TOPN ( 1, FILTER ( ALL ( '示例'[时间] ), '示例'[时间] < BCMAX ), '示例'[时间], DESC )
VAR LS =
CALCULATE ( '示例'[销售], '示例'[时间] = TP )
RETURN
IF ( LS <> BLANK (), DIVIDE ( '示例'[销售] - LS, LS ), BLANK () )
)
这段代码主要是利用TOPN函数,忽略事实表日期断档的问题,通过迭代整个表对数据进行逐行的筛选,从而达到断档环比的效果。
虽然解决了断档的问题,但是代码显得臃肿,不利于理解整体的代码结构。
那么换个思路如何进行呢?
LASTNONBLANK函数
LASTNONBLANKVALUE函数
关于这两个函数的基础参考,白茶已经写过文章了,这里就不赘述了。
主要谈谈思路:
首先是这两个函数是根据计算表达式,来获取有数据所对应的第一参数,仔细思考一下,这不和TOPN函数有异曲同工的地方么?
其次,这两个函数,相对于TOPN函数在编写代码的时候能够更优化一些。
代码1:
LASTNONBLANK日环比 =
VAR BCMAX =
MAX ( '示例'[时间] )
VAR TI =
LASTNONBLANK ( FILTER ( ALL ( '示例'[时间] ), '示例'[时间] < BCMAX ), '示例'[销售] )
VAR LS =
CALCULATE ( '示例'[销售], TI )
RETURN
DIVIDE ( '示例'[销售] - LS, LS )
代码2:
LASTNONBLANKVALUE日环比 =
VAR BCMAX =
MAX ( '示例'[时间] )
VAR TI =
LASTNONBLANKVALUE (
FILTER ( ALL ( '示例'[时间] ), '示例'[时间] < BCMAX ),
SUM ( '示例'[销售金额] )
)
RETURN
DIVIDE ( TI - '示例'[销售], TI )
结果:
从结果上看,三者的结果是没有任何区别的,但是后两者的优化度高一些。
解释一下代码含义:
BCMAX是为了将最大日期定义为常量,与当前上下文进行对比排序使用。
TI的话这里是有区别的:
LASTNONBLANK是为了获取小于最大日期的上一行“表”数据,求的是上一行销售数据的具体日期;后续需要利用CALCULATE函数进行对应数据的计算。
而LASTNONBLANKVALUE是直接获取小于最大日期的上一行日期的具体数据值,也就是省略了后续的CALCULATE函数计算这一部分。
输出结果都是通过DIVIDE函数进行计算的。
三个函数在这里可以达到同样的结果,但是各有各的用处。
TOPN可以返回具体的几行;
LASTNONBLANK可以求得最后的非空日期;
LASTNONBLANKVALUE函数可以直接求得最后非空的数据。
三个函数各有优劣,也是各有用途。
小伙伴们,GET了么?
白茶会不定期的分享一些函数卡片哦。
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。
下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。
(这个星球里面有白茶之前所有的案例文件。)
数据分析进阶之路,带你深入了解可视化技巧。