分组排名与中国式排名 – Power Query爱好者 |
您所在的位置:网站首页 › excel怎么按条件分组排名 › 分组排名与中国式排名 – Power Query爱好者 |
一、排名的两种套路:
非常简单,动动小手鼠标点点就出来了,完全不需要自己写公式。但问题是经过排序后已经不是原来的顺序了,如果想还原成原来的顺序实现上图的效果,就需要在排序前后分别加一次索引,最后按照排序前的索引升序排列恢复原来的顺序,比较繁琐,那么看第二种方法。 2、筛选后计数+1打个比方,上图中第1行的9694,筛选出表中所有>9694的行,只剩下9911比它大,计数=1,再+1即为排名。这个套路并不陌生,在工作表函数中的sumproduct和DAX中的earlier都有类似的用法。 先来个简单的写法: let rank = (x)=>Table.RowCount(Table.SelectRows(源,each [金额]>x))+1, 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 排名 = Table.AddColumn(源, "排名", each rank([金额])) in 排名先创建一个自定义函数,筛选表中>x变量的行,然后对行计数再+1得到排名。创建自定义函数和引用自定义函数这两步可以合起来写成一步: let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 排名 = Table.AddColumn(源, "排名", each Table.RowCount(Table.SelectRows(源,(x)=>x[金额]>[金额]))+1) in 排名此方法的计算原理是逐行扫描,筛选出比它大的行然后计数,所以在数据量非常大的情况下效率会比较慢,但是比起第一种方法会更灵活,能够满足更加复杂的需求。 二、分组排名:
虽然多了个条件但本质还是一样,分组排名,那就先分组再排名嘛,但同样会破坏原来的顺序: let 源= Excel.CurrentWorkbook(){[Name="表2"]}[Content], 分组 = Table.Group(源, {"国家", "品牌"}, {"a", each Table.AddIndexColumn(Table.Sort(_,{"金额",1}),"排名",1,1)}), 展开 = Table.ExpandTableColumn(分组, "a", {"金额", "排名"}) in 展开 2、筛选后计数+1现在就会发现,这种方法在遇到多条件时逻辑会更加清晰,管你有多少个条件往后加就是了: let 源= Excel.CurrentWorkbook(){[Name="表2"]}[Content], 排名 = Table.AddColumn(源, "排名", each Table.RowCount(Table.SelectRows(源,(x)=>x[国家]=[国家] and x[品牌]=[品牌] and x[金额]>[金额]))+1) in 排名三、中国式排名:
实际上还是一个意思,只是对筛选表多进行了一个去重的预处理。 四、练习:以上介绍了分组排名、中国式排名的方法,那么请结合两者,写出分组的中国式排名,附件在下方。 附件 分组中国式排名 (15 kB) 打赏赞(8)微海报分享 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |