3.8Kпросмотров
24 ноября 2025 г.
Score: 4.2K
Генератор со словарём внутри локальной группировки
#АнатомияФункций – List.Generate Всем привет!
В чат подкинули задачку, на этот раз про статусы, добавление строк и прочие радости. По этому поводу родился код:
let g=(x,y)=>{x&[status="lost",service=null,unit=null,period=y]}, f=(x)=>[lst = List.Buffer(Table.ToRecords(x)), n = List.Count(lst), sd = lst{0}[period], fd = Date.AddYears(List.Last(lst)[period],1), gen = List.Generate( ()=>[i=0,r=lst{i},d=sd,rd=null,l=Record.FromList({""},{r[service]}),nl=false], (x)=>x[i]<n, (x)=>[ i=x[i]+1,r=lst{i},d=r[period], ns=Record.HasFields(x[l],r[service]), pd=Date.AddYears(x[d],1), nl=d>pd, l=if nl then Record.FromList({""},{r[service]}) else if ns then x[l] else Record.AddField(x[l],r[service],""), rd=if nl then d else x[rd]], (x)=>(if x[nl] then g(lst{x[i]-1},x[pd]) else {}) &{x[r]&[status=(if x[d]=sd then "new" else if x[d]=x[rd] then "returned" else if x[ns] then "active" else "new service")]}), comb = List.Combine(gen)&(if td>fd then g(List.Last(lst),fd) else {})][comb], from = Excel.CurrentWorkbook(){[Name="Sales"]}[Content], td = DateTime.LocalNow(), gr = Table.Group(from,"id",{"tmp",f},GroupKind.Local), to = Table.FromRecords(List.Combine(gr[tmp]))
in to Ну а что тут к чему – смотрим на рутубе, ютубе, а исходники как всегда лежат на спонсоре. Лайк, коммент, подписка приветствуются ))) Надеюсь, было полезно.
Всех благ!
@buchlotnik