Zip vs Pivot – разбираем регулярную двухуровневую шапку
#АнатомияФункций – List.Zip, List.TransformMany
Всем привет!
Решил разобрать задачку из чата. Суть в разборе двухуровневой шапки с маленькой оговоркой – столбцы идут строго тройками. И по этому поводу мотать к таблице анпайвот с пайвотом – на мой вкус немного не по человечески. По этому поводу код:
Ну а что тут к чему рассказываю:
На рутубе
В дзене
А с исходниками всё давно лежит на Sponsr.Ru
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik
#АнатомияФункций – 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