从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

今天碰到小伙伴提出了一个看起来很简单的问题 。
需要从下面的清单表里提取出每天的金额为前5的明细 。

从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

本来他们是在讨论如何用SQL写查询语句的 , 我实在是插不了嘴(因为我只见过SQL跑,但是却自己跑不了SQL) 。
可是到最后居然没讨论出结果,所以我只好放出大招了——Power Query装X利器!

第一步、加载数据,想个思路

加载进来是这样 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

【从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!】因为需要按照日期来提取数据 , 所以我们先按照日期分个组看看 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

分好组是这样的 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

然后,我们其实不是要计数,我们需要得到每个日期对应的明细表,所以我们把上面编辑栏里的代码改一下 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

把Table.RowCount去掉,得到的就是对应的表格了,就好比筛选后的表 , 只不过这里的“单元格”可以存放Table这种内容 。

第二步、处理每个Table

对每个表格进行金额从大到小排序,用Table.Sort,指定按照金额列降序排列 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

然后再取前5行 , 用Table.FirstN函数 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

这样每个Table就是我们需要的数据了 。

第三步、展开处理好的Table

同样也是写一个M函数,Table.ExpandTableColumn,把处理好的表格展开 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

注意这里是新加的步骤(上面其他的都是在原有代码上更改),所以要点击编辑栏左边的fx,然后再写上这个展开表的公式就好了 。
然后再把数据加载回工作表就OK了!
这里有个好处就是,只要数据源更新了,每天前五的明细直接刷新即可得到!
其实学会了M函数,方法简直不要太多?。?
比如下面的这个也行 。
从Excel表中提取每天金额排前五的明细?用筛选可是办不到哦!

通过添加一列辅助,来判断对应的金额是否是日期的前5个之内的 , 然后再来筛选TRUE就好了 。
PQ里的M函数处理这些问题真的很方便!当然如果数据量大的话,我们还需要考虑效率问题,这个就不是我们今天考虑的问题了 。
那么,除了以上的PQ方法,你还能想到其他方法来解决这个问题么?欢迎交流!
偷偷告诉你,Excel函数公式加上普通操作也可以解决哦!你知道怎么做么?

相关经验推荐