Excel 数据整理工具 ——PowerQuery
大家好,我是處理數據的小爽鴨~
之前的文章,我們講過項目部領導老葉為了方便分析,需要將如下圖的左表轉化處理成右表。
前面我們介紹過 Word 替換法,還有 Textsplit 函數的方法。詳情戳文末鏈接。
不過,相信很多小伙伴都知道,PowerQuery 也是 Excel 專門用做數據清洗的利器。
所以,今天小爽就來帶大家來看看這個案例的 PQ 解法。
適用版本:Excel2016 以上(WPS 不適用)
難度系數:???
戳戳手:該案例屬于 PQ 中等難度,需要使用到一些 M 函數,大家重在學習思路。
我們先將數據導入到 PQ 編輯器中。
選中數據區域,在【數據】選項卡下,單擊【來自表格 / 區域】,【確定】。
1、拆分到行
如果只有一列需要拆分,那好辦。
我們直接用拆分列,拆分到行。
如下圖:
單列就拆分好了。
但是,我們需要拆分到行的有兩列。怎么辦?
那,分別拆分,然后將所需列合并?
分別拆開。
然后再合并。
可以是可以,但是如果待拆分的列有多列,還要一個個拆分,然后拼接轉表,這顯然并不是個好的選擇。
2、合并列
接下來,我們來看看另外的做法。
具體思路:
利用 Table.CombineColumns 將需要處理的列合并;
合并后的每一行,進行循環 (List.Transform) 拆分逗號 Text.Split;
處理后再轉表處理 (Table.FromColumns);
最后展開表 (Table.ExpandTableColumn)。
看不懂,沒關系,下面有詳細步驟 ↓
具體步驟:
單擊 fx 新建步驟。
? 獲取待拆分的列名的列表 name
= List.Skip (Table.ColumnNames 源))
Table.ColumnNames (源),是用來獲取表格標題的函數。也就是 {"姓名","參與完結項目","業績評分"}。
List.Skip 表示跳過幾個,第二參數不寫默認為 1,所以跳過 1 個,也就是 {"參與完結項目","業績評分"}。
這樣的好處是,后面新增列,也能夠獲取最新待拆分的列名形成的 list。
將步驟命名為 name。
? 合并待拆的列
單擊 fx 新建步驟。
公式欄中輸入:
= Table.CombineColumns 源,name,each _,"a")
=Table.CombineColumns (表,需要合并的列名形成的列表,合并的方式,新列名)
案例中我們需要合并的列名,也就是第一步的 name。
= Table.CombineColumns 源,//表 name, //需要合并的列名形成的 list each _, //合并的處理,先不做處理 "a" //合并后的列名稱
? 循環合并處理,將文本按照逗號拆分
修改 Table.CombineColumns 第三參數合并處理
= Table.CombineColumns 源, name, each List.Transform (_,(x)=Text.Split (x,",")), "a")
如下圖所示。
這里主要是針對合并處理 的每一行,循環進行拆分。
List.Transform ( _, //合并列每一行形成的 list。 (x)=Text.Split (x,",") //將每個數據按照逗號進行拆分 )
? 拆分后的數據,按照列進行轉表
將 Table.CombineColumns 第三參數拆分后的列表按照列轉表。
= Table.CombineColumns 源,name, each Table.FromColumns List.Transform (_,(x)=Text.Split (x,",")), name), "a")
將拆分后的 lists,使用 Table.FromColumns 轉換成表。
=Table.FromColums (lists, 對應標題)
按列轉表后對應的標題,就是 name。
這一步命名為合并。
? 展開表格
最后一步,把表擴展開就可以。
單擊展開按鈕,取消勾選【使用原始列名作為前綴】,單擊【確定】按鈕。
直接展開,參數是寫死的。展開的列名其實也就是 name。
所以,我們將公式改成如下圖所示。這一步可以命名為結果。
= Table.ExpandTableColumn ( 合并 , "a",name)
最終的 M 函數:
let
源 = Excel.CurrentWorkbook (){[Name="表 1"]}[Content],
name = List.Skip (Table.ColumnNames (源)),
合并 = Table.CombineColumns (
源,
name,
each
Table.FromColumns (
List.Transform (_,(x)=>Text.Split (x,",")), name),
"a"),
結果 = Table.ExpandTableColumn (合并, "a",name)
in
結果3、最后的話
本文講解的是 PQ 解法,該方法涉及多個函數。
▋STEP01 獲取待拆分的列名的列表
? Table.ColumnNames 可以獲取表格的標題
? List.Skip 可以跳過指定個數
= List.Skip (Table.ColumnNames(源)
▋STEP02 合并指定列,先不做處理
Table.CombineColumns (表,name,each _,新列名)
▋STEP03 Table.CombineColumns 的第三參數處理
? 循環拆分
List.Transform+Text.Split
? 按列轉表
Table.FromColumns
▋STEP04 利用 Table.EnpandTableColumn 展開合并的列
第二參數拆分的列名,不要寫死。
關于該案例的其他做法,請戳:文章。
將數據表轉化后,老葉就可以通過數據透視表進行進一步的分析啦。
如下圖:
比如上個季度,每個項目成員參與的項目數,總分是多少;每個項目有多少人參加,參與成員有誰。
也可以對數據進行可視化。
從整個案例中,我們可以看到整個數據的過程。
數據錄入-數據清洗-數據分析-數據可視化-[數據匯報]
不同過程,所需要掌握的 Excel 知識點有所不同。
? 數據錄入
數據驗證 / 單元格格式/...
? 數據清洗
函數 / VBA / PowerQuery
? 數據分析
函數 / 數據透視表 / PowerPivot
? 數據可視化
圖表 / 表格美化等
本文來自微信公眾號:秋葉 Excel (ID:excel100),作者:小爽
廣告聲明:文內含有的對外跳轉鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節省甄選時間,結果僅供參考,所有文章均包含本聲明。
總結
以上是生活随笔為你收集整理的Excel 数据整理工具 ——PowerQuery的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部分需联网操作,三星 Galaxy S2
- 下一篇: 索尼确认出席 CES 2024,和本田合