Table.Group + List.Generate = сложная пользовательская агрегация

#АнатомияФункций – Table.Group



Всем привет!



Записал очередной разбор задачки из чата – получилось немножко долго, потому как задачка комплексная, но должно быть небезынтересно. Код тут:

let

f=(x)=>[a=List.Transform(nms2,(i)=>List.Sum(Table.Column(x,i))),

b=List.Min(x[Период с]),

c=List.Max(x[Период по]),

gen=List.Generate( ()=>b,

(x)=>x<Date.EndOfMonth(c),

(x)=>Date.AddMonths(x,1),

(x)=>{Date.StartOfMonth(x),Date.EndOfMonth(x),Date.StartOfMonth(x)}),

n=List.Count(gen)-1,

tr=List.ReplaceRange(gen,n,1,{{gen{n}{0},c,gen{n}{0}}}),

tr1=List.ReplaceRange(tr,0,1,{{b,tr{0}{1},tr{0}{2}}&a})][tr1],



from = Excel.CurrentWorkbook(){[Name="М3"]}[Content],

nms1 ={"Период с","Период по","Пеирод месяц"},

nms2 = {"Сумма с НДС","Сумма без НДС","Сумма НДС"},

gr=Table.Group(from,"Контрагент",{{"Площадка",(t)=>Text.Combine(List.Distinct(t[Площадка]),", ")},{"tmp",f}}),

sort=Table.Sort(gr,"Контрагент"),

exp=Table.ExpandListColumn(sort,"tmp"),

splt=Table.SplitColumn(exp,"tmp",(x)=>x,nms1&nms2),

to=Table.TransformColumnTypes(splt,List.Transform(nms1,(x)=>{x,type date})&List.Transform(nms2,(x)=>{x,type number}))

in

to




Ну а что тут к чему, как обычно, рассказывается на Ютубе



Лайк, коммент, подписка приветствуются )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik