34、Power Query-中国式排名
本節要點: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=1Right=1這是由于我們“求和'一列是文本類型,改成數值型即可。
這樣就可以了,然后改一下前后綴。
上載到當前工作簿,為了不在刷新的時候自動調整格式,建議大家在屬性里面去掉”調整列寬“。
新增一個小家伙,我們看看名次會不會進行刷新?
妥妥的啊,中國式排名!
總結
以上是生活随笔為你收集整理的34、Power Query-中国式排名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 33、Power Query-统计员工完
- 下一篇: 35、Power Query-分组中国式