Power Query M: общее количество в группах - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу сделать промежуточный итог MaxDurationOrder в группах, а не во всем наборе данных. У меня есть следующая формула, которая работает для всех строк:

= Table.AddColumn(#"Added Index", "Running Total", each List.Sum(List.FirstN(#"Added Index"[MaxDurationOrder],[Index])))

Но в моем наборе данных есть столбец для Варианта 1, Варианта 2, Варианта 3, на который я хотел бы разделить промежуточные итоги. Как бы получить промежуточную сумму в рамках каждого варианта?

1 Ответ

1 голос
/ 28 апреля 2020

Добавить индекс. Используйте приведенный ниже код для добавления пользовательского столбца, который добавляет MaxDurationOrder, если он имеет более низкий индекс и тот же GroupColumn

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index","RunningTotal",(i)=>List.Sum(Table.SelectRows(#"Added Index", each [GroupColumn]=i[GroupColumn] and [Index]<=i[Index]) [MaxDurationOrder]), type number ),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index"})
in  #"Removed Columns"

В качестве альтернативы, из двух частей, создайте функцию fnRunningSum

(MyTable as table) =>
let Source = Table.Buffer(MyTable),
MyColumn="MaxDurationOrder",    
MyColumn2=Table.Column(Source,MyColumn),
TableType = Value.Type(Table.AddColumn(Source, "Cumul", each null, type number)),
Cumulative = List.Skip(List.Accumulate(MyColumn2,{0},(cumulative,MyColumn) => cumulative & {List.Last(cumulative) + MyColumn})),
Cumu = Table.FromColumns(Table.ToColumns(Source)&{Cumulative},TableType)
in Cumu

Группировать с помощью функции затем разверните

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Sum = Table.Group(Source, {"GroupColumn"}, {{"AllData",fnRunningSum}}),
#"Expanded AllData" = Table.ExpandTableColumn(Sum, "AllData", {"MaxDurationOrder", "Cumul"}, {"MaxDurationOrder", "Cumul"})
in "Expanded AllData"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...