小伙伴们,大家好~前天学习交流群中有小伙伴问RANKX排名函数的用法,正好小编之前有做过非常详细的整理和总结,今天将小编总结的内容与大家进行分享,这篇文章对您有帮助的话,还请帮忙转发或分享,感恩的心~
RANKX函数是计算排名的专用函数,根据你的计算逻辑,返回当前成员在整个列表中的排名,是一个典型的迭代函数,计算过程值得着重理解。
RANKX(<table>, <expression>, [ <value> ], [ <order> ], [ <ties> ])
参数1:表或者返回表的表表达式
参数2:基于参数1表计算的表达式
参数3:可选,需要返回排名的DAX表达式,如果这个值省略则默认是参数2的表达式
参数4:排名的依据,0或者False代表降序;1或者True代表升序
参数5:处理相同排名时的依据,skip代表稀疏排名,下一个排名等于之前所有排名的数量+1;dense代表稠密排名,只累加排序不考虑数量,默认是skip
_rank_0 = RANKX(ALL('产品'[子类别]),[销售总额],[销售总额])
_rank_1 = RANKX(ALL('产品'[子类别]),[销售总额])
通常我们会使用ALL或者ALLSELECTED函数,目的是为了取消外部子类别的筛选,本案例ALL返回的是一个只包含产品子类别的单列的表(ALL返回的结果是表) RANKX函数是迭代函数,参数1的里面的值都会参与迭代,每一次迭代会生成一个子类别对应销售额的值,参数1和参数2的计算生成了一张看不见的参考表,且这个参考表只包括销售额的值(也就是下图中的第1步) 第2步生成的结果(此处以复印机为例,返回的结是518117.43),这个计算结果是迭代之外的原始计算上下文,本例中就是复印机,那么返回复印机的值再到参考表中去匹配找到其位置并返回所在位置的序号,也就是我们所说的排名。
应用场景2:如何避免总计排名是1
下图中我们看到总计行排序是1,是因为步骤2计算的值是所有子类别的总销售额,它总大于单个子类比的值,因此,在总计行显示的值总是1,这并非bug或者缺陷。如何去避免这个1出现了,我们可以通过IF+HASONEVALUE的经典搭配来实现。
IF (
HASONEVALUE ( '产品'[子类别] ),
RANKX (
ALL ( '产品'[子类别] ),
[销售总额]
),
BLANK ()
)
ALLSELECTED:相对排名,根据筛选的条件再进行排名 ALL:绝对排名,依然是依照原来的排名顺序展示 两者计算无对错之分,只有根据自己实际业务需求来选择。
IF (
HASONEVALUE ( '产品'[子类别] ),
RANKX (
ALLSELECTED ( '产品'[子类别] ),
[销售总额]
),
BLANK ()
)
_rank_4 =
SWITCH (
TRUE (),
HASONEVALUE ( '产品'[子类别] ),
RANKX (
ALLSELECTED ( '产品'[子类别] ),
[销售总额]
),
HASONEVALUE ( '产品'[类别] ),
RANKX (
ALLSELECTED ( '产品'[类别] ),
[销售总额]
),
BLANK ()
)
应用场景5:按照两个不同表的维度进行排序
如下图中红色框所示,我们需要从两个不同的维度表中分别获取两个维度字段:类别和地区,用这两个字段计算的值实现排名,这个时候我们知道ALLSELECTED/ALL函数里面的参数是需要源自于1张表,因此,我们可以使用CROSSJOIN函数将两个字段进行组合,具体实现表达式如下:
_rank_5 =
IF (
HASONEVALUE ( '产品'[类别] ),
RANKX (
CROSSJOIN (
ALLSELECTED ( '产品'[类别] ),
ALLSELECTED ( '地点'[地区] )
),
[销售总额]
),
BLANK ()
)
_rank_6 =
SWITCH (
TRUE (),
HASONEVALUE ( '地点'[地区] ),
RANKX (
CROSSJOIN (
VALUES ( '产品'[类别] ),
ALLSELECTED ( '地点'[地区] )
),
[销售总额]
),
HASONEVALUE ( '产品'[类别] ),
RANKX (
ALLSELECTED ( '产品'[类别] ),
[销售总额]
),
BLANK ()
)
免费课程:Power BI免费课程更新至202405月 免费课程绝大部分都是录制视频讲解,针对典型案例进行讲解,大家可以当做是一个字典,需要时候来找一找。免费课程不系统,有些基础内容小编默认你是知道,所以没有详细讲解,需要系统学习推荐看看小编的付费系统课程。 付费课程:Power BI会员课程更新(202310) 付费课程从零基础开始讲解,上手平滑,深入浅出,结合实际案例针对性强。具体可以参考介绍,课程内容持续更新,永久学习!(付费后,小编后面开发推出的所有课程和资源免费获取,无需再付费!) 交流答疑群:本群为付费制(49/一位),仅作为学习交流Power BI/Excel/Tableau/SQL等数据分析、数据处理工具用,有问题可以描述清楚你的问题,附上案例数据求助。除此外,不讨论任何无关事情,违者立刻剔除。啊?不是吧?加群还要付费?嗯,是的,所以,加群后请谨言慎行!群里会不定期分享各类模板、学习书籍等资讯,确认以上条件都能接受再添加小编私信!