Excel之PowerQuery 談“優(yōu)化”需先從義務(wù)回答問題開始
網(wǎng)友提問:

網(wǎng)友做的文件我已經(jīng)上傳到評(píng)論區(qū)大家可以自行觀看
做的沒問題,不要總拿程序員標(biāo)準(zhǔn)要求自己(“優(yōu)化”二字當(dāng)自身能力達(dá)到一定水平時(shí)才能觸碰,在照貓畫虎的階段建議結(jié)果為王,速度都是浮云),我不理解為何不用奧運(yùn)冠軍的標(biāo)準(zhǔn)要求自己呢?
專業(yè)和非專業(yè)有本質(zhì)區(qū)別,不用太糾結(jié)。
回答網(wǎng)友問題:
我不側(cè)重優(yōu)化,一是優(yōu)化后的代碼不好講(需要有一定基礎(chǔ)的人才能聽懂),而且你下次做的時(shí)候不容易想到這樣的方法。
二是現(xiàn)在2022年第4季度民間已經(jīng)普及4090顯卡了(我從全網(wǎng)評(píng)論區(qū)看到的),雖然顯卡對(duì)我們的軟件無幫助,但是4090顯卡基本上配i9 13代 + 32G 及以上內(nèi)存 + PCIE4.0 7000m/s 固態(tài),面對(duì)如此高級(jí)的配置,我側(cè)重優(yōu)化怕大家笑話我窮,說我買不起4090
以下是我回答網(wǎng)友問題,我平時(shí)不優(yōu)化的? :)
優(yōu)化最基礎(chǔ)的想法就是避開反復(fù)計(jì)算。
1、導(dǎo)入數(shù)據(jù)

2、選中“日期”,“廠家”,“備注” 三列,轉(zhuǎn)換~逆透視列~逆透視其他列

3、直接完成,但是需要分步思考?
【1】考慮逆透視后的表格每3行為一組

我們使用循環(huán)構(gòu)建表先把每組的開始下標(biāo)找到,如下所示,

我們遍歷這個(gè)列表,配合List.Range使用
現(xiàn)在列表中的每個(gè)List里面有3個(gè)小List 這三個(gè)小List分別是那三行數(shù)據(jù)
現(xiàn)在你一定要把代碼復(fù)制或敲出來點(diǎn)進(jìn)去看一下那3個(gè)小List
因?yàn)槟闶窃诼犖抑v,這并不是你自己發(fā)現(xiàn)的,知識(shí)和語言不同之處就是,自己發(fā)現(xiàn)的知識(shí)規(guī)律更易于舉一反三。

接下來我們?cè)俜治鲆幌?,如下圖所示,紅方框代表列表中的每個(gè)大List(以第1個(gè)List為例)
藍(lán)方框和黃方框分別代表每個(gè)大List中的三個(gè)小List,最終網(wǎng)友的需求取藍(lán)色方框+紅圈列轉(zhuǎn)行得到的數(shù)據(jù)

接下來我們先取藍(lán)色方框
剛才我們已知下圖紅框代碼列表中的每個(gè)List,我們要取第一個(gè)List

我們只需要使用{0} 來取每個(gè)List中的第一個(gè)小List , 現(xiàn)在我們想取每個(gè)List中的前4項(xiàng),換句話說就是刪除最后一項(xiàng)

我們使用List.RemoveLastN函數(shù)搞定,這些函數(shù)在107集PowerQuery中都有講
建議復(fù)制代碼或敲代碼新自測(cè)試一下

解決完藍(lán)色方框,下面我們處理紅圈部分,那就簡(jiǎn)單了
就是把剛才?List.Range( Table.ToRows(逆透視的其他列) , x , 3 )? 返回的每個(gè)大List中的每個(gè)小List取最后一個(gè)值,我們就遍歷 每個(gè)大List,然后利用List.LastN取最后一個(gè)值,再用List.Combine合并列表

最后換行轉(zhuǎn)表,加上表頭,最終代碼如下

我只用了兩步,一步逆透視,一步代碼

本文章配套的文件我會(huì)發(fā)到評(píng)論區(qū)。

題外話,先能做到任何需求都把代碼寫出來,才能談優(yōu)化。
"優(yōu)化"可能根本不存在,您們可以到游戲區(qū)看看,網(wǎng)友大多認(rèn)為索尼和微軟的游戲主機(jī)所謂的“優(yōu)化”都是假的,就是降低畫質(zhì)。那咱們個(gè)人的水平,能和索尼和微軟比嗎?如果人家都是假4K 棋盤4K? 你做為個(gè)人寫代碼談“優(yōu)化”......? :)
再說現(xiàn)在電腦都這么強(qiáng)了,咱們不會(huì)還在用幾年前的電腦吧:)如果全網(wǎng)4090不是開玩笑的話,現(xiàn)在主流配置已經(jīng)是i9 13代 + 32G + 7000m/s Pcie4.0了 如果你低于這個(gè)配置,要么就是有人說謊要么就是你該升級(jí)電腦了:)
如果想做到任何需求都把代碼寫出來最簡(jiǎn)單的辦法是在B站上義務(wù)回答網(wǎng)友問題,你發(fā)視頻稱能幫網(wǎng)友義務(wù)回答問題,肯定有人找你,回答問題的UP有多少都不會(huì)有人嫌多。如果有人說你誤導(dǎo)人,那他一定是怕你進(jìn)步的,不要理他。
所以,我個(gè)人認(rèn)為,凡是跟我談“優(yōu)化”二字的,一定是在網(wǎng)上做義務(wù)回答問題的(方向給你了而且利人利己),加油!

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