PowerBI Rankx用法实践
本周在PowerBI学习群遇到一个关于排名的问题,用了很久时间去思考,结果还是没完成。后面看到其他人写的公式用法。故学习记录一下。
问题描述
模拟的数据如下,公司在不同的时期有不同的消费。要获取在当前筛选时期下的排名以及当前时期上一个时期的排名。
结果应该是下图
当我选择第四期,显示第四期排名和第三期排名。
实现过程
Powerbi排名函数使用的Rankx
,具体用法如下:
PowerBI 中的 RANKX 函数是一个迭代函数,用于计算某列数据在分组内的排名。它的基本语法如下:
1 | RANKX( |
各参数的含义:
<表>:要计算排名的表或表达式
<表达式>:要计算排名的列
<值>:指定用于排名的值
<排序方式>:排序方式,可选desc降序或asc升序,默认为asc
<排序上下文>:指定分组依据,可使用ALLSELECTED()表示无分组
错误方式
实现思路为获取当前的期数,然后构造一个当前期数-1的table用于rankx运算。在rankx里面,第一个参数放的filtertable, 第二个参数计算当前上下文金额的总和。 这个也是问了各个AI工具之后都建议的用法。实际产生的结果却是不符合预期。
1 | 环比-2 = |
正确方式
这里获取期数的方式是一样的,唯一调整的是 rankx
函数的第一个参数调整为all(Demo[company])
,将筛选条件放到后面计算cost的函数里面去。
1 | 环比-demon = |
放一张两个DAX运行差异结果。可以看到第三期A1本来是第六名,在错误的方式里面却是第一名。
差异反思
在使用rankx
的时候应该要注意第一个参数,一般是要排名的维度,当我们要做一些分组排名时,可能要使用all
,allexcept
去做一些资料筛选去重。当我们放入了filtertable时,此时的数据变得复杂了,进而导致最终的结果与预期不一致。有人说这个会将他们上一期的cost拿到这一期来进行排名。但是实际结果看起来也不像。
对于DAX上下文的理解一直是学习Powerbi中的弱势,学会了就是实现各种复杂功能的利器,不然就要靠前期的数据调整来避免这种问题。后面要多实践这种逻辑。
如果你也有遇到类似的问题,欢迎留言关注。