Power Query的學習與M語言實作系列 - (2/5) 學習Power Query編輯器

Power Query查詢編輯器提供了清晰直觀的操作環境,透過查詢列表的導覽,可快速切換和管理各個建立的查詢;右側的查詢設定工作窗格則鉅細靡遺地列出所有查詢步驟,方便使用者追蹤和修改。工具列上也提供常用功能選項,諸如篩選、排序和格式轉換。要成為資料整理大師,您肯定要熟悉Power Query查詢編輯器作業環境。

延續前一實作的範例,萬一就是那麼心急,在匯入csv檔案的導覽畫面過程,就直接按下[匯入]按鈕,並未進入Power Query查詢編輯器的畫面,而是返回Excel工作表環境,此時是否還來得及後悔地回到Power Query查詢編輯器嗎?當然沒問題,您可以點按[資料]索引標籤裡[取得資料]命令按鈕,在下拉式功能選單中點選[啟動Power Query編輯器]功能選項,或者在視窗右側的[查詢與連線]工作窗格裡,點按兩下先前建立的[NBA球隊]查詢名稱。

查詢編輯器介面

進入Power Query查詢編輯器後,即可到目前已經執行的查詢步驟,以及當下的查詢結果。此例而言,已經自動執行了3個查詢步驟,顯示在視窗右側[查詢設定窗格]裡面,而當下執行的查詢步驟列表也正顯示在[套用的步驟]區段裡,至於查詢步驟的執行結果亦顯示在[查詢結果窗格]裡。

查詢的步驟與M語言程式碼

基於每一種資料來源的類型、格式、結構與複雜度都有所不同,因此在使用Power Query匯入外部資料進行查詢時,便會自動完成先期的資料匯入與轉換步驟,而從這些查詢步驟的語句、步驟數目,您也可以輕鬆解讀資料處理的過程。譬如:以剛剛在Power Query環境下操作匯入外部的csvL檔案為例,所建立的查詢裡會自動完成3個查詢步驟。分別是「來源」、「已將標頭升階」以及「已變更類型」,逐一呈現在畫面右側的[查詢設定]窗格裡,而最後一個步驟的結果也正是此查詢的最後輸出。當您以滑鼠點選查詢步驟時,該查詢步驟所對應的原始程式碼,也就是M語言程式會立即顯示在視窗上方的[資料編輯列](即[公式編輯列])上。想想,這不是很類似在Excel環境裡,對工作表頂端的公式編輯列上,輸入與編輯公式的相同操作介面嗎?

第1個步驟「來源」:
= Csv.Document(File.Contents("F:\2025\PowerQuery文章\NBA球隊.csv"),[Delimiter=",", Columns=8, Encoding=950, QuoteStyle=QuoteStyle.None])

即便不會從無到有的撰寫,但也應該不難看懂這是取得資料來源的敘述,檔案格式是csv格式檔案(Csv.Document),而檔案內容(File.Contents)是來自路徑與檔案名稱為"F:\2025\PowerQuery文章\NBA球隊.csv"的文字檔。此文字檔是以逗點為分隔符號(Delimiter=",")的資料內容,共計有8個資料欄位(Columns=8),而這份資料檔的指定編碼類型為950(Encoding=950),這是通常應用於處理繁體中文的Big編碼。而且此csv文字檔指定不使用任何引號樣式,表示其內含文字並不會被引號包圍(QuoteStyle=QuoteStyle.None)。

第2個步驟「已將標頭升階」:
= Table.PromoteHeaders(來源, [PromoteAllScalars=true])

Table.PromoteHeaders是Power Query中的內建函數,用來將指定的資料表格其第一列內容提升為標頭(意即欄位名稱)。由於Power Query的查詢步驟是一種有序的過程,因此,目前的步驟其執行時多半會涉獵並參照先前的步驟(常常是延續前一個步驟的執行結果,也有可能是更早以前的步驟),所以在此函數裡的第1個參數便是上一個步驟的步驟名稱「來源」。至於第2個參數[PromoteAllScalars=true]是一個選項式參數,參數中的Scalars(純量)指的是單一值類型的數據,這與資料表格或結構化數據(如記錄、清單)不同。在此可以表示是否允許將所有的純量值(單一值)提升為標頭。這對於某些特殊情況(如資料表格內含有混合型態的資料)特別有用。簡單的說,若使用 [PromoteAllScalars=true]時,處理的過程是將資料來源的第1列變成欄位標題,然後,Power Query會自動推斷各欄位適當的資料類型。若是使用 [PromoteAllScalars=false]時,處理過程仍是將資料來源的第1列變成欄位標題,但所有資料欄位的資料仍保持「原始類型」,不會自動轉換,這通常表示它們會被視為 "文字類型"。尤其是.csv預設內容就是純文字檔的格式。

第3個步驟「已變更類型」:
= Table.TransformColumnTypes(已將標頭升階,{{"所屬聯盟", type text}, {"分區", type text}, {"球隊名稱", type text}, {"主場城市", type text}, {"成立年份", Int64.Type}, {"主場球館名稱 (英文)", type text}, {"容納人數", Int64.Type}, {"總冠軍次數", Int64.Type}})

顧名思義這是針對資料表格裡的資料欄位進行資料型態的設定與變更(Table.TransformColumnTypes),延續的是前一個步驟「已將標頭升階」的執行結果,分別將每一個資料欄位設定成適當的資料型態。此時,我們也可以發覺,視窗頂端公式編輯列的面積似乎僅能顯示一列程式碼,所以,您可以電案右側的展開按鈕,讓此公式編輯列的面積向下擴展,可以一次展示較大的編輯區域,讓冗長的程式碼也可以一覽無疑。

編輯完整的M語言程式碼:進階編輯器

在查詢編輯器裡進行功能選項的操作時,都會自動產生查詢步驟的M語言程式碼,除了在公式編輯列上可以檢視與編輯目前所選取的查詢步驟外,也可以開啟[進階編輯器]來檢視整個查詢裡每一個步驟的完整原始程式編碼。由於大多數的Power Query查詢步驟都是有序的關聯,因此,一次檢視完整的每一行程式,理解前後文的相依關係,將可以更容易解讀查詢的過程與意義。若有需要修改查詢步驟名稱或運算式的編碼,也比較不容易出錯。而開啟[進階編輯器]的方式是點按[常用]索引標籤後,點按[查詢]群組裡的[進階編輯器]命令按鈕。

隨即開啟[進階編輯器]對話,可以看到此查詢的完整M語言程式編碼,在此就可以看到每一個查詢步驟的名稱、程式碼,以理解程式碼的前後關係與思維邏輯。

前一篇:<<Power Query的學習與M語言實作系列 - (1/5) 使用Power Query匯入外部檔案實作-以csv為例>>
下一篇:<<Power Query的學習與M語言實作系列 - (3/5) 最常見的資料整理術– 資料拆分>>