ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 茶水零食捧上:PQ计算过程把文件放大了4倍,以致不能导入PP

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-9-16 17:11 | 显示全部楼层 |阅读模式
本帖最后由 大寒123 于 2022-9-16 17:21 编辑

数据保密也不好上附件,图片也得一顿抹,尝试描述清楚。
一个工作任务,想来想去还是做成模型后续更新数据源自动更新结果合适,学习了一个月的PowerQuery开始做,就差一点,就能完成了,然后卡了两周……
数据源是100万行×83列的,从库里导出的CSV文件(没有数据库权限,为了完成工作请有权限的同事帮忙导出的)。
测试模型,只选取了25万行数据(CSV就只有25万行,80列)导入PQ处理,以下描述基于这25万行数据。
一些整理和清洗过程不提。

小目标:要给数据源增加一列信息,匹配关系是一对多的,需要判断多个匹配项里,哪一个是需要的,增加此列信息后,导入到PowerPivot。

Excel处理倒是简单,可惜数据量太大处理起来太慢,以下为我的PQ思路:
1663317501517.jpg

1、通过合并查询,源表上新增了一列格式为table的数据,即图上“结算口径”一列,每行的table可能1行信息都没有,也可能有多行;
     每行的table其中一列为“口径字段”,都是XX日期,内容与源表的标题一致,分别对应源表的4列不同的日期;
2、给每行的table增加一列“计算日期”,根据“口径字段”的内容,获取源表当前行数据里,列标题与“口径字段”相符的日期:
——————————————————————————————

Table.ReplaceValue(合并的查询1,each [结算口径],
                                                  each [索引],
                                                  (x,y,z)=>Table.AddColumn(y,"计算日期",(n)=> DateTime.Date(Record.Field(Table.SelectRows(合并的查询1,each [索引]=z){0},n[口径字段]))),
                                                  {"结算口径"})
———————————————————————————————
3、给每行的table增加一列“日期判断”,在每行table里,判断第2步获取的“计算日期”是否在有效期里,符合返回1,否则返回0,故结果可能为都是0,都是1,或者0和1都有。
———————————————————————————————

子表判断口径是否有效=Table.TransformColumns(子表加口径,{"结算口径",each Table.AddColumn(_,"日期判断",
                                                                                each if (try _[计算日期])[HasError] or _[计算日期] is null then 0
                                                                                   else if _[计算日期] >= _[有效期始] and _[计算日期] <= _[有效期止] then 1
                                                                                       else 0)})

———————————————————————————————
4、源表新增一列获取需要的信息,每一行table的日期判断这一列,根据第1个“1”所在的坐标,获取对应的“结算口径”的数据,如果没有1,返回“无匹配规则”。
———————————————————————————————

返回匹配的结算口径=Table.AddColumn(子表判断口径是否有效,"口径",(x)=> try x[结算口径][结算口径]{Table.PositionOfAny(x[结算口径],{[日期判断=1]},0,each x[结算口径][日期判断])} otherwise "无匹配规则")
或是:
返回匹配的结算口径=Table.AddColumn(子表判断口径是否有效,"口径",(x)=> try x[结算口径][结算口径]{List.PositionOf(x[结算口径][日期判断],1)} otherwise "无匹配规则")

———————————————————————————————

现在问题在第4步,可以计算,得出的结果也是对的,25万行数据大约1分钟计算完成,
但计算时,右下角一致闪烁来自源表的多少MB,关联合并查询的表也在显示,显示过程里源CSV不断增加,把原本90M的文件,内容一下子增加到了400多兆:
1663319033625.png
这一步之前,数据都可以顺利导入PP,第4步运算完成后,就无法导入PP了,上网查询判断,是因为PQ导入PP有2G的内存限制。

怎么才能获取到目标数据,还不改变文件大小,顺利导入PP呢?求前辈们解答,请喝奶茶!请吃饭也行!






1663317501517.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-16 20:30 | 显示全部楼层
本帖最后由 大寒123 于 2022-9-16 20:32 编辑

付费解答也行!

TA的精华主题

TA的得分主题

发表于 2022-9-17 00:40 来自手机 | 显示全部楼层
数据量这么大pq应该是无解的。不过既然是数据库里导出来的那肯定是很规范的数据何必还要用pq去处理,再导入到数据库用SQL处理不香吗

TA的精华主题

TA的得分主题

发表于 2022-9-17 08:13 来自手机 | 显示全部楼层
没有数据库权限,为了完成工作请有权限的同事帮忙导出的

楼上所言极是,数据量这么大,建议开放查询权限,直接数据库查询比较方便。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-17 16:18 | 显示全部楼层
鑫尼达 发表于 2022-9-17 00:40
数据量这么大pq应该是无解的。不过既然是数据库里导出来的那肯定是很规范的数据何必还要用pq去处理,再导入 ...

谢谢你~
不选择再导入数据库处理,是因为目前不会数据库,如果无解,那我学习一下数据库,换个方向解决吧……
用PQ处理是因为之前了解过一点PQ,上手容易一点,理论上PQ好像是能处理千万量级数据。
数据库数据规范,还用PQ清洗,是因为:1、数据库数据格式不太规范,比如人名一列里,有的长名字中间有换行符,作为CSV文件直接在PQ里处理,会串列,就弄了一个能处理换行符的示例CSV文件,与要处理的CSV文件放在同一个文件夹再通过PQ处理;2、之前尝试过直接用PP处理,PP好像不会被换行符影响,但是不知道为什么,还是同样格式的数据,换了一批数据源之后,PP报错格式问题,就还是选择用PQ先整理格式了;3、还没开始学习dax函数,要增加的一列信息,不知道怎么直接在PP里实现。
当时就很纠结处理路径和学习方向,因为看到PQ有自定义函数,PP没有,以为PQ的灵活度更高,选择学习PQ入手解决,看来还是选错了,emmm那就开始学习数据库吧o(╥﹏╥)o

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-17 16:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2022-9-17 08:13
没有数据库权限,为了完成工作请有权限的同事帮忙导出的

楼上所言极是,数据量这么大,建议开放查询权限 ...

如果我至少已经作出模型,只差权限了(PQ好像也可以直接连数据库),可以去申请权限。
现在模型没做完,也还没学会数据库语言,就去申请权限,申请不下来的。

TA的精华主题

TA的得分主题

发表于 2022-9-17 16:35 来自手机 | 显示全部楼层
大寒123 发表于 2022-9-17 16:18
谢谢你~
不选择再导入数据库处理,是因为目前不会数据库,如果无解,那我学习一下数据库,换个方向解决 ...

数据清洗,正则表达式,sql更方便,pq上个正则表达式没那么容易而且快。
能可以看看我的回复,有很多sql数据清洗的例子

TA的精华主题

TA的得分主题

发表于 2022-9-17 16:35 来自手机 | 显示全部楼层
大寒123 发表于 2022-9-17 16:23
如果我至少已经作出模型,只差权限了(PQ好像也可以直接连数据库),可以去申请权限。
现在模型没做完, ...

SQL比pq容易太多了,花一天时间入门一下吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-17 16:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2022-9-17 16:35
数据清洗,正则表达式,sql更方便,pq上个正则表达式没那么容易而且快。
能可以看看我的回复,有很多sql ...

我看着您的帖子呢,Excel本来自认用得还不错,看您的第一帖子用得函数webservice我就从来没用过●| ̄|_
下载数据库找教程去了……(头秃)

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-9-17 17:42 | 显示全部楼层
理论上PQ能处理千万量级数据,实际上大佬们都让学数据库,头发不够用啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-18 17:49 , Processed in 0.034461 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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