數(shù)據(jù)整理,你值得擁有PowerQuery

文/黃波藝

圖片發(fā)自簡書App

相信在工作中,很多時候會涉及多張工作表合并。特點是每張工作表的字段(標題)一致,但是數(shù)據(jù)不一樣。例如各地的銷售報表,各個部門的財務報表等等。如果是三兩張表,怎么合并都問題不大。但是如果有幾十上百張表呢?怎么處理?
方法不限于以下三個:
一. Ctrl + C, Ctrl + V
數(shù)據(jù)的搬運工,理論上也是沒有問題的??墒钱斈阍诳啾瓶啾频貜椭普迟N,挑燈夜戰(zhàn),頭發(fā)冒煙的時候,可曾想妹子/暖男早跑光了呢?

二. VBA for Excel
對VBA有一定了解的話,也不難?;具壿嬍牵哼x取工作表的數(shù)據(jù)區(qū)域—復制—粘貼到匯總表—循環(huán)所有工作表。同樣是復制粘貼,不過前者自己動手,后者讓機器動手。但是單純?yōu)榱撕喜资畯埍韺iT學VBA的話,恐怕不一定所有人都有這興趣和耐心。

干脆順便把代碼也貼出來,有興趣的朋友可以看看。
<code>
Sub collectAll()
Dim i As Integer
'如果在03-07版本運行,行數(shù)只有65535行,請把1048576改為65536.
Sheets(1).Range("a2:h1048576").ClearContents
For i = 2 To Sheets.Count
Sheets(i).Range("a2",”Sheets(i).Range("a2").End(xlToRight).End(xlDown)).Copy (Sheets(1).Range("a1048576").End(xlUp).Offset(1, 0))
Next
End Sub
</code>
無論什么時候工作表的記錄發(fā)生增刪修改(包括增加字段),運行以上代碼均可即時刷新匯總數(shù)據(jù)。

三. 用數(shù)據(jù)整理利器PowerQuery
前面我說了這么多,顯然就是為就是為今天的主角--PowerQuery做鋪墊的。
“查詢增強版(PowerQuery)是一個Excel插件,是Power BI(商業(yè)智能)的一個組件。
使用PowerQuery,您可以:
? 從你所需要的數(shù)據(jù)來源提取數(shù)據(jù)(如關系型數(shù)據(jù)庫、Excel、文本和XML文件,OData提要、web頁面、Hadoop的HDFS,等等)
? 使用搜索功能,從內部和外部發(fā)現(xiàn)相關的數(shù)據(jù)功能。
? 把不同來源的數(shù)據(jù)源整合在一起,建立好數(shù)據(jù)模型,為用Excel、Power Pivot、Power View、Power Map進行進一步的數(shù)據(jù)分析做好準備。
? 與他人分享您所創(chuàng)建的查詢,讓他們可以很容易地通過搜索找到它。”
--摘自微軟官方

簡單點說,PowerQuery就是PowerBI(商業(yè)智能)的一個組件,在Office2016版和Office365版本中,直接嵌入到了Excel(如果是舊版本,可以到微軟官方網(wǎng)站下載插件安裝)。它是一個數(shù)據(jù)查詢,整理,清洗的工具。而整理數(shù)組的目的主要就是為了對下一步PowerPivot的數(shù)據(jù)建模和分析做準備。不過就算我們不需要進行數(shù)據(jù)建模和制作儀表盤,也可以利用PowerQuery進行數(shù)據(jù)處理。

言歸正傳,在PowerQuery合并多個工作表那就簡單多了。因為是對象化操作,操作界面友好,不需要寫代碼(當然PowerQuery還是可以利用M代碼進行更高級的操作,比如如果要合并多個工作簿的話就需要修改一下操作步驟的代碼)。

以下演示基于Excel2016專業(yè)增強版(不同版本的操作面板可能有差異,但核心的操作命令是一樣的)。

第一階段:

PQ合并工作表1.gif

從數(shù)據(jù)選項卡進入PowerQuery查詢;
當我們進入PowerQuery之后,發(fā)現(xiàn)共有31個工作表,其中每個工作表中有一個表。常規(guī)做法是建立31個查詢,然后通過“追加查詢”(Union all)的方式匯總所有數(shù)據(jù)。

但是,這樣做有兩個問題:

  1. 建立31個查詢的速度比建立1個查詢的速度慢的可不止31倍;
  2. 需要一個個地把所有表添加到“追加查詢”的列表中,如果有幾百個表呢?(都用上PowerQuery了,難道我還會做這些這么沒技術含量的重復動作嗎?)
    所以,不要選擇多個,選擇建立任意一個查詢就好了。

第二階段:


PQ合并工作表2.gif

其實我們并非要這一張表的數(shù)據(jù),而是要通過這張表向上追溯它的源頭。所以,建立查詢后,把“源”之后的應用步驟都刪掉。然后我們就可以看到“源”數(shù)據(jù)的真面目了:工作簿里包含的所有表,位于data字段,正是我們要合并的數(shù)據(jù)。我們只要保留data字段就好了。接著把data字段里的所有table的所有字段都擴展出來。
至此為止,此工作簿中的所有表已經(jīng)被合并。然而,工作還未完成。

第三階段:


PQ合并工作表3.gif

雖然所有表已經(jīng)被合并,但是我們還需要設置好字段:把首行提升到字段。另外,因為每個表的表頭都被合并了過來,所以我們還需要通過篩選去除每個表的表頭。

最后一步,保存并上載到Excel。Mission Complete!

如果光看文字,可能會覺得復雜,但是實際操作起來就是幾分鐘的事。而且建立了鏈接后,任何時候只要刷新匯總表就能得到最新的數(shù)據(jù)—真正意義上的一鍵刷新(甚至還可以寫一小段VBA代碼實現(xiàn)當每次工作表被激活(Activate)時就自動刷新。爽翻了!)。

這個小小的功能,對于PowerQuery而言僅僅是冰山一角罷了。有時候,PowerQuery能輕易地做到一些些在Excel中很費力氣的工作。尤其在面對海量數(shù)據(jù)的時候,Excel函數(shù)的運行效率會表現(xiàn)出一定的局限性。

個人之言,PowerQuery確實是查詢,整理數(shù)據(jù)的利器,還有更多好玩的東西可以讓大家發(fā)掘。有興趣的朋友可以研究研究。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容