Power Query自動(dòng)合并工作簿并提取指定內(nèi)容作為唯一標(biāo)識(shí)
我們工作中可能會(huì)遇到類似這樣的電子表格:最前面幾行表明該表的關(guān)鍵信息,例如這份虛擬的電子裝箱單有收貨方、地址、預(yù)計(jì)到貨日期等等;表頭下方是明細(xì)內(nèi)容,本次發(fā)貨有幾箱,每箱裝了什么產(chǎn)品,產(chǎn)品數(shù)量多少(每箱重量信息也應(yīng)該包含,此處省略)。

一個(gè)需求是,要把某一時(shí)段發(fā)往各店的商品做個(gè)匯總統(tǒng)計(jì),生成如下結(jié)果。除了包含明細(xì),還應(yīng)新增列說明這是哪個(gè)店的商品,預(yù)計(jì)什么時(shí)候到貨。本文嘗試使用Power Query做一份自動(dòng)化的模板。

1.數(shù)據(jù)導(dǎo)入
將數(shù)據(jù)源統(tǒng)一放在一個(gè)文件夾,在Excel或者Power BI中選擇從該文件夾導(dǎo)入數(shù)據(jù)(Excel 2013在Power Query模塊,2016及以上版本在“數(shù)據(jù)”選項(xiàng)卡下,Power BI在“主頁”選項(xiàng)卡“獲取數(shù)據(jù)”。)導(dǎo)入后的結(jié)果在Power Query中如下圖所示。

單擊Content右側(cè)的按鈕,系統(tǒng)自動(dòng)進(jìn)行處理,生成兩部分內(nèi)容。一部分是自定義函數(shù),對(duì)樣表進(jìn)行處理;另外一部分是調(diào)用自定義函數(shù)合并的所有文件,如下圖所示。

這樣直接合并后的結(jié)果無法使用,除了冗余空行之外,收貨方、預(yù)計(jì)到貨日期也不在我們指定的位置,所以要對(duì)示例文件進(jìn)行處理。
2.示例文件數(shù)據(jù)處理
首先將1-5行全部刪掉,然后將第一行用作標(biāo)題,數(shù)據(jù)變?yōu)榉浅U麧嵉臉邮健?br>

刪除前5行

將第一行用作標(biāo)題
一個(gè)新的問題產(chǎn)生,這張表沒有收貨方標(biāo)識(shí)列,合并后會(huì)所有產(chǎn)品混到一起。這個(gè)問題通過添加自定義列解決:
=原始樣式[Column2]{1}

這個(gè)公式看著莫名其妙,并且我們知道在前面的步驟已經(jīng)把收貨方等表頭刪除了,這里為什么還可以得出正確的結(jié)果?
這是因?yàn)镻ower Query記錄了每個(gè)步驟的操作結(jié)果,并且這些結(jié)果都可以后續(xù)調(diào)用。返回到“原始樣式”這一步驟,可以看到當(dāng)時(shí)“收貨方”這一行還在。它在第二列的第二行,所以上述公式的含義為:
返回原始樣式這一步驟生成的表的第二列第二行的值。{1}表示索引的第二位置,{0}是開端。

同理,再次添加自定義列,可以得到樣表中的預(yù)計(jì)到貨日期:
=原始樣式[Column2]{3}
3.修改匯總結(jié)果
基于前面我們對(duì)樣例步驟進(jìn)行了修改,匯總的“數(shù)據(jù)源”查詢會(huì)報(bào)錯(cuò),刪掉“調(diào)用自定義函數(shù)”后面的所有步驟,重新展開表即可得到正確的匯總結(jié)果。
