本节要点:Power Query - 中国式排名

    何谓 “中国式排名” 呢?

    在排名计算方法中,中国人的习惯是,无论有几个并列第 2 名,之后的排名仍应该是第 3 名,即并列排名不占用名次。
    例如:对数列 {3,2,2,1} 从大到小进行排名,按国际通行的惯例是{第一名,第二名,第二名,第四名},

    比如奥运会某场比赛出现并列银牌,则不发铜牌,

    而按中国式排名,结果是 {第一名,第二名,第二名,第三名}。

    下面通过一个案例来简单的说明如何通过 Power Query 来做这个 “中国式排名”。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图1

    从上图可以看出,我们想要的结果是库里第一名,陶波依和张大杰是并列第二名,而休闲海则是第三名(要是美式排名,则是第四名)。

    我们首先来分析一下,如何进行简单快速的对比,得出名次。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图2

    我们首先将所有数据列的数据复制出来,删除重复行。

    然后依次将每一行的数据同上面的结果相比较。

    如果小于等于上面的,则为 “TRUE”,否则为 “FALSE”。

    最后统计 “TRUE” 的数量,则为名次。

    例如上图中的休闲海小朋友,统计出来三个 “TRUE”,则为第三名。

    下面我们就在 Power Query 里面实现这个逻辑。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图3

    准备好数据,上面一个表 “排名” 则是数据源,下面一个表 “不重复” 则是根据数据源删除了重复项的表。

    下面要在 “排名” 表里面进行扩展,每一行都要扩展 8 行记录,为什么呢?

    因为上面不重复的有 8 条记录啊,哈哈!

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图4

    这里用之前学到的扩展列技术。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图5

    但是这里有一个问题,假如我们的数据在增加,要是有 10 个不重复怎么办呢,还是得需要函数来动态辅助。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图6

    复制这个 “值计数” 的代码,进行替换。

    {1..List.NonNullCount(不重复[分数])}

    下面如何将 “不重复” 表里面的记录挪到 “排名” 表里面进行比较呢?这个简单了,其实就是在 “不重复” 表里面加一列索引,然后合并即可。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图7

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图8

    我们这里有一个小窍门,就是在 “排名” 表里面加一列索引列,“从 1”开始的索引,这样一来,这个表的顺序就不容易被打乱。

    展开分数一列即可,开始进行比较。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图9

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图10

    下面我们对于上面的结果做一个计数就可以得到排名了。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图11

    为了一步到位,我们可以对 “分数” 列取平均值,依旧是原来的分数,下面统计 1 的个数,即名次。

    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图12

    很不幸,发生了错误。

    1. Expression.Error: 无法将运算符 - 应用于类型 Text Text
    2. 详细信息:
    3. Operator=-
    4. Left=1
    5. Right=1


    这是由于我们“求和’一列是文本类型,改成数值型即可。
    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图13

    这样就可以了,然后改一下前后缀。
    上载到当前工作簿,为了不在刷新的时候自动调整格式,建议大家在属性里面去掉”调整列宽“。
    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图14

    新增一个小家伙,我们看看名次会不会进行刷新?
    (2条消息) 34、Power Query-中国式排名_少年休闲海-CSDN博客_powerquery排名 - 图15

    妥妥的啊,中国式排名!