欢迎光临散文网 会员登陆 & 注册

PowerQuery 问题 请网友分析一下出了什么问题

2022-10-10 11:01 作者:孙兴华zz  | 我要投稿

此网友问题经多日沟通,我终于明白他的意思了!在本文章末已经做了解答!

很多网友提问,有几种情况我不回复

(1)Python所有相关问题:我一直用3.8版没有更新,新版部分地方属性方法变了,我没有跟进。因为Python不是我的主要生产力工具,只有Excel和Access打不开时,我才会用Python处理csv和txt文件。word我只有在爬取文章时做存储才会用到,Word不存在大数据,我会首选WordVBA

(2)网友自己做了一个复杂的软件,在某个地方卡住了,我若要解决问题,就要花大量的时间先理解你这个软件,我精力有限。还有一种情况就是有简单方法,比如Access把查询的组合框或列表框写在主窗体就好,如果一定要写在子窗体,那就要重新写函数,且没有这个必要。

以上两个问题,不能怪网友,是我的精力有限,请多包涵。

但是,下面的问题,就不能理解了,为什么大家咨询PowerQuery或ExcelvBA问题时,不能提供原表+目标表,原表是你的原始数据(举例数据尽量少),目标表是你手工做出来的结果,我给你代码,我要求不高,为什么90%以上的人做不到呢?

比如这个问题:

声明:我不会公开任何人的账号,因为这是一个普遍现像,占比高达90%,不是某个人的问题

两张图片放大

图片放大:

两张图片放大:

每个人问的问题我都会认真看,我写这个文章的目的是告诉大家,您可以不会做,但是一定要知道自己想做什么。你可以不会打官司,你又不是律师。但是你都不知道自己要打什么官司,罗老师也帮不了你。

我将网友的原图和目标图放在一起:

左表:原数据     右表:目标图

我们对右边的目标图逐行分析:

前四行

(1)A就是原表中的503,可以理解

(2)这么的B是怎么求的和?我无法理解

503+506=1009     如果将两次B都算上那是 503+506+506 = 1515  

我一开始怀疑这里是您计算错了,但是后面又说不通了 

(3)C= 503+506+502 = 1511 可以理解

(4)D = 503+506+502+567 = 2078   可以理解


再说E到H这四行:

(1)E=765  就是原表中的765  可以理解

(2)F= 777 为什么等于777  而不是765+777 我无法理解

 (3)G为什么不是E+F+G而是F+G  我无法理解

(4)H为什么不是E+F+G+H而是F+G+H我无法理解


再说I到L这四行:

(1)I=333 是原表中的数据,可以理解

(2)J=1665怎么得到的?J+I得不到,2次J的值+I也不对,无法理解

(3)k = I+J+K = 599  ,可以理解

(4)L=I+J+K+L=687 ,可以理解


再说MNO这三行,层次是1、3、4

(1)M=999  是原表中的数据,可以理解

(2)N= 原表的M+B+N= 999+506+77 = 1582 可以理解

(3)O=原表的M+B+N+O=2581  可以理解


再说PQR这三行,层次1、2、4

(1)P=222 是原表中的数据,可以理解

(2)Q=P+Q=255 可以理解

(3)R = 原表中P+Q+G+R=1476 可以理解


再说STU这三行,层次1、2、4

(1)S = 444 是原表中的数据,可以理解

(2)T = S+T = 999  ,可以理解

(3)U = 原表中S+T+J+U= 1776  可以理解


请将我不理解的红色字体让我理解。如果能讲清楚,我给你写出现成代码和思考过程!如果您能说清楚,我会在这个文章最下面补充解决方案。


网友看到后给了回复:

我来讲讲网友的需求是什么,下图红框内的数据是网友的原始表。他需要按成品料号和层级为组计算累积值。你可以把成品料号想成是班级,层级想成是学号,

假设一班,1号同学1分(累计1分),2号同学2分(累计1+2分),3号同学3分(累计1+2+3分),4号同学4分(累计1+2+3+4分),二班、三班以此类推

接下来,我们发现,子项物料代码有重复的,遇到重复,我们取累计值的最大值。保留第一次出现的B,并将对应的数量改成B里面对应的最大值,删除之后出现的B,整体表格顺序不变

好比我们给原始数据增加一个序号,最终要修改序号2和序号10的数量列,并删除序号14、19、23

得到下面结果:

现在问题讲清楚了。这个很简单

第1步:将原始表导入PowerQuery

第2步:按成品料号列分组

第3步:将数据列每个Table按列转成列表,再连接上累计值,再转成表

关于累计值,在M函数第二季第1集讲了

第4步:将列表中的每个Table合并到一起

第5步:给表添加索引列

点鼠标就可以了,避免将来数据乱了。本案例不加也没事。

第6步:对子项物料代码分组

我们就可以看到每个Table,我们的目的是将数量都改成最大值,每个Table只留第1行

第7步:把上图我们要表达的事情写成代码

就得到了我们要的结果,因为它要不改变顺序,所以我没有使用表格筛选最大值的方法

第8步:合并列表中的每个Table

第10步:如果顺序乱了,可以用索引排序,刚才说了本案例不需要,最后删除你不要的列

这个就是网友需要的样子!

做不出来,是我学艺不精,但是提问者一定要说清楚自己想做什么。你能说清楚,我就尽量帮且你。

PowerQuery合集:https://www.bilibili.com/video/BV1oa4y1j75e

更多教程:https://www.bilibili.com/read/cv10222110

PowerQuery 问题 请网友分析一下出了什么问题的评论 (共 条)

分享到微博请遵守国家法律