Table.Group + List.Generate = сложная пользовательская агрегация
#АнатомияФункций – Table.Group
Всем привет!
Записал очередной разбор задачки из чата – получилось немножко долго, потому как задачка комплексная, но должно быть небезынтересно. Код тут:
Ну а что тут к чему, как обычно, рассказывается на Ютубе
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik
#АнатомияФункций – 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