ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11886|回复: 12

[求助] Power query加载至表,非常慢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-2-16 23:39 | 显示全部楼层 |阅读模式
本帖最后由 shaoqi0 于 2022-2-17 00:12 编辑

公司先前的凭证资料,需要重新整理,总共24万行多一点,通过POWER QUERY初步整理一下,查询结果可以生成预览,但是加载至表时,就非常慢。
查询显示窗口,"已加载*行",差不多每隔10秒才多增加1行,这样算下来完全加载成功需要1个月时间,期间还能关机。
我初识Power query不久,不知如何改进?
代码如下:
let
    源 = Excel.Workbook(File.Contents(路径[路径]{0}), null, true),
    导航 = 源{[Item="会计分录序时簿",Kind="Sheet"]}[Data],
    删除多余列 = Table.RemoveColumns(导航,{"Column1", "Column2", "Column3", "Column10", "Column11", "Column12", "Column15", "Column16", "Column17", "Column18", "Column19", "Column20", "Column21", "Column22", "Column23", "Column26", "Column27", "Column28", "Column29", "Column30", "Column31", "Column32"}),
    会计期间 = Table.TransformColumns(删除多余列,{"Column5", each _ & "期", type text}),
    提升标题 = Table.PromoteHeaders(会计期间),
    更改类型 = Table.TransformColumnTypes(提升标题,{ {"日期", type date}, {"会计期间期", type text}, {"凭证字号", type text}, {"摘要", type text}, {"科目代码", type text}, {"科目名称", type text}, {"借方", type number}, {"贷方", type number},  {"数量", type number}, {"单价", type number}}),
    删除底行 = Table.RemoveLastN(更改类型,1),
    借方金额 = Table.AddColumn(删除底行, "借方金额", each if [借方] > 0 then [借方] else if [贷方] < 0 then -[贷方] else 0),
    贷方金额 = Table.AddColumn(借方金额, "贷方金额", each if [贷方] > 0 then [贷方] else if [借方] < 0 then -[借方] else 0),
    本期金额 = Table.AddColumn(贷方金额, "本期金额", each if [贷方金额] > 0 then Number.Round([贷方金额],2,0) else if [借方金额] > 0 then Number.Round([借方金额],2,0) else 0),
    删除借贷 = Table.RemoveColumns(本期金额,{"借方", "贷方"}),
    向下填充 = Table.FillDown(删除借贷,{"日期", "会计期间期", "凭证字号","摘要"}),
    合并的列 = Table.AddColumn(向下填充, "合并", each Text.From([日期])&"◆"&[会计期间期]&"◆"&[凭证字号]),
    收入数量 = Table.AddColumn(合并的列, "材料入数", each if [数量]=0 and [单价]=0 then 0 else if [借方金额]>0 then Number.Abs([数量]) else 0, type number),
    发出数量 = Table.AddColumn(收入数量, "材料出数", each if [数量]=0 and [单价]=0 then 0 else if [贷方金额]>0 then Number.Abs([数量]) else 0,type number),
    合并1 = Table.AddColumn(发出数量,"合并1",each [合并]&"☆"&Text.Start([摘要],5)&"&#10022;"&Text.From([本期金额])),
    索引 = Table.AddIndexColumn(合并1,"索引",1,1,Int64.Type),
    次数 = Table.AddColumn(索引,"次数",each Table.RowCount(Table.SelectRows(Table.FirstN(索引,_[索引]),(X)=>X[合并1]=[合并1]))),
    判 = Table.AddColumn(次数, "判", each try if Number.IsEven(_[次数]) then [索引] else Table.FirstN(Table.SelectRows(Table.Skip(次数,_[索引]),(X)=>X[合并1]=[合并1]),1)[索引]{0} otherwise null),
    固化 = Table.Buffer(判)
in
    固化

数据源部分截图

数据源部分截图

查询结果

查询结果
工作表图片.jpg

TA的精华主题

TA的得分主题

发表于 2022-2-17 05:57 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
建议上传测试文件。也可以考虑一下数据库或vba数组方式。

TA的精华主题

TA的得分主题

发表于 2022-2-17 10:51 | 显示全部楼层
10秒一行 不可能吧!10年前的电脑?
最起码1秒 100行以上吧!
你这个转换里,初步看太多的增加列,按照数据库的说法,尽量少列。所以什么转换尽量在原列中进行。
行数几十万,多一列,其数据就大很多,尽量少些列试下!
导出时,按照分卷试试,一次一年的数,如果一年数据太多,半年/一个月试试!

TA的精华主题

TA的得分主题

发表于 2022-2-17 13:18 | 显示全部楼层
pq不擅长大数据量的转换,几万行数据量,几个简单的步骤,就有点卡了.

TA的精华主题

TA的得分主题

发表于 2022-2-17 13:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
猜测是最后几步中的 Table.SelectRows 造成的卡顿,可以考虑换个M函数

TA的精华主题

TA的得分主题

发表于 2022-2-17 15:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
消灭零公里 发表于 2022-2-17 13:20
猜测是最后几步中的 Table.SelectRows 造成的卡顿,可以考虑换个M函数

它不是刷新慢,是导出慢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-17 20:16 | 显示全部楼层
文件超过20M了,烦请从以下链接提取,谢谢!
链接:https://pan.baidu.com/s/1M3NOL_De5i50bYcPN52aYQ?pwd=QP14
提取码:QP14

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-17 20:28 | 显示全部楼层
本帖最后由 shaoqi0 于 2022-2-17 20:31 编辑
消灭零公里 发表于 2022-2-17 13:20
猜测是最后几步中的 Table.SelectRows 造成的卡顿,可以考虑换个M函数

接触Power Query不久,对于记录筛选不知道还有哪些函数?
电脑是4年前装的,配置可能确实有些低,现用的是Win10系统下的OFFICE2019

TA的精华主题

TA的得分主题

发表于 2022-2-18 09:39 | 显示全部楼层
主要是不知道你的"次数"和"判"这两步是想要干什么,直接说你想要结果,也许大神们会有更好的解决办法

TA的精华主题

TA的得分主题

发表于 2022-2-18 11:24 | 显示全部楼层
shaoqi0 发表于 2022-2-17 20:28
接触Power Query不久,对于记录筛选不知道还有哪些函数?
电脑是4年前装的,配置可能确实有些低,现用的 ...

20多M 不至于那么慢, 我电脑还是笔记本 3年前的配置。
我60多M, 也有快20W行, 有很多表连接,Power pivot/DAX 刷新做报告,也就4-5分钟而已!

image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-12 05:09 , Processed in 0.051245 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表