本文來源於一個星友的問題,他有上百個Excel表格,格式並不完全一樣,列的位置順序也不同,但每個表都有幾個共同列,這種情況下,能不能通過Power Query把這些表格共同的列批量合並呢?
當然是可以的!
我模擬了三個表,源數據的情況大致是這樣的,

這三個表之間的特征如下:
有共同列
列的位置順序是不同的
列的數量不同,表三比其他表少了一列
假設我們需要提取其中四列並合並:訂單日期、商品名稱、客戶編號和銷售額,這四列在三個表都存在。
如果使用PowerQuery簡單的合並匯總功能,是無法滿足要求的,不過通過簡單的M代碼就可以實現。
下面是操作步驟。
/01/
將需要合並的表放入到一個文件夾中,然后使用獲取數據>從文件夾,

/02/
點擊編輯,進入PowerQuery編輯器,刪除無關列,只保留Content列,

/03/
添加自定義列,

結果如下,

上面這三個步驟都是常規的合並操作,下面這一步是重點。
/04/
添加步驟,輸入以下M代碼,
合並指定列=
Table.Combine(
List.Transform(
Table.Combine(已添加自定義[數據])[Data],
each Table.SelectColumns(_,
{"訂單日期","商品名稱","客戶編號","銷售額"})))
大功告成,只包含這四列的表格合並好了,

主要是利用了 List.Transform和Table.SelectColumns函數組合來提取需要的列,然后再利用Table.Combine函數把提取后的列合並起來。
以上代碼自己琢磨一下,暫時不理解也沒有關系,遇到同類問題直接套用即可。
通過這個小例子,也可以看出M的靈活和強大,當遇到特定的問題,只靠鼠標點擊界面功能無法滿足需要的時候,也許簡單兩個M函數就解決了。
並且,有的問題通過界面功能需要很多步驟才能實現,而利用M可以一步完成,大大簡化操作步驟。
如果你經常做數據清洗工作,並且源數據不夠規范,這種情況下學點M是很有必要的。
