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

Excel之PowerQuery 谈“优化”需先从义务回答问题开始

2023-02-27 10:21 作者:孙兴华zz  | 我要投稿

网友提问:

原始数据(上),目标数据(下)

网友做的文件我已经上传到评论区大家可以自行观看

做的没问题,不要总拿程序员标准要求自己(“优化”二字当自身能力达到一定水平时才能触碰,在照猫画虎的阶段建议结果为王,速度都是浮云),我不理解为何不用奥运冠军的标准要求自己呢?

专业和非专业有本质区别,不用太纠结。


回答网友问题:

我不侧重优化,一是优化后的代码不好讲(需要有一定基础的人才能听懂),而且你下次做的时候不容易想到这样的方法。

二是现在2022年第4季度民间已经普及4090显卡了(我从全网评论区看到的),虽然显卡对我们的软件无帮助,但是4090显卡基本上配i9 13代 + 32G 及以上内存 + PCIE4.0 7000m/s 固态,面对如此高级的配置,我侧重优化怕大家笑话我穷,说我买不起4090

以下是我回答网友问题,我平时不优化的  :)


优化最基础的想法就是避开反复计算。

1、导入数据

2、选中“日期”,“厂家”,“备注” 三列,转换~逆透视列~逆透视其他列

3、直接完成,但是需要分步思考 

【1】考虑逆透视后的表格每3行为一组

我们使用循环构建表先把每组的开始下标找到,如下所示,

我们遍历这个列表,配合List.Range使用

现在列表中的每个List里面有3个小List 这三个小List分别是那三行数据

现在你一定要把代码复制或敲出来点进去看一下那3个小List

因为你是在听我讲,这并不是你自己发现的,知识和语言不同之处就是,自己发现的知识规律更易于举一反三。

接下来我们再分析一下,如下图所示,红方框代表列表中的每个大List(以第1个List为例)

蓝方框和黄方框分别代表每个大List中的三个小List,最终网友的需求取蓝色方框+红圈列转行得到的数据

接下来我们先取蓝色方框

刚才我们已知下图红框代码列表中的每个List,我们要取第一个List

我们只需要使用{0} 来取每个List中的第一个小List , 现在我们想取每个List中的前4项,换句话说就是删除最后一项

我们使用List.RemoveLastN函数搞定,这些函数在107集PowerQuery中都有讲

建议复制代码或敲代码新自测试一下

解决完蓝色方框,下面我们处理红圈部分,那就简单了

就是把刚才 List.Range( Table.ToRows(逆透视的其他列) , x , 3 )  返回的每个大List中的每个小List取最后一个值,我们就遍历 每个大List,然后利用List.LastN取最后一个值,再用List.Combine合并列表

最后换行转表,加上表头,最终代码如下

我只用了两步,一步逆透视,一步代码

本文章配套的文件我会发到评论区。

题外话,先能做到任何需求都把代码写出来,才能谈优化。

"优化"可能根本不存在,您们可以到游戏区看看,网友大多认为索尼和微软的游戏主机所谓的“优化”都是假的,就是降低画质。那咱们个人的水平,能和索尼和微软比吗?如果人家都是假4K 棋盘4K  你做为个人写代码谈“优化”......  :)

再说现在电脑都这么强了,咱们不会还在用几年前的电脑吧:)如果全网4090不是开玩笑的话,现在主流配置已经是i9 13代 + 32G + 7000m/s Pcie4.0了 如果你低于这个配置,要么就是有人说谎要么就是你该升级电脑了:)

如果想做到任何需求都把代码写出来最简单的办法是在B站上义务回答网友问题,你发视频称能帮网友义务回答问题,肯定有人找你,回答问题的UP有多少都不会有人嫌多。如果有人说你误导人,那他一定是怕你进步的,不要理他。

所以,我个人认为,凡是跟我谈“优化”二字的,一定是在网上做义务回答问题的(方向给你了而且利人利己),加油!

PowerQuery教程:https://www.bilibili.com/video/BV1oa4y1j75e

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

Excel之PowerQuery 谈“优化”需先从义务回答问题开始的评论 (共 条)

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