34、Power Query-中国式排名
本節(jié)要點:Power Query-中國式排名
何謂“中國式排名”呢?
在排名計算方法中,中國人的習(xí)慣是,無論有幾個并列第2名,之后的排名仍應(yīng)該是第3名,即并列排名不占用名次。
例如:對數(shù)列{3,2,2,1}從大到小進行排名,按國際通行的慣例是{第一名,第二名,第二名,第四名},
比如奧運會某場比賽出現(xiàn)并列銀牌,則不發(fā)銅牌,
而按中國式排名,結(jié)果是{第一名,第二名,第二名,第三名}。
下面通過一個案例來簡單的說明如何通過Power Query來做這個“中國式排名”。
從上圖可以看出,我們想要的結(jié)果是庫里第一名,陶波依和張大杰是并列第二名,而休閑海則是第三名(要是美式排名,則是第四名)。
我們首先來分析一下,如何進行簡單快速的對比,得出名次。
我們首先將所有數(shù)據(jù)列的數(shù)據(jù)復(fù)制出來,刪除重復(fù)行。
然后依次將每一行的數(shù)據(jù)同上面的結(jié)果相比較。
如果小于等于上面的,則為“TRUE”,否則為“FALSE”。
最后統(tǒng)計“TRUE”的數(shù)量,則為名次。
例如上圖中的休閑海小朋友,統(tǒng)計出來三個“TRUE”,則為第三名。
下面我們就在Power Query里面實現(xiàn)這個邏輯。
準備好數(shù)據(jù),上面一個表“排名”則是數(shù)據(jù)源,下面一個表“不重復(fù)”則是根據(jù)數(shù)據(jù)源刪除了重復(fù)項的表。
下面要在“排名”表里面進行擴展,每一行都要擴展8行記錄,為什么呢?
因為上面不重復(fù)的有8條記錄啊,哈哈!
這里用之前學(xué)到的擴展列技術(shù)。
但是這里有一個問題,假如我們的數(shù)據(jù)在增加,要是有10個不重復(fù)怎么辦呢,還是得需要函數(shù)來動態(tài)輔助。
復(fù)制這個“值計數(shù)”的代碼,進行替換。
“{1..List.NonNullCount(不重復(fù)[分數(shù)])}”
下面如何將“不重復(fù)”表里面的記錄挪到“排名”表里面進行比較呢?這個簡單了,其實就是在“不重復(fù)”表里面加一列索引,然后合并即可。
我們這里有一個小竅門,就是在“排名”表里面加一列索引列,“從1”開始的索引,這樣一來,這個表的順序就不容易被打亂。
展開分數(shù)一列即可,開始進行比較。
下面我們對于上面的結(jié)果做一個計數(shù)就可以得到排名了。
為了一步到位,我們可以對“分數(shù)”列取平均值,依舊是原來的分數(shù),下面統(tǒng)計1的個數(shù),即名次。
很不幸,發(fā)生了錯誤。
Expression.Error: 無法將運算符 - 應(yīng)用于類型 Text 和 Text。 詳細信息:Operator=-Left=1Right=1這是由于我們“求和'一列是文本類型,改成數(shù)值型即可。
這樣就可以了,然后改一下前后綴。
上載到當(dāng)前工作簿,為了不在刷新的時候自動調(diào)整格式,建議大家在屬性里面去掉”調(diào)整列寬“。
新增一個小家伙,我們看看名次會不會進行刷新?
妥妥的啊,中國式排名!
總結(jié)
以上是生活随笔為你收集整理的34、Power Query-中国式排名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 33、Power Query-统计员工完
- 下一篇: 35、Power Query-分组中国式