Zip vs Pivot – разбираем регулярную двухуровневую шапку

#АнатомияФункций – List.Zip, List.TransformMany



Всем привет!



Решил разобрать задачку из чата. Суть в разборе двухуровневой шапки с маленькой оговоркой – столбцы идут строго тройками. И по этому поводу мотать к таблице анпайвот с пайвотом – на мой вкус немного не по человечески. По этому поводу код:

let

f=(x)=>{[Type=x,Optional=false]},

g=(x)=>((a)=>List.Zip({dts,List.Transform(List.Split(List.Skip(x,3),3),(x)=>a&x)}))(List.FirstN(x,3)),

h=(x,y)=>List.Combine(y),



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

dts = List.Buffer(List.Zip({List.Transform(List.Distinct(List.Skip(Record.ToList(from{0}),3)),Date.From)})),

nms = {"Дата"}&List.FirstN(Record.ToList(from{1}),6),

types = f(Date.Type)&List.Repeat(f(Text.Type),6),

typ = type table Type.ForRecord(Record.FromList(types,nms),false),



lst = Table.ToList(Table.Skip(from,2),(x)=>x),

tr = List.TransformMany(lst,g,h),

to = Table.FromList(tr,(x)=>x,typ)



in

to


Ну а что тут к чему рассказываю:

На рутубе

В дзене

А с исходниками всё давно лежит на Sponsr.Ru



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



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

Всех благ!

@buchlotnik