Power Query中把一個表格分成多個表格的辦法

例如這樣一個問題,學校運動會的報名表,格式如下:

我們需要按照比賽項目分成8個表格,每個表中又要按照性別年級分組:

Power Query能不能做到?

如果你掌握了Power Query的兩個小技能,你就能夠按照上述的要求來拆分表格:



我就不帶你去複習了,自己點開看就可以了,我們來說這個表格的處理過程:

數據整理

目前這個表格肯定不適合做數據源,我們要做降維處理,逆透視,另外設計班級順序排列,我們先做個小表放在邊上備用:

我們後期需要用這個數字來排列順序,先做好準備。

逆透視:

我習慣用Power BI Desktop中的Power Query因為能夠智能聯想輸入,寫函數比較方便,用Excel中的Power Query也是一樣的,不過你最好把網頁打開,放到Power Query官方文檔這裡,方便查找M函數。從文件,把班級這個表和報名表加載到Power Query中:

刪除其他沒用的列,選中運動項目列,逆透視,結果如下表:

自定義列合併班級姓名:

提取年級:我們直接用班級列來提取

合併查詢年級序號:因為漢字排序會亂,數值排序才準確

然後我們用這個新的序號升序排序一下:

注意,我在每一步的處理過程中都會把不用的列隨手刪除。

分組

先做一個大的分組,直接按照運動項目分組即可,聚合選擇所有行:

這時候我們就得到了8個表,當然這八個表還不是我們最終需要的表格:

定義表格處理函數

我們需要取出其中一個表來做一個自定義函數,變成最終的那樣的表格,初學者到這裡就有點蒙,怎麼取出其中一個表,很簡單,建一個空查詢輸入:

=報名表[計數]{0}

報名表:總表[計數]:引用的列的名稱{0}:引用的行號,0代表第一行

我們要這個基礎上做分組編號,分組依據是性別與班級,我們之前講過,如果記不住添加索引這個函數,就先添加一列索引,複製這個函數備用:

然後分組:

這樣選擇之後,再來修改公式:

把這部分用添加索引函數替換修改:

然後對這個表展開做透視:透視列時選姓名班級那一列,聚合選不聚合

透視結果如下:

看到沒有這時年級順序是亂序的,我們用序號來做排序就可以了:

可以整理一下,把序號列刪除:班級改成年級這樣基本符合我們的結果要求了。

在這個查詢上右鍵創建函數:

提示時點擊創建:

輸入函數名稱:

還會有個提示,點擊確定:

把參數T添加到下面兩個位置中,就可以了,其他的都不變。這個函數的作用就是把前面沒有處理好的表,轉換成結果表格。

使用函數修整表格

回到報名表自定義列引用函數處理表格:

因為原本計數列中的值就是表格,直接用來作為函數的參數

這時候自定義裡面的八個表格,就是我們需要的表格了:

最後一步,提取結果表格

還好項目不多,一個一個的提取就好了

後面的只要複製第一個,修改行號就可以了:

如果是在Excel中就要選擇加載哪個表格,哪個不加載。

這個方法雖然有點笨拙,但是項目少的情況下,還是可以達成目的的。