Power Query 系列 (07) - 添加列

前面幾篇博客介紹了 Power Query (簡稱 PQ) 的數(shù)據(jù)源和 M 語言的基礎(chǔ)知識,現(xiàn)在開始進(jìn)入數(shù)據(jù)處理部分。本篇接著介紹 如何在 PQ 中添加列。添加列是很重要的一個操作,在 PQ 的查詢編輯器界面,有一個專門【添加列】功能區(qū)。在講解添加列的過程中,我們會逐步介紹一些相關(guān)知識點和 PQ 的操作細(xì)節(jié)。

本示例基于一個考試分?jǐn)?shù)的清單,做兩個方面的統(tǒng)計:1)按單科分?jǐn)?shù)計算級別( A/B/C/D); 2) 將語數(shù)外的成績分別作為一列,并計算總分


image

創(chuàng)建 table

創(chuàng)建一個空查詢,進(jìn)入高級編輯器,在編輯器中輸入下面的代碼:

let
    scores = {
        [Name="張三", Subject="語文", Score= 98],
        [Name="李四", Subject="語文", Score= 90],
        [Name="張三", Subject="數(shù)學(xué)", Score= 100],
        [Name="李四", Subject="數(shù)學(xué)", Score= 87],
        [Name="張三", Subject="英語", Score= 60],
        [Name="李四", Subject="英語", Score= 72]
    },
    source = Table.FromRecords(scores)
in
    source

點擊完成按鈕,回到查詢編輯器,顯示區(qū)顯示如下:

image

添加索引列

索引列可以看成記錄的編號,PQ 默認(rèn)從 0 開始,也可以選擇從 1 開始或者自定義。在 PQ 查詢編輯器界面中,切換到功能區(qū)【添加列】,找到【索引列】,這是一個下拉框,選擇 【從 1】:

image

這樣就添加了一個索引列:

image

添加索引列背后的 M 語言代碼為:

= Table.AddIndexColumn(source, "索引", 1, 1)

在公式欄中將“索引”改為“No.”,并拖到最左邊:

image

添加條件列

因為我們要對數(shù)據(jù)進(jìn)行不同的處理,默認(rèn)的查詢名“查詢1”不容易區(qū)分,我們將“查詢1”重命名,并作為數(shù)據(jù)處理的起點:選中左邊“查詢1”,右鍵彈出菜單,重命名為 scoresOriginal。

然后再選中 scoresOriginal,右鍵菜單,選擇“引用”,這樣就根據(jù)查詢 scoresOriginal 創(chuàng)建了一個新的查詢,將新查詢命名為 scoresLevel。因為是引用,所以當(dāng) scoresOriginal 的數(shù)據(jù)變化時, scoresLevel 的數(shù)據(jù)也跟著變化。

image

選中查詢 scoresLevel,切換到【添加列】,點擊【條件列】:
image

PQ 彈出對話框,在界面中按下圖進(jìn)行輸入:
image

完成第一個條件后,點擊“添加規(guī)則”,增加一行,設(shè)置第二個條件。用同樣的方法添加后面的條件,最后一個條件寫在 ELSE 里面:
image

操作過程的動圖如下:

image

這樣就實現(xiàn)了第一個需求:

image

進(jìn)入高級編輯器,查看第一個需求步驟的 M 代碼,如下:

let
    源 = scoresOriginal,
    已添加條件列 = Table.AddColumn(源, 
        "Level", 
        each if [Score] >= 90 then "A" 
        else if [Score] >= 85 then "B" 
        else if [Score] >= 60 then "C" 
        else "D")
in
    已添加條件列

檢查一下看自己是不是已經(jīng)可以看懂了。如果要查看 Table.AddColumn() 函數(shù)的幫助,包括參數(shù)的含義,有兩種辦法,方法一是查看 Microsoft 的 Docs,比如 Table.AddColumn() 函數(shù)的幫助文檔。第二種方法是新建一個空查詢,在公式欄輸入 =Table.AddColumn 不要輸入函數(shù)后面的括號,然后點擊確定。

image

行轉(zhuǎn)列

另外一種形式添加條件列是行轉(zhuǎn)列,之前我在博客中介紹過 pandas 中如何實現(xiàn)行轉(zhuǎn)列的方法,大家可以參考:

pandas 行轉(zhuǎn)列一種典型輸出報表的解決方法

在 PQ 中實現(xiàn)行轉(zhuǎn)列思路類似,操作也比較簡單。如果在 Excel 中實現(xiàn)類似的處理,條件復(fù)雜的時候則非常困難。

根據(jù)查詢 scoresOriginal 創(chuàng)建一個引用型的查詢,命名為 scoresTotal,在這個查詢中進(jìn)行匯總。切換到【添加列】功能區(qū),點擊【條件列】,先增加一列,列名為 "Chinese",這一列存儲學(xué)生的語文成績。注意下面界面中,輸出的地方要選擇 Score 這一列,而不是輸入一個值。

image

我們選擇 Score 列:

image

看一看動圖:

image

用同樣的方法,增加 Math 和 English 兩列,完成后的界面如下:

image

因為最終的輸出每個學(xué)生為一行,需要的數(shù)據(jù)進(jìn)行分組,切換到【轉(zhuǎn)換】功能區(qū),點擊【分組依據(jù)】:


image

進(jìn)入下面的界面,按照界面設(shè)置要輸出的字段。因為數(shù)據(jù)中包含“語文”、“數(shù)學(xué)”和“英語”,所以我們也需要有三個新列:

image

點擊確定后,PQ 顯示如下:

image

添加自定義列

我們還需要計算分?jǐn)?shù)的合計。切換到【添加列】功能區(qū),點擊【自定義列】,進(jìn)入設(shè)置自定義列界面。設(shè)置新列名為 Total,然后雙擊選擇右邊已有的列,設(shè)置公式如下:

image

點擊確定按鈕,完成第二個需求。完成后,再來看看 M 腳本,應(yīng)該基本上能看懂。

let
    源 = scoresOriginal,
    已添加條件列 = Table.AddColumn(源, "Chinese", each if [Subject] = "語文" then [Score] else null),
    已添加條件列1 = Table.AddColumn(已添加條件列, "Math", each if [Subject] = "數(shù)學(xué)" then [Score] else null),
    已添加條件列2 = Table.AddColumn(已添加條件列1, "English", each if [Subject] = "英語" then [Score] else null),
    分組的行 = Table.Group(已添加條件列2, {"Name"}, {{"Chinese", each List.Sum([Chinese]), type number}, {"Math", each List.Sum([Math]), type number}, {"English", each List.Sum([English]), type number}}),
    已添加自定義 = Table.AddColumn(分組的行, "Total", each [Chinese]+[Math]+[English])
in
    已添加自定義

本篇通過一個簡單的示例,演示了如何添加索引列、條件列和自定義列這幾種不同的操作方法。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容