在前期的文章里,多次提到通过加Buffer(缓存)的方式实现数据处理效率的提升,如:
但同时也提到,并不是所有加Buffer都是有效的,应根据实际情况采用不同的方法,甚至需要对不同的方法进行测试才能确定较优的解法。
但是,也一直没有给大家一个具体的例子来说明加了Buffer出问题的情况,现刚好碰到有个朋友问的这个算是挺常用的方法,却恰恰体现了Buffer处理导致的效率下降。
50+万行60+列数据
以下将用3种方法进行对比。
-1- 加Buffer
在PQ里,一直有个比较让人困惑的问题,即对表进行了排序后,如果没有再增加一个添加索引或缓存的步骤,那么这个排序是不稳定的,不仅将数据加载到Excel时排序会乱,后续如果使用删除重复项、按顺序分组等功能,结果可能还会出错!具体案例如:
再说上面提到朋友所问的问题,最简单常用的方法就是排序,然后手工加缓存(在排序操作生成的步骤公式外面套上Table.Buffer函数)或索引,然后删重复。
通过这个方法,我电脑上运行时间大概1分50秒!
-2- 加索引不加Buffer
如果我们不加Buffer而是增加索引列,操作步骤如下:
运行时间,约1分40秒,相较于加Buffer略有提升,但提升不明显。
-3- 直接分组提取最大值
不通过排序删重复,而是天通过对客户进行分组,然后对每个组内的数据直接取其日期最大的行(在分组选择所有行时,增加Table.MaxN函数进行提取)。类似案例可参考《怎么在每个科目(分类)内容的后面加3个空行?还涉及分组依据的核心原理……》,只是使用的函数不一样而已。
运行时间,约45秒。效率提升1倍多。
- 总结 -
从这个例子可以看出,加buffer并不适合所有的情况。该Excel文件因有多个查询加载约300多M(原始数据约100M),我所使用的电脑内存32G,相对于大多用户来说应该是配置较高的——对于较大的表加缓存,一定需要根据实际情况多尝试。
而相对来说,通过直接分组以及相应的表操作,可以在一定程度上提升数据的处理效率。
最后,我其实还做了另外一个测试,即删掉了大部分的列,当只剩下几个列的时候,即使数据仍然有50+万行,处理的效率却明显提升——说明列过多时,会明显影响处理效率,这一点大家在日后的数据建模是一定要注意,不要什么列都往模型里导,要记住,做加法永远比做减法要容易。
本文分享自 Excel到PowerBI 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!