Table.Group函式使用自定義函式進行彙總。
阿新 • • 發佈:2018-11-16
今天用一個例子講解一下在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
結果如圖所示,符合預期: