PowerBI是按照字段进行分析的,所以计算列与列之间的差异很简单,但有时也会有计算行之间差异的需求,这种在Excel中也很简单,但是用PowerBI就有点麻烦,不过也不是不能计算,这篇文章就介绍几种方法。
以下面这个数据为例,如何计算每一行的订单金额与上一行订单金额的差异呢?
由于要计算行之间的差异,需要确定行的位置,所以先添加一列索引是必要的。
关于添加索引的各种方式,可参考:PowerQuery添加索引,这几种情况你应该知道怎么做
下面通过M和DAX,分别来看看如何实现这个需求。
M函数法
在PowerQuery中添加自定义列:
与上一行的金额差异=
[订单金额]-
List.Sum(
Table.SelectRows(
已添加索引,
(x)=>x[索引]=[索引]-1
)[订单金额]
)
结果如下:
对于第一行,由于没有上一行的数据,返回空值,下面做法也同样按照这个逻辑。
DAX计算列法
与上一行差异 =
VAR X=[索引]
VAR Y=
CALCULATE(
SUM('订单表'[订单金额]),
FILTER('订单表','订单表'[索引]=X-1)
)
RETURN IF(Y<>BLANK(),[订单金额]-Y)
上面DAX的计算思路与M函数一样,只是这里需要添加个判断条件让第一行返回空值。
DAX度量值法
度量值同样可以按照计算列的思路来实现,不过这里换个方式,利用窗口函数会更加简单。
与上一行的差异 度量值 =
VAR lastorder=
CALCULATE(
SUM('订单表'[订单金额]),
OFFSET(-1,ALLSELECTED('订单表'),ORDERBY('订单表'[索引]))
)
RETURN IF(lastorder<>BLANK(),SUM('订单表'[订单金额])-lastorder)
关于窗口函数的用法可参考:Power BI本月正式推出的DAX新函数:OFFSET、INDEX、WINDOW
以上几种方式,重点都是如何计算出上一行的数据,然后相减即可,理解了计算逻辑,你也可以灵活地进行上一行、下一行、或者各种有规律的行之间的偏移计算了。
PowerBI星球的最新版内容合辑,值得你收藏学习:
PowerBI星球
.