排名问题新解法:探索可视化计算中的 RANK 函数

共 4800字,需浏览 10分钟

 ·

2024-04-19 16:46

上次我们介绍了可视化计算替代 DAX 计算的一些场景。
参考:PowerBI 进阶:可视化计算替代 DAX 场景探索
今天我们介绍一个新的场景,这是一个困扰许多人的问题,排名问题。在 DAX 中,很多新手小白对于上下文概念还不太理解,但在处理排名问题时又要求你必须理解一些上下文,比如常见的绝对排名和相对排名,按照某一层级求排名,先根据销售额排名再根据地区排名,如何在根据某一层级求出排名之后再根据上一层级求排名,如何多维度多指标求排名等等等等。
排名问题是 DAX 计算的经典问题,用 DAX 计算需要理解上下文概念,那我们用可视化计算就可以避开这些上下文理解,从而更好地理解和处理排名问题。
可视化计算中的排名函数是 RANK 函数,它一共有七个参数。

每个参数的定义及解释如下。

函数的理解也非常简单,首先是并列参数,当有相同值出现时,会出现相同的排名,此时如果选择 SKIP,排名是 1 2 2 4 的情况;如果选择的是 DENSE,排名就是 1 2 2 3 的情况。SKIP 是跳跃排序,DENSE 是连续排序。关系在可视化计算中一般为轴,不用去理解。接下来就是排序,选择根据什么度量值进行排序和排序方式。空白一般用不到,就下来是分区,根据哪一维度进行分区,就是求另一维度在当前维度中的排名。
这里的 RANK 函数更类似于 SQL 中的 RANK,也更容易被大家所理解。
我们从最简单的开始,只按照度量值进行排序,新建计算之后输入以下语句。
   
度量值排名 = FORMAT ( RANK ( SKIP, ROWS, ORDERBY ( [Sales], DESC ) ), "0" )
这里就只是对单个度量值 Sales 进行排序,不考虑分区和上下文,可以看做是产品子类别的绝对排名。

如果启用行小计,还能看到每个产品类别的排名。相当于求出了每个维度根据销售额排序的绝对排名。

如果想求子类别在类别内的相对排名,只需要加一个 PARTITIONBY 参数进行分区即可。
   
子类别相对排名 = FORMAT (    RANK ( SKIP, ROWS, ORDERBY ( [Sales], DESC ),, PARTITIONBY ( [产品类别] ) ) ,    "0")
每个产品子类别在其产品类别中的相对排名。

相比于 DAX 计算中的 RANKX 函数,可视化计算中的 RANK 函数更容易理解,绝对排名就不加分区参数,相对排名就加一个分区参数。相对于什么进行排名,分区参数中就用哪一个字段。也可以将两者相结合,比如在求出子类别相对排名的同时求出类别的排名。
   
类别和子类别相对排名 = FORMAT (    IF (        ISINSCOPE ( [产品子类别] ),        RANK ( SKIP, ROWS, ORDERBY ( [Sales], DESC ),, PARTITIONBY ( [产品类别] ) ),        RANK ( SKIP, ROWS, ORDERBY ( [Sales], DESC ) )    ),    "0")
上方表达式用了一个逻辑判断,如果当前列在产品子类别级别的层次结构时,返回类别中产品子类别相对排名,否则返回度量值排名。此时的排名计算既有产品子类别在类别内的相对排名,又有每个类别的排名。

并且排序方式更灵活,可以直接在 ORDERBY 中添加多种排序方式。比如先按照销售额进行逆序排序,再根据产品子类别进行顺序排序,只需要在 ORDERBY 参数中添加排序方式即可,非常方便。
   
子类别相对排名 =FORMAT (    RANK (        SKIP,        ROWS,        ORDERBY ( [Sales], DESC, [产品子类别], ASC ),,        PARTITIONBY ( [产品类别] )    ),    "0")
分区参数也支持多个字段。
   
产品名称排名 =FORMAT (    RANK (        SKIP,        ROWS,        ORDERBY ( [Sales], DESC ),,        PARTITIONBY ( [产品类别], [产品子类别] ) ),    "0")
再添加一个维度产品名称,这时按照产品类别和产品子类别进行分区,求出的排名是产品名称在当前产品类别和产品子类别中的排名。

还可以按轴排名。
   
按轴排名 =FORMAT ( RANK (, ROWS ), "0" )
相当于按照轴进行默认排序,这里相当于按照产品类别和产品子类别进行排序求出排名。

关于可视化计算排名的问题,相信上面的介绍已经能解决大家工作中常见的排名问题了。绝对排名不加分区,使用单度量值排名,相对排名或者在一个字段中求另一个字段的排名就要用分区参数,也可以将两者结合求出产品子类别在产品类别中的排名和产品类别排名。
还可以进行多排序方式,多分区进行一些高级的排名计算,并且相比于 DAX 计算,可视化计算更加简单,更容易被理解。大家赶快去自己的 Power BI 中试一下吧。

我们为你整理了一个 Power BI 小小学习素材包,可以点击下方按钮购买体验。
数据分析精英都在学习的五大能力境界

分析师必备:业务数据分析能力五层成熟度路线图框架全解


↓ 数据分析精英正在学习的课程 ↓

他们是:企业老板,高管,CFO,分析...
可以体验百万级真实企业项目案例,彻底打通任督二脉


数据分析师训练营 课程表


时间:2024年05月 班
主题:《业财分析之道》终极业财融合,分析师必备。[私信报名咨询]

数据分析 | Power BI | Tableau | FineBI
企业咨询 | 企业培训 | 个人学习 | 职业规划
咨询老师,验证码:data2024

带你彻底解锁数据分析的力量
点击“阅读原文”获取更多资源

浏览 739
8点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
8点赞
评论
收藏
分享

手机扫一扫分享

分享
举报