- Power BI商業數據分析
- 胡永勝編著
- 9951字
- 2021-03-23 11:07:34
第2章 Power BI數據準備:像高手一樣處理數據
Power BI可以連接各種形式、各種來源的數據。無論是Excel、txt文件,還是各種數據庫、云服務,甚至是網頁數據,都可以被連接。
從各種來源獲取的數據很可能不能直接用于數據分析,它們需要進行整理,這個整理的過程稱為數據清洗。Power BI可以幫用戶快速清洗數據,提升數據的可用性。
無論是數據獲取還是數據清洗,Power BI都是通過內置的Power Query完成的。
Power Query是微軟的數據連接和數據準備技術,它使用戶能夠無縫訪問存儲在數百個數據源中的數據,可以幫助用戶精確地操控數據,對數據進行整理以適應各種需求。
本章內容不僅適用于Power BI中的Power Query,大部分內容同樣適用于Excel中的Power Query。
2.1 認識Power Query
Power BI的數據處理是通過Power Query完成的,首先來看看如何進入Power Query。
在Power BI Desktop中,如果還沒有任何數據,那么單擊“獲取數據”,選擇相應的數據格式導入后,就可以進入Power Query編輯器,如圖2-1-1所示。

圖2-1-1 Power Query入口
如果已經導入數據,想再次進入查看或編輯,可以單擊“轉換數據”進入。進入后的界面如圖2-1-2所示。
現在讀者對這個界面可能還比較陌生,但通過之后的練習和使用,會逐漸熟悉它。
Power Query具有以下優勢。
(1)操作簡單:即使是初學者,無須掌握復雜的函數,僅使用界面上的功能即可完成大部分數據處理工作。
(2)數據量不限:突破傳統Excel數據行的限制。
(3)自動化:處理過程全記錄,每次數據源更新后刷新即可,無須重復操作。
接下來我們開始學習如何使用Power Query。

圖2-1-2 Power Query編輯器
2.2 數據處理第一步:導入數據
既然要使用Power BI進行數據分析,那么第一步就是將數據導入到Power BI中。利用Power Query強大的數據處理功能,幾乎可以從任何來源導入任何結構、任何形式的數據,具體可以導入的數據類型如圖2-2-1所示。

圖2-2-1 可以導入的數據類型
Power Query不僅支持微軟的數據格式,比如Excel、SQL Server、Access等,還支持SAP、Oracle、MySQL、DB2等幾乎所有類型的數據格式。
Power Query不僅能從本地獲取數據,還能從網頁抓取數據,比如實時抓取股票漲跌、外匯牌價等交易數據?,F在我們嘗試一下從中國銀行網站上抓取外匯牌價信息。
單擊“獲取數據”,選擇“Web”,在彈出的窗口中輸入中國銀行外匯牌價信息網址,如圖2-2-2所示。

圖2-2-2 從Web獲取數據
單擊“確定”后,出現預覽窗口。在一個網頁上,很可能不止一個數據表,如果出現多個,可以通過單擊左側的表格來預覽,比如“表2”是我們需要獲取的外匯牌價表,如圖2-2-3所示。

圖2-2-3 網頁數據預覽
單擊“轉換數據”,進入查詢編輯器,完成數據獲取,如圖2-2-4所示。
通過以上步驟獲取的這些數據是可以隨時刷新的,以后不需要手動從網頁上復制數據再粘貼到表格中了。
以上就是從Web中獲取數據的一個例子(第9章會更詳細地介紹如何從網頁抓取數據),從其他源中獲取數據的方式與之類似。在實際應用中,每個人接觸到的數據源很有限,熟悉自己常用的數據類型,知道如何將其導入到Power BI以后,下一步是進行數據整理,這才是我們真正需要掌握的核心技能。

圖2-2-4 完成數據獲取
2.3 數據清洗的常用操作
對導入的數據進行整理的過程一般稱為“數據清洗”。之所以稱之為清洗,是因為在數據分析師眼中,雜亂的數據就是“臟”數據,只有被清洗成“干凈”的數據后才可以在數據分析中使用。下面我們就來認識Power Query中常用的數據清洗功能。
1.提升標題
在Excel中第一行為標題行,從第二行開始才是數據,但在Power Query中,從第一行開始就需要是數據記錄,標題在數據之上。一般情況下,Power Query會自動完成提升這個步驟,如果沒有,或者需要手動設置時,單擊功能欄的“將第一行用作標題”就可以了,如圖2-3-1所示。

圖2-3-1 提升標題
單擊“將第一行用作標題”旁邊的下拉按鈕,還有一個“將標題作為第一行”選項,實際上就是拉低標題,這個功能也特別有用。
2.更改數據類型
設置正確的數據類型非常重要,在后期數據建模和可視化過程中,很可能出現一些意想不到的錯誤,最后發現是數據類型設置得不對,所以一開始就要養成把數據更改為合適類型的好習慣。有兩種方式更改數據類型,如圖2-3-2所示。

圖2-3-2 更改數據類型
3.刪除錯誤/空值
導入后的數據,有可能出現錯誤(Error)或者空值(null),根據分析的需要,想要刪掉錯誤和空值,可以通過右鍵單擊該字段選擇“刪除錯誤”,或通過單擊“篩選”按鈕去掉相應勾選來完成,如圖2-3-3所示。

圖2-3-3 刪除錯誤/空值
4.刪除重復項
在Power Query中刪除重復項非常簡單,選中需要刪除的列,右鍵單擊后選擇“刪除重復項”即可,如圖2-3-4所示。

圖2-3-4 刪除重復項
5.填充
在Excel數據中經常會遇到合并單元格的情況,導入到Power Query后就變成了空值,如圖2-3-5所示。

圖2-3-5 合并單元格導入Power Query后變為空值
因此需要把數據補充完整,在Power Query中操作很簡單,直接向下填充即可,如圖2-3-6所示。

圖2-3-6 向下填充
這里用的是向下填充,根據需要,還有向上填充的功能。
6.合并列
在Power Query中選擇需要合并的列,然后在菜單欄中單擊“合并列”,彈出合并列窗口,可以設置合并列之間的分隔符,例如圖2-3-7,把“區域”和“城市”兩列合并,橫線作為分隔符。

圖2-3-7 合并列
關于新生成的合并列的列名,可以在合并列時,提前輸入新的列名,也可以在合并以后,雙擊列名來更改。
7.拆分列
不但要會合并列,我們還要會拆分列。很多數據擠在一列的情況很常見,學會如何拆分就非常重要。Power Query中的拆分列類似Excel中的分列,不過Power Query的功能更強大。
比如把剛才合并的列再拆分一下,以橫線為分隔符,又變成合并前的格式了,如圖2-3-8所示。

圖2-3-8 拆分列
在Power Query中,可以選擇按字符數、數字或字母來分列,如果列中包含多個分隔符,還可以選擇按哪個位置的分隔符來拆分。
8.分組
分組就是對明細數據進行匯總統計,比如圖2-3-8中拆分后的數據,我們要計算各區域的1月合計金額,單擊“分組依據”,選擇字段名為“區域”,操作方式選擇為“求和”,求和對象為“1月”,如圖2-3-9所示。

圖2-3-9 分組
9.提取
Power Query可以按照長度、首字符、尾字符、范圍等來提取字符,比如提取前2個字符,如圖2-3-10所示。

圖2-3-10 提取
10.行列轉置
數據處理中有時需要行列互相轉換,比如把城市變成列標簽,月份變成行標簽,可直接單擊行列轉置,如圖2-3-11所示。

圖2-3-11 直接單擊行列轉置
是不是發現哪里有些不對勁?之前的列標簽月份不見了。這是因為轉置的時候,只轉數據的部分,月份并不在數據區,我們要想保留月份,先要把月份降下來,這里用到前面介紹的“將標題作為第一行”,如圖2-3-12所示。

圖2-3-12 將標題作為第一行
標題下降以后,再進行轉置,就是我們需要的結果,如圖2-3-13所示。
轉置完成,還要再把第一行城市提升為標題,操作方式如圖2-3-13所示。

圖2-3-13 轉置
11.行列操作
Power Query的行列操作十分靈活,非常適合大規模數據操作,具體功能如圖2-3-14所示。

圖2-3-14 行列操作
12.逆透視列
由于數據分析的需要,我們經常要將二維表變為一維表,在Excel中需要很多操作步驟才能完成,而在Power Query中,通過逆透視功能,可以一鍵將二維表變為一維表。
以前面的數據為例,可以選中需要逆透視的列,單擊“逆透視列”,或者選中不需要逆透視的列,單擊“逆透視其他列”,兩種方式效果是一樣的,哪種方便就用哪種,逆透視的效果如圖2-3-15所示。

圖2-3-15 逆透視列
13.透視列
做分析需要一維表,而為了展現的需要,常常還要把一維表變成二維表,這類似Excel中的數據透視表功能。在Power Query中同樣可以一鍵透視,比如把剛才的一維表變成原樣,選中“屬性”列,透視值列選擇“值”,如圖2-3-16所示。

圖2-3-16 透視列
單擊“確定”就變回原來的二維表了,如圖2-3-17所示。
上述這些功能都是在原表數據基礎上的分分合合,做數據分析的時候還經常需要在原有數據的基礎上增加一些輔助數據,比如加入新列、新行,或者從其他表中添加進來更多維度的數據,這些就是數據豐富的過程,接下來我們進行介紹。

圖2-3-17 完成透視列
14.添加列
Power Query中添加列有添加重復列、索引列、條件列、自定義列、示例中的列等形式,如圖2-3-18所示。
下面分別介紹添加列的這幾種形式。
(1)添加重復列
添加重復列就是復制選中的某一列,以便對該列的數據進行處理而不損壞原有列的數據,如圖2-3-19所示。

圖2-3-18 添加列

圖2-3-19 添加重復列
(2)添加索引列
索引列就是為每行增加一個序號,記錄每一行所在的位置,可以選擇從0或1開始,比如為下表添加索引列,從1開始,結果如圖2-3-20所示。

圖2-3-20 添加索引列
(3)添加條件列
單擊添加條件列,在彈出的窗口中輸入指定的條件,比如根據1月的數據,如果大于300,返回“一級”,否則返回“二級”,如圖2-3-21所示。

圖2-3-21 添加條件列
這個條件其實就相當于Excel中的IF函數,得到的結果如圖2-3-22所示。
(4)添加自定義列
自定義列就是用M函數(關于M函數,2.5節會專門介紹)生成新的一列,比如添加一列1月和2月的合計數,就可以利用添加自定義列的功能,如圖2-3-23所示。

圖2-3-22 條件列的結果

圖2-3-23 添加自定義列
Power Query中的字段用[ ]框住,這里[1月]和[2月]不需要手動輸入,直接單擊右邊的字段名就可以,結果如圖2-3-24所示。

圖2-3-24 自定義列
(5)添加示例中的列
該功能相當于Excel中的智能填充,單擊“示例中的列”,可以選擇按所選內容或者按所有列來分析,在彈出的窗口中,只要輸入前兩行數據,系統根據兩個示例,自動分析所需要的數據,并填充到所有行。
比如從城市列中提取區號數字,可以輸入前兩行,下面的會自動顯示,如圖2-3-25所示。

圖2-3-25 添加示例中的列
結果如圖2-3-26所示。


圖2-3-26 示例中的列
15.追加查詢
追加查詢是在現有記錄的基礎上,在下方添加新的行數據,它是一種縱向合并。例如有兩個表格式相同,需要合并為一個表,單擊“追加查詢”,如圖2-3-27所示。

圖2-3-27 追加查詢
兩個表追加查詢的結果如圖2-3-28所示。

圖2-3-28 追加查詢結果
16.合并查詢
如果說追加查詢是縱向合并,那么合并查詢就是橫向合并,它相當于Excel的VLOOKUP函數,就是匹配其他表格中的數據,不過Power Query中的合并查詢要比VLOOKUP函數的功能強大得多,并且操作也更簡單。
例如有兩個表,一個是每個城市的數據表,另外一個表是包含這些城市基礎信息的表?,F在需要在數據表中添加每個城市對應的電話區號,單擊“合并查詢”,如圖2-3-29所示。
先選擇兩個表相互匹配的字段,單擊這兩個表的“城市”列,下方聯結種類選擇“左外部:第一個表的所有行,第二個表的匹配行”,就得到了合并后的表,如圖2-3-30所示。
合并查詢匹配過來的是一個表,所以每行都顯示為Table,為了得到某一列,可以單擊右上角的展開,選擇我們需要的字段,合并查詢就完成了。表中增加了每個城市對應的區號,如圖2-3-31所示。

圖2-3-29 合并查詢

圖2-3-30 合并查詢表

圖2-3-31 合并查詢結果
通過這種方式可以一次性匹配多列,如圖2-3-30所示,展開的時候,選擇需要的列就可以了,而VLOOKUP函數一次只能匹配一列,當需要一次性匹配多列時,Power Query的優勢更加明顯。
以上介紹的是Power Query的各項數據處理操作,基本上涵蓋了常用的界面功能。雖然看上去都很簡單,但若能熟練并靈活運用,基本能完成大部分數據處理的工作。
2.4 應用示例:二維表轉一維表
數據分析的源數據應該是規范的,而規范的一個標準就是數據源應該是一維表,它會讓之后的數據分析工作變得簡單高效。什么是一維表?為什么要轉為一維表呢?本節就來回答這些問題,并介紹如何將各種形式的二維表轉化為一維表。
2.4.1 什么是一維表
在Excel中常見的是二維表,如圖2-4-1所示。
一維表如圖2-4-2所示。

圖2-4-1 二維表

圖2-4-2 一維表
通過以上二維表和一維表的直觀比較,應該能分清楚什么是一維表、什么是二維表了,簡單來說,一維表具有如下特點。
(1)每一列是一個維度,列名就是該列值的共同屬性。
(2)每一行是一條獨立的記錄。
而這兩點對于二維表都不適用。
2.4.2 為什么要轉為一維表
二維表更符合我們日常的閱讀習慣,信息更濃縮,適合展示結果,但作為源數據進行數據分析時,一維表更合適。
一維表的每一列是一個獨立的維度,列名或字段名就是數據分析的基礎,比如制作圖表時直接把字段拖入某個屬性框中,以及后面將會學習的利用列名與其他表建立關系、編寫DAX(數據分析表達式)時直接使用列名等。
那么如何將二維表和一維表相互轉換呢?
一維表轉換成二維表很簡單,在Excel中也可以輕松做到,就是利用數據透視表,在Power Query中也有同樣的透視功能,這里不再贅述,下面主要介紹如何將二維表轉換成一維表。
2.4.3 二維表轉為一維表的方法
利用Power Query將二維表轉為一維表十分方便,下面以常見的幾種結構的表格為例進行介紹。
1.行列標題均為單層的二維表
對于圖2-4-1中的二維表,這種簡單的二維表直接使用逆透視功能就可以快速轉為一維表,如圖2-4-3所示。

圖2-4-3 逆透視其他列
可以選擇需要透視的列進行“逆透視”,也可以選擇不需要透視的列,然后單擊“逆透視其他列”來完成。
本例中,因為需要逆透視的列有4列,而年度列只有1列,所以只選擇“年度”列,單擊“逆透視其他列”更為便捷,逆透視后的結果如圖2-4-2所示。
提示:透視/逆透視等操作,生成的結果表的列名,需要自己手動更改,下同。
2.行標題有多層的二維表
行標題帶有層級結構的二維表,如圖2-4-4所示的二維表,有兩層行標題。

圖2-4-4 雙層行標題的二維表
這種結構很清晰,但做數據分析最讓人頭疼的就是合并單元格,不過在Power Query中處理也并不困難,只是多了一些步驟。
將表2-4-4所示的導入Power Query編輯器后,合并單元格的內容會顯示為null,如圖2-4-5所示。

圖2-4-5 合并單元格導入后顯示為null
先把年度列向下填充,將年度數據補齊,如圖2-4-6所示。

圖2-4-6 年度列向下填充
然后選中“年度”和“季度”列,單擊“逆透視其他列”,完成一維表的轉換,如圖2-4-7所示。

圖2-4-7 完成二維表向一維表的轉換
3.列標題有多層的二維表
列標題帶有層級結構的二維表,如圖2-4-8所示,有兩層列標題。

圖2-4-8 雙層列標題的二維表
現在先不急于操作,我們先觀察圖2-4-8,它和上面的多層行標題的二維表是不是很相似呢?通過一次轉置,圖2-4-8中的二維表可以轉換為多層行標題的形式,轉置后的效果如圖2-4-9所示。

圖2-4-9 轉置表
然后按照第2種方式操作就行了。
提示:在進行逆透視操作之前,記得要先提升標題(將第一行用作標題)。
4.行、列標題均有多層的二維表
行標題和列標題均帶有層級結構,如圖2-4-10所示。

圖2-4-10 行、列標題均帶有層級的二維表
看起來更復雜,但其實同樣是上述幾個步驟的靈活組合。將該表導入Power Query中,如圖2-4-11所示。

圖2-4-11 行、列標題均帶有層級的二維表導入后的效果
主要操作步驟如下。
(1)將第一列的年度列向下填充,補齊合并單元格的數據,填充后的效果如圖2-4-12所示。

圖2-4-12 年度列向下填充
(2)將前兩列,也就是年度列和季度列合并,生成年度季度列,如圖2-4-13所示。

圖2-4-13 合并列
仔細觀察上面這個表的結構,已經轉換成了上面的第3種情況,也就是列標題帶層級的二維表。
(3)轉置表,然后把第一列向下填充,并提升標題,就變成了很簡單的結構,也就是第2種形式的二維表,如圖2-4-14所示。

圖2-4-14 已轉換為雙層行標題的二維表
(4)選中前兩列,逆透視其他列,就變成了一維表,如圖2-4-15所示。

圖2-4-15 初步完成一維表的轉換
(5)雖然已經變成一維表了,但為了和源數據維度一致,將年度季度列進行分列,分列后的效果如圖2-4-16所示。

圖2-4-16 分列后的效果
至此就得到了最終的一維表,看起來步驟很多,其實熟練掌握之后操作并不難。
以上幾種形式的二維表,基本包含了各種復雜結構的表格,如果有更復雜的表格,比如更多層級的行、列名,也同樣可以按照以上的思路通過來分步完成,主要步驟如下。
(1)將行層級先合并列,轉換成單層行標題,多層列標題的二維表,也就是上面的第三種情形的表。
(2)轉置,變成第二種情形的二維表。
(3)在二維表的轉換過程中,除了熟練使用逆透視功能,還應該靈活掌握填充、提升標題、合并列、分列等操作。
2.5 掌握Power Query不可不知的M函數
前面介紹Power Query時都是用鼠標操作,雖然通過這些操作能完成大部分數據處理工作,但是還有些復雜的工作是處理不了的,如果想徹底駕馭Power Query,必須掌握一些高級操作。像學習Excel一樣,制作表格我們只要會簡單的操作就可以了,但要想學好Excel,必須熟練使用公式。Power Query的高級操作也是需要寫公式函數的,Power Query中的函數稱為M函數。
在之前的操作中,雖然沒有直接使用M函數,但其實M函數無處不在,比如做數據清洗的每一個步驟,背后都是M函數的功勞。
在菜單欄中打開高級編輯器,可以看到每一個操作步驟的M函數,如圖2-5-1所示。

圖2-5-1 高級編輯器中的M函數
如果我們不進行鼠標操作,直接在編輯器中編寫這些函數,也是可以得到最終的結果的。有了M函數,Power Query的數據處理過程具有了更強的可讀性和可移植性。
2.5.1 為什么要學習M函數
M函數的優勢和作用如下。
(1)界面操作配合M函數,更加靈活、簡潔和高效。
(2)部分復雜操作必須借助M函數來完成。
2.5.2 M函數的基本規范
(1)嚴格區分大小寫,每一個字母必須按函數規范書寫,第一個字母都是大寫的。
(2)表被稱為Table,每行的內容是一個Record,每列的內容是一個List。
(3)行標是大括號{},比如取第一行的內容:=表{0}。
提示:Power Query的第一行從0開始。
列標用中括號[ ],比如提取自定義列的內容:=表[自定義]。
取第一行自定義列的內容:=表{0}[自定義]。
2.5.3 常用的M函數
1.聚合函數
求和:List.Sum()
求最小值:List.Min()
求最大值:List.Max()
求平均值:List.Average()
2.文本函數
求文本長度:Text.Length()
去文本空格:Text.Trim()
取前n個字符:Text.Start()
取后n個字符:Text.End()
移除文本:Text.Remove()
提取文本:Text.Select()
3.提取數據函數
從Excel表中提取數據:Excel.Workbook()
從Csv/Txt中提取數據:Csv.Document()
4.條件函數
If then else(相當于Excel中的IF函數)
2.5.4 從哪里查找M函數
想查看所有的M函數,可以參考微軟官方文檔。
文檔里的M函數的學習資源十分豐富和系統,如圖2-5-2所示。

圖2-5-2 官方M函數學習資源
還有一種簡單的方式可以查看所有的M函數,在Power Query中新建一個空查詢,在公式欄中輸入“=#shared”就把所有的M函數顯示出來了,單擊某個函數,最下方便出現該函數的注釋,如圖2-5-3所示。

圖2-5-3 調出M函數列表
2.5.5 M函數學習建議
雖然M函數很強大,但是不建議一開始就專門學習,畢竟對于一個之前沒有接觸過編程的人來說,學習成本還是很高的,并且大部分數據處理工作,只需要用界面操作就夠了,大部分函數并不常用。
建議先熟悉M函數的語法,能夠讀懂M函數,并把常用的函數,比如文本函數、字符串函數、日期函數等瀏覽一遍,知道大概都有什么函數,分別具有哪些功能,然后在數據處理過程中碰到鼠標操作難以完成的問題時,能想到有哪個M函數可以利用,直接查找并根據注釋使用,或者學會修改相應的M函數代碼即可。
如果既能熟練使用界面操作功能,又能靈活運用M函數,讀者將在數據處理的路上快馬揚鞭。在大數據已經進入日常工作和生活的今天,擁有Power Query這個利器,我們就能用很少的時間來處理數據,留下更多的時間去分析數據,發現數據背后的規律——這才是我們學習Power Query以及學習Power BI的目標。
2.6節利用兩個常用的M函數來完成常見的數據清洗工作,讀者可以體驗一下Power Query中M函數的用法和威力。
2.6 文本處理技巧:移除和提取
本節介紹兩個常用的M函數:Text.Remove和Text.Select。
以Text開頭的函數是文本處理函數,下面通過幾個示例介紹這兩個函數的用法。
模擬原始數據如圖2-6-1所示。
如果只想要中文名,就是把英文字母都去掉,可以用Text.Remove函數,添加自定義列“中文名=Text.Remove([客戶],{"A".."Z"})”,如圖2-6-2所示。

圖2-6-1 模擬數據

圖2-6-2 添加自定義列
運行結果如圖2-6-3所示。
Text.Remove的參數有兩個,第一個是文本,第二個是要移除的字符,第二個參數可以是文本或列表,{"A".."Z"}表示生成了一個從A到Z的列表,只要是大寫字母,就從客戶的信息中移除。
如果有小寫字母,需要把所有字母移除,把大寫的"Z"替換成小寫的"z"就行了:
=Text.Remove([客戶],{"A".."z"})
如果只想要英文名,要移除中文名,可以這樣寫:
英文名=Text.Remove([客戶],{"一".."龜"})
Power Query的中文字符以Unicode連續儲存,"一"的Unicode最小,正常使用的漢字中,"龜"的Unicode最大,因此{"一".."龜"}就是包含了所有正常使用漢字的列表,可以利用它,移除所有的中文字符,如圖2-6-4所示。

圖2-6-3 移除大寫英文字母

圖2-6-4 移除中文字符
如果有更多種類的文本數據不規則地堆放在一起,如圖2-6-5中的數據,想把聯系方式提取出來,可以這樣寫:
聯系方式=Text.Remove([客戶],{"A".."z","一".."龜"})
把中文字符和英文字符的列表都放到第二個參數中,全部移除。
不過如果字符種類很多,如圖2-6-6中這樣更加雜亂的字符,要提取聯系方式,用Text.Remove就有點麻煩,各種奇怪的符號種類太多了,編碼也不一定連續。還好有一個Text.Select函數是專門用來提取的。

圖2-6-5 雜亂的原始數據

圖2-6-6 更加雜亂的原始數據
Text.Select函數和Text.Remove正好相反,Text.Select只提取第二個參數中的字符,要提取圖2-6-6中的聯系方式,可以這樣寫:
聯系方式=Text.Select([客戶],{"0".."9"})
直接就可以得到聯系方式信息。
提取各種字符的列表如圖2-6-7所示。

圖2-6-7 提取字符
Text.Remove函數同樣可以使用圖2-6-7中的列表,只是結果變為移除這些字符而已,在實際使用中,根據需要,哪種函數更便捷就用哪種函數。
學會這兩個函數,遇到需要提取或者移除字符的情況直接套用就可以了。這兩個函數都很簡單,用起來就像Excel公式一樣,但可以輕松實現在Excel中很難處理的字符提取操作。
2.7 分列技巧
分列是十分常用的數據處理技巧,2.3節曾經簡單介紹過在Power Query中如何分列,但這不足以體現Power Query的強大和靈活,本節繼續介紹更多的分列功能以及如何使用M函數來進行分列。
2.7.1 常規分列
我們最常見的是有固定分隔符的規范數據,這種數據按照分隔符拆分就可以了,如圖2-7-1所示。

圖2-7-1 按分割符分列
如果沒有分割符怎么辦?依然是同樣的數據,如果連逗號都沒有,在Power Query中還可以“按照從數字到非數字的轉換”來分列,如圖2-7-2所示。
還可以按大小寫字母的轉換來進行分列,如圖2-7-3所示。

圖2-7-2 按照從數字到非數字的轉換分列

圖2-7-3 按照從小寫到大寫的轉換分列
2.7.2 分列到行
有時候數據都擠在一個單元格里,直接分列也可以,會分成一行多列的表,使用起來很不方便。
對于這個問題,在Power Query中還可以直接分列到行。單擊“按分隔符”分列,在彈出的窗口中展開“高級選項”,選擇拆分為行就可以了,如圖2-7-4所示。

圖2-7-4 拆分為行
2.7.3 多種分隔符進行分列
有時候我們拿到的原始數據很不規范,可能是手工錄入得很隨意,分割符不止一種,我們無論選擇哪個都沒法直接分開,如圖2-7-5所示。

圖2-7-5 多種分割符的情況
這時候,僅靠界面功能就難以正確分列了,不過Power Query里還有豐富的M函數,這里我們就需要用M函數來完成分列。
以圖2-7-5中的數據為例,碰到這種多種字符分割的情況,就不要再用拆分界面功能了,直接添加步驟,在編輯框中輸入以下內容。
=Table.SplitColumn( 提升的標題, "區號", Splitter.SplitTextByAnyDelimiter( {",",";","-","+","。"}, QuoteStyle.Csv ) )
其中提升的標題是上一個步驟的名稱,使用時要更改為實際的步驟名,字符替換為實際數據的分隔符。
提示:在Power Query編輯器中,單擊編輯欄旁邊的fx,即為添加步驟,直接輸入M函數即可。
輸入的內容看起來有點長,其實主要是使用了Splitter.SplitTextByAnyDelimiter函數,把所有的分隔符做成一個列表作為該函數的第一個參數就可以了,效果如圖2-7-6所示。
關于分列,主要是找出數據排列的規律,是否有固定的分隔符、固定的字符數等,找到規律以后,按規律進行拆分就可以了。
通過分列功能可以看出,Power Query的界面功能已經比較豐富了,可以處理大部分日常需求,不過對于不符合常規的數據,要掌握一些M函數才能更加得心應手地處理。

圖2-7-6 利用M函數處理多種分割符的拆分
2.8 批量匯總,快速提升工作效率
Power Query除了前面提到的數據清洗功能,還有一個流行且非常好用的功能就是批量匯總數據。本節就介紹這個功能,它無須復雜操作和復雜代碼就可以批量匯總多表數據。
2.8.1 批量匯總一個工作簿中的多個工作表
模擬的數據表如圖2-8-1所示,工作簿有三個工作表:1月、2月、3月。

圖2-8-1 模擬Excel工作簿
下面是詳細的操作步驟。
(1)打開Power BI,單擊“獲取數據”→“Excel”,如圖2-8-2所示。
(2)選擇Excel工作簿所在的位置,在彈出的導航器窗口,選擇任意一個工作表,單擊“轉換數據”,如圖2-8-3所示。
(3)在Power Query編輯器窗口中,在右側的步驟欄刪掉“源”之后的所有步驟,如圖2-8-4所示。

圖2-8-2 獲取Excel數據

圖2-8-3 轉換數據

圖2-8-4 刪除步驟
刪掉這些步驟后,讀者會在數據界面看到所有的三個工作表,如圖2-8-5所示。

圖2-8-5 需要合并的工作表
在這個界面可以篩選Name列,選擇需要合并的工作表,如果不選擇,就是合并所有的工作表數據。
(4)單擊Data列右上角的符號,展開Data列的數據,所有工作表的數據就全部顯示出來了,如圖2-8-6所示。

圖2-8-6 數據合并完成
然后就是數據整理的過程,比如將第一行用作標題、修改數據類型等,具體操作方法請參考2.4節的內容。
2.8.2 文件夾匯總:批量合并多工作簿數據
操作步驟如下。
(1)將需要合并的多個工作簿放在同一個文件夾中,模擬數據如圖2-8-7所示。

圖2-8-7 文件夾數據
(2)打開Power BI,選擇“獲取數據”→“全部”→“文件夾”,如圖2-8-8所示。

圖2-8-8 從文件夾獲取數據
然后按步驟選擇文件夾所在的位置。
(3)在預覽界面中單擊“轉換數據”,如圖2-8-9所示。

圖2-8-9 轉換數據
(4)進入Power Query編輯器,添加自定義列“=Excel.Workbook([Content])”,如圖2-8-10所示。

圖2-8-10 添加自定義列
這里的Excel.Workbook是一個M函數,用于將Power Query導入數據自動生成的二進制工作表轉換成可讀的table文件。注意這個函數的大小寫字母不能寫錯了。
(5)展開自定義列,所有Excel工作簿的每個工作表都會顯示出來,如圖2-8-11所示。

圖2-8-11 展開自定義列
展開之后,會有一列是所有工作簿中的工作表列表,如果只想合并部分工作表,可以在這里通過篩選實現,如果不做任何篩選,就是合并每一個工作簿中的所有數據。
(6)展開Data列,把合并的數據展示出來,如圖2-8-12所示。
數據全部合并進來以后,剩下的就是整理的過程,比如刪除不需要的列、提升標題、篩選無效的數據行等,讀者可以多動手練習。

圖2-8-12 合并完成
2.9 本章練習
有一張成績表,數據結構如圖2-9-1所示。

圖2-9-1 成績表
利用Power Query,如何將這個表快速轉換為一維表?