前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >50万行60列数据处理,加Buffer效率不升反降!

50万行60列数据处理,加Buffer效率不升反降!

作者头像
大海Power
发布2021-08-31 11:40:57
8990
发布2021-08-31 11:40:57
举报
文章被收录于专栏:用户8950297的专栏

在前期的文章里,多次提到通过加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+万行,处理的效率却明显提升——说明列过多时,会明显影响处理效率,这一点大家在日后的数据建模是一定要注意,不要什么列都往模型里导,要记住,做加法永远比做减法要容易。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel到PowerBI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档