Два словаря, Combine, Expand и Split – а как вы провели выходные?

#АнатомияФункций – приёмы



Всем привет!

Подкинули в чат задачку, такую чтоб прям на фильтрацию по списку, группировку, превращение одной строки в несколько, да ещё и с дополнительными преобразованиями значений… Короче классную и комплексную )))

По этому поводу код:

let

lst = List.Buffer(Excel.CurrentWorkbook(){[Name="artlist"]}[Content][Value]),

dict = Record.FromList(List.Repeat({true},List.Count(lst)),lst),

f=(x)=>Record.FieldOrDefault(dict,x[#"Артикул (продукции)"],false),

g=(x)=>not f(x),

h=(x)=>Table.SelectRows(from,x),



from = Table.Buffer(Excel.CurrentWorkbook(){[Name="combatset"]}[Content]),

nms = List.Buffer({"Реквизиты спецификации"}&List.LastN(Table.ColumnNames(from),4)),

dict1 = Record.FromTable(Table.RenameColumns(Table.Group(h(f),"Партия (продукции)",{"Value",(x)=>Table.SelectColumns(x,nms&{"Сдано на склад"})}),{"Партия (продукции)","Name"})),



j=(x)=>[a=Record.FieldOrDefault(dict1,x{3}),

b=List.Last(x),

c=Table.ToList(a,(x)=>List.FirstN(x,4)&{x{4}/x{5}*b}),

d=if a = null then {x} else c][d],



cmb = Table.CombineColumns(h(g),nms,j,"tmp"),

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

to = Table.SplitColumn(exp,"tmp",(x)=>x,nms)



in

to




Ну а что тут к чему – разбираю на Дзене



Файл с исходниками уже лежит на sponsr



А с ютубом всё – даже в студию не смог зайти зашёл - всё будет, но позже





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



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

Всех благ!

@buchlotnik