Excel之PowerQuery 按指定行數(shù)轉(zhuǎn)置
網(wǎng)友提問:


回答網(wǎng)友問題:
解決這個問題的方法有很多,對于我們使用者來說(開發(fā)人員除外),解決問題的時間并不只看你程序運行時間,而是綜合時間。想代碼+運行時間=綜合時間
我隨便說兩個方法,比如網(wǎng)友這個問題,每三行轉(zhuǎn)置
第一種方法(笨辦法):
1、先知道所有行數(shù)

2、例如表1有9行,每3行一組,那就是 9行?÷?3個/組 = 3組,可以寫成下面的樣子
Table.RowCount(更改的類型)/3
3、組成列表,樣子是{1,2,3},寫成
{1..Table.RowCount(更改的類型)/3}
4、遍歷這個列表,讓列表中每個元素重復3次


寫在下面的樣子,返回結(jié)果{{1,1,1},{2,2,2},{3,3,3}}
List.Transform( {1..Table.RowCount(更改的類型)/3},each List.Repeat({_},3)
5、使用List.Combine合并,將上面的列表變成{1,1,1,2,2,2,3,3,3}
6、將表與按列轉(zhuǎn)列表,再與上面的列表連接后轉(zhuǎn)成表。最終公式

現(xiàn)在可以使用Table.Group分組轉(zhuǎn)置了(這步就略了)。但是這樣的方法速度慢,性能損失嚴重,只是給你提供一個思路,因為有的場景暫時只能用這種笨辦法,除非語言開發(fā)設(shè)計者有更好的優(yōu)化。
第二種方法:


思路:第1次從下標0開始取3行,第2次從下標3開始取3行,第3次從下標6開始取3行
我們只需要{0,3,6} 這樣的列表表示下標,可以使用List.Genreate步長為3來實現(xiàn)

遍歷這個列表,配合List.Range使用

最后按行轉(zhuǎn)表就可以了:

最終代碼如下:
當然還有更多的方法,不過,解決這個案例并沒有實際意義,意義在于工作中實戰(zhàn)的應(yīng)用,不同需求,有不同的處理方法。

PowerQuery合集:https://www.bilibili.com/video/BV1oa4y1j75e
更多視頻:https://www.bilibili.com/read/cv10222110