博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
34、Power Query-中国式排名
阅读量:2036 次
发布时间:2019-04-28

本文共 1129 字,大约阅读时间需要 3 分钟。

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

何谓“中国式排名”呢?

在排名计算方法中,中国人的习惯是,无论有几个并列第2名,之后的排名仍应该是第3名,即并列排名不占用名次。

例如:对数列{3,2,2,1}从大到小进行排名,按国际通行的惯例是{第一名,第二名,第二名,第四名},

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

很不幸,发生了错误。

Expression.Error: 无法将运算符 - 应用于类型 Text 和 Text。详细信息:    Operator=-    Left=1    Right=1
这是由于我们“求和'一列是文本类型,改成数值型即可。

这样就可以了,然后改一下前后缀。

上载到当前工作簿,为了不在刷新的时候自动调整格式,建议大家在属性里面去掉”调整列宽“。

新增一个小家伙,我们看看名次会不会进行刷新?

妥妥的啊,中国式排名!

你可能感兴趣的文章
cocos2d-x 环境配置-Mac配置篇
查看>>
GoldWave用法简介
查看>>
cocos2d-x避免手动修改android.mk文件来编译
查看>>
XMPPFramewok的使用
查看>>
快速傅立叶变换算法 FFT
查看>>
Android™ 2.1 android.R.drawable Icon Resources
查看>>
Java加密技术(三)——PBE算法
查看>>
ZXingObjC 崩溃问题解决方法
查看>>
iOS视图创建初始化的一些工厂方法
查看>>
iphone开发中sqlite3的操作说明(转载)
查看>>
File Upload Download For iOS
查看>>
iOS关闭App带动画退出
查看>>
Android性能优化的——Java(Android)代码优化
查看>>
Eclipse启动时fail to create Java Virtual Machine问题的解决
查看>>
iOS 删除文件夹下所有文件
查看>>
HTTP Live Streaming直播(iOS直播)技术分析与实现
查看>>
mp4文件格式解析
查看>>
HLS协议实现
查看>>
iOS下ffmepg开发的一些参考资料汇总
查看>>
使用iOS开源库SKPSMTPMessage实现邮件发送
查看>>