• 数据可视化之DAX篇(二十二)一文搞懂Power BI中的排名问题


    https://zhuanlan.zhihu.com/p/68384001

    本文聊聊在PowerBI中如何进行各种类型的排名问题。

     

    PowerBI中计算排名主要使用RANKX函数,关于该函数的具体语法,不再细说,可以查看该函数的官方文档,也可以参照这个函数卡片:

     

    ↑ 知识星球每日函数卡片

     

    下面通过几个示例来看看它的用法。

     


    假设数据模型为一个订单表,以及对应的产品维度表和客户维度表,产品维度表有产品名称和产品类别。

    下面分别按销售额对各种维度进行排名。

     

    销售额 = sum('订单'[销售额])

     

     

     

    对全部产品按销售额排序

     

    首先写一个RANKX的最经典、最常用的代码,

     

    排名 = RANKX(ALL('产品'),[销售额])

     

     

    这样各产品的排名计算出来了,不过总计行的排名没有什么意义,可以加个判断条件不显示总计,

    排名 = 
    IF(HASONEVALUE('产品'[产品名称]),
    RANKX(ALL('产品'),[销售额]))

     

    以后遇到这种情况直接用IF+HASONEVALUE进行判断就行了,本文后面的度量值都不再考虑总计问题,并且直接不再显示总计。

    上面的这个排名其实是绝对排名,无论选择几个产品,每个产品的排名是固定的。

     

    按照所选的产品范围来排序,就是相对排名,可以结合ALLSELECT函数来实现,

    整体相对排名 = 
    RANKX(ALLSELECTED('产品'),[销售额])

     

    这个是整体相对排名,那么第一个排名也改为整体绝对排名,效果如下,

     

     

     

    在类别内对各产品排名

    如果再把产品类别加进来,并让各产品在各自的类别内进行排名,同样也分为类别内绝对排名和类别内相对排名,

     

    类别中 产品绝对排名 = 
    RANKX(ALL('产品'[产品名称]),[销售额])

     

    类别中 产品相对排名 = 
    RANKX(ALLSELECTED('产品'[产品名称]),[销售额])

     

     

     

    按子类别排名

     

    如果想知道每个类别整体的销售情况排名,那么就需要计算出每个类别的整体销售额,度量值可以这样写,

    按类别绝对排名 = 
    RANKX(
    ALL('产品'[产品类别]),
    CALCULATE(
    [销售额],
    ALLEXCEPT('产品','产品'[产品类别])
    )
    )

    同理,有了上面的经验,相对排名,把ALL替换成ALLSELECT即可,

    按类别相对排名 = 
    RANKX(
    ALLSELECTED('产品'[产品类别]),
    CALCULATE(
    [销售额],
    ALLEXCEPT('产品','产品'[产品类别])
    )
    )

    排名效果如下,

     

    按两个维度进行排名

    上面是对各产品的销售额进行排名,如果增加一个维度,比如按产品在每个城市的销售额进行排名,

     

    实际上是按照前两列的笛卡尔积进行排名,度量值可以这样写,

     

    产品 城市 综合排名 = 
    RANKX(
    CROSSJOIN(
    ALL('产品'[产品名称]),
    ALL('客户'[客户城市])
    ),
    [销售额]
    )

     

    总结

     

    通过上面几个例子,除了可以计算排名,更可以帮助你更深入的理解RANKX的用法:

    • 对哪个维度进行排名,就构建一个对应的维度表,作为RANKX的第一个参数,动态就用ALLSELECTED;
    • 按什么排名,就写对应的表达式,作为RANKX的第二个参数。

    RANKX还有三个可选参数,其中第四个和第五个都很容易理解,而第三个参数相对难理解一点,不过并不常用,无须刻意去深入,遇到了问题可以随时和我沟通。

    以上几个示例基本涵盖了我们日常使用的大部分排名问题,可以通过观察输出的结果来理解度量值的写法。

  • 相关阅读:
    javascript对象Math和正则对象
    javascript的Date对象
    初识Python与条件判断
    数据降维_矩阵分析笔记
    数据可视化实战:如何给陈奕迅的歌曲做词云展示?
    数据采集实战:如何自动化运营微博?
    MySQL与Python交互
    27_MySQL数字函数(重点)
    26_ mysql数据操作语言:DELETE语句
    25_MySQL 数据操作语言:UPDATE语句
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12821259.html
Copyright © 2020-2023  润新知