• #Powerbi 10分钟,理解 Rankx 排名函数


    一:本文思维导图及示例数据图

    1.1思维导图

    1.2  示例数据图

    二:度量值示例

    2.1 函数简介

    RANKX 首先为的每一行计值表达式,将结果临时存储为一个值列表。然后在当前筛选上下文中计值,将得到的结果与列表中的值进行比较,根据排名规则和的设置,返回最终排名。

    2.2 产品排名(稠密)度量值

    这个公式使用RANKX函数计算每个产品的销售排名。它使用稠密排名,这意味着当有相同值时,排名将紧密排列。
    - 第一个参数`ALL('销售模拟表'[产品])`是一个表,它定义了要进行排名的数据集。在这种情况下,我们使用`ALL`函数来移除任何筛选器,以便在整个`'销售模拟表'[产品]`列中计算排名。
    - 第二个参数`[产品销量]`是一个表达式,它返回每行的产品销量。RANKX函数将使用这个表达式的值来计算排名。
    - 第三个参数被省略了。这意味着RANKX函数将使用第二个参数`[产品销量]`的值作为要查找排名的值。
    - 第四个参数`DESC`指定排名的顺序。在这种情况下,我们使用降序排名。
    - 第五个参数`DENSE`定义了当有相同值时如何确定排名。在这种情况下,我们使用稠密排名。
    整个公式被包含在一个`IF`函数中,它检查是否只选择了一个产品。如果只选择了一个产品,那么公式将返回该产品的排名。否则,整个公式的结果为空。

    复制代码
    产品排名(稠密) = 
    IF (
        HASONEVALUE ( '销售模拟表'[产品] ),
        RANKX (
            ALL ( '销售模拟表'[产品] ),   ---第一参数,table,表或者返回表的表达式
            [产品销量],   ---第二参数,expression,沿着table每行计值的表达式
            ,   ---value,标量值,指单一的数值,可以是数字、数量、文本、日期或者布尔值
            DESC,   ---排序依据,
            DENSE   ---处理同排名的依据,skip,稀疏排名,sense,稠密排名
        )
    )
    复制代码

    2.3  产品排名(稀疏)(HASONEVALUE)

     同上,只是这里没有选择 TIES 参数,所以默认为SKIP参数

    复制代码
    产品排名(稀疏)(HASONEVALUE) = 
    IF (
        HASONEVALUE ( '销售模拟表'[产品] ),
        RANKX (
            ALL ( '销售模拟表'[产品] ),
            [产品销量],
            ,
            DESC
        )
    )
    复制代码

     2.4  产品排名(稀疏)(SELECTEDVALUE)

    这个公式使用RANKX函数计算每个产品的销售排名。它使用跳过排名,这意味着当有相同值时,排名将跳过相同值的数量。

    • 第一个参数ALL('销售模拟表'[产品])是一个表,它定义了要进行排名的数据集。在这种情况下,我们使用ALL函数来移除任何筛选器,以便在整个'销售模拟表'[产品]列中计算排名。
    • 第二个参数[产品销量]是一个表达式,它返回每行的产品销量。RANKX函数将使用这个表达式的值来计算排名。
    • 第三个参数被省略了。这意味着RANKX函数将使用第二个参数[产品销量]的值作为要查找排名的值。
    • 第四个参数DESC指定排名的顺序。在这种情况下,我们使用降序排名。
    • 第五个参数SKIP定义了当有相同值时如何确定排名。在这种情况下,我们使用跳过排名。

    整个公式被包含在一个IF函数中,它检查是否只选择了一个产品。如果只选择了一个产品,那么公式将返回该产品的排名。否则,整个公式的结果为空。

    与我们上面的公式不同,这个公式使用SELECTEDVALUE函数来检查是否只选择了一个产品。如果只选择了一个产品,SELECTEDVALUE函数将返回该产品的值。否则,它将返回空值。

    我们使用ISBLANK函数来检查SELECTEDVALUE函数的返回值是否为空。如果返回值为空,那么整个公式的结果也为空。否则,我们使用RANKX函数计算产品的排名。

    复制代码
    产品排名(稀疏)(SELECTEDVALUE) = 
    IF (
        ISBLANK (
            SELECTEDVALUE ( '销售模拟表'[产品] )
        ),
        BLANK (),
        RANKX (
            ALL ( '销售模拟表'[产品] ),
            [产品销量],
            ,
            DESC,
            SKIP
        )
    )
    复制代码

    2.5  可见排名

    有时我需要只统计当前可见的产品排名,那么,只需要将上方的ALL更改为ALLSELECTED即可

    复制代码
    产品排名(稀疏)_只统计可见排名 = 
    IF (
        ISBLANK (
            SELECTEDVALUE ( '销售模拟表'[产品] )
        ),
        BLANK (),
        RANKX (
            ALLSELECTED ( '销售模拟表'[产品] ),
            [产品销量],
            ,
            DESC,
            SKIP
        )
    )
    复制代码

     比如,这里,我们只选择了A,B,C,F四个产品,那么排名逻辑就会只排名现在已经被选择的产品,而前面的度量值会按所有产品进行排名。

     

    三:注意事项

    不要忘记ALL函数以及第二参数CALCULATE。

    其他注意事项,后续博主使用中如有问题,会单独开文罗列。

     

    以上,如果本文有帮到你,希望点赞支持一下。感谢!

  • 相关阅读:
    972信息检索 | 第二章 信息检索的方法和技术
    占据财富管理数字化转型高地,「双录+可回溯」齐护航!
    【贝叶斯分类4】贝叶斯网
    ORACLE Linux(OEL) - Primavera P6EPPM 安装及分享
    前端工作小结82-当前函数造成
    Spring事务问题,同一次请求中相同SQL查询结果不一致
    调试 WebSocket API 技巧分享
    vue实时显示当前年月日时分秒有时间单位的<script setup>写法
    密码学概述
    【DAY04 软考中级备考笔记】数据结构基本结构和算法
  • 原文地址:https://www.cnblogs.com/simone331/p/17551727.html