1. 程式人生 > >Table.Group函式使用自定義函式進行彙總。

Table.Group函式使用自定義函式進行彙總。

今天用一個例子講解一下在Power Query中,Table.Group()函式如何使用自定義函式進行彙總。

該函式的基本語法和使用示例參考:

我們看上圖示例可以明白,這個函式是以第二引數作為分組欄位(或者欄位列表),第三引數就是一個列表。示例中“total”就是彙總後結果的欄位名稱。那麼是對哪個欄位分組列表進行什麼樣的彙總方式呢?我們看到List.Sum([price]),就可以明白是對錶中的price欄位進行分組加和的彙總。如果我們使用自定義函式fx我們就要知道我們傳遞的引數是什麼。從list.sum求的是根據分組後的每個子表進行price的求和。那麼我們就知道我們傳遞給函式的是分組的列表。

那麼如何使用自定義函式呢?我們來看一下如下圖所示的例子。我們要求的是按照字母統計數字的個數以及數字組合列表。

 求次數比較簡單,對分組的欄位使用List.Count()函式就能搞定。那麼如何進行合併呢。我們有Text.Combine()函式可以合併列表中的成員。這裡因為是數字,我們不能直接合並,需要將成員轉化為text型別再進行合併。因為上面已經說明彙總是對分組後的欄位列表的某種形式的聚合。我們需要傳遞的引數應該是一個list的型別。看下面的定義方式:

fx=(x as list)=>Text.Combine(List.Transform(x,each Text.From(_)),",")

這個自定義函式很好理解.就是將list裡面的每個成員轉化為text型別,然後以逗號進行連線起來。

最後整個彙總的M程式碼如下:

let
    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
    fx=(x as list)=>Text.Combine(List.Transform(x,each Text.From(_)),","),
    data=Table.Group(源,"字母",{{"次數",each List.Count([數字])},{"數字合併",each fx([數字])}})
in
    data

結果如圖所示,符合預期: