导语:花10%的时间,熟练掌握Power Query的基础操作,解决80%的问题,再或10%的时间,掌握一些儿基础的M函数,再解决15%的问题,剩下的5%,需要的时候问人吧。
前些天,在群里有朋友抛了个Power Query的题目出来,后来听说这其实是狗子的订单处理规则之一:
问题描述得很清楚,推荐大家以后提问题的时候也参考这个方式,说清楚规则(逻辑),尽可能举例子,并给出想要的结果。
出题的朋友附上了初始的解法并给出了运行时长:158秒!
我们看一下他的具体解法:
这个公式很直接,就是筛选出到当前行为止与当前订单信息相同的数据进行计数,如果等于1,则是非重复,如果大于1,则重复。等同于Excel下面公式的方法:
- 1 -
直接优化公式
在前面很多文章中,我都提过,对于Table.SelectRows进行数据筛选的问题,首先可以对筛选的表进行缓存,以提高效率,加缓存非常简单,直接在原来的步骤里套上Table.Buffer函数即可:
加了Buffer之后,运行时间马上从158秒变成22秒,时间缩减到七分之一:
- 2 -
操作法
实际上,这个问题非常简单,直接操作即可,而且,效率还非常高!
因为我们只要各订单第一条数据标注非重复,所以,我们可以直接通过删重复得到各订单的第一条数据,这样即可以直接标记为“非重复”——这就直接解决了核心的“非重复”数据标志的问题。
但是,我们毕竟不能把重复的数据都丢掉,所以,我们可以把删除掉重复项的数据和源数据进行匹配(提前加好索引+合并查询)。具体操作步骤如下:
Step-01 添加索引
数据导入PQ后,先添加索引
Step-02 复制查询
复制一份数据,用于删重复以得到各订单的第一行
Step-03 删除重复项
对复制出来的查询进行删除重复项
Step-04 添加自定义列,标记“非重复”:
Step-05 合并查询
将非重复内容匹配回需要输出的结果表:
Step-06 展开、替换
展开后得到“非重复”内容,然后对null的内容直接替换为“重复”:
最后删除掉不需要的列然后加载到Excel即可,通过这种方式处理的效率怎样呢?刷新一下看看:
0.03-0.04秒!相对22秒,再提升500倍!
本文分享自 Excel到PowerBI 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!