前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读取上一行数据好卡啊!怎样能快一点儿? | Power Query案例实战

读取上一行数据好卡啊!怎样能快一点儿? | Power Query案例实战

作者头像
大海Power
发布2022-04-11 19:03:07
2.7K0
发布2022-04-11 19:03:07
举报
文章被收录于专栏:用户8950297的专栏

做数据处理的时候,会经常遇到在当前行读取上一行数据的问题,在Excel里,可以直接通过单元格的相对引用来实现。

但是,在Power Query里,这个问题处理起来需要通过表的行索引来实现。

其中,比较常规的一种方法,即通过Table.SelectRows函数,加上索引的标识对表进行筛选,从而进行数据的提取——在此简称“索引筛选法”。具体如下:

Step-01 添加从0开始的索引列

Step-02 添加自定义列,通过索引筛选上一行数据并取值

代码语言:javascript
复制
= try Table.SelectRows(
        已添加索引,
        (x)=>x[索引]=[索引]-1
      )[产品]{0}
otherwise  null

这时刷新加载数据,你会发现,数据加载的过程会比较慢。

有的朋友可能会问,加上Buffer会快一些吗?其实,即使给数据加上Buffer,也没有多大改善——如果您细看上面的截图,我已经给“已添加索引”的步骤加了Table.Buffer了。

本文配套数据下载链接:https://share.weiyun.com/b6DyHz3X

我是大海,欢迎关注公众号【Excel到PowerBI】,更多实战文章,更多实用知识,一起学习,共同进步。

那么,针对这个问题,我们是否有更加高效的处理方法呢?当然是有的——我在此称之为“合并查询法”,操作过程也很简单,而且不用写任何公式、代码:

Step-01 添加从1开始的索引列

Step-02 再添加1个从0开始的索引列

Step-03 合并查询

这个操作,是一个表自己跟自己合并——通过两个不同的列!如果觉得一时绕不过来,可以看一下下面的图辅助理解一下:

Step-04 展开数据,提取所需的数据列(产品)

通过这个方法,刷新加载数据,你会发现,速度非常快!

同时,这个方法还避免了要进行首行错误处理(try…otherwise…)的复杂性,并且,可以按需要一次性提取多个列(展开查询结果是筛选多列)。

这两个查询如果放在Power BI中运行,你会发现,索引筛选法会不断地读取excel文件中的数据,显示接入的数据不断增大!

经测试:

  • 当数据为4000行时,合并查询法,一次性完成数据的接入和合并,接入数据仅241 KB;而索引筛选法接入数据会增长到200多MB,才能完成刷新,是合并查询法接入数据的近1000倍;
  • 当数据为10000行时,合并查询法接入数据仅518KB,而索引筛选法接入数据更是增长到1.1GB,是合并查询法接入数据的近2000倍!

在使用Power Query或者Power BI的过程中,尤其是数据量较大的情况下,的确可能会碰到数据刷新较慢的情况,这时,我们就可以多想一下,在哪些方面可能可以适当的改进?是否可能换个更好的方法?

很多时候,换个思路,可能就“柳暗花明又一村”了——当然,这有赖于对各项基础功能和函数的熟练掌握,毕竟,无论什么知识,都需要“熟”,才“能生巧”!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档