GroupKind.Local + Table.ReverseRows или группировка снизу
#АнатомияФункций – Table.Group, Table.Reverse.Rows
Всем привет!
В старом добром танке уже был пост, но поскольку никто не читает старый танк, записал видео.
Разбираем локальную группировку, в ходе которой необходимо ориентироваться на последнюю строку в группе (или на предыдущую строку – это эквивалентно).
Сначала решаем в лоб:
А потом по-человечески:
Зачем и почему оно так смотрим:
С исходниками на спонсоре
А также на рутубе, в дзене и скоро зальётся на ютуб
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik
#АнатомияФункций – Table.Group, Table.Reverse.Rows
Всем привет!
В старом добром танке уже был пост, но поскольку никто не читает старый танк, записал видео.
Разбираем локальную группировку, в ходе которой необходимо ориентироваться на последнюю строку в группе (или на предыдущую строку – это эквивалентно).
Сначала решаем в лоб:
let
f=(x)=>[a=x{0},
b=Table.Last(x)[DateTime],
c=[Date=a[Date],Agent=a[Agent],Ready=a[DateTime],Logout=b,Duration=Duration.TotalMinutes(Logout-Ready)],
d=if Table.RowCount(x)<2 then null else c][d],
from = Excel.CurrentWorkbook(){[Name="big"]}[Content],
fltr = Table.SelectRows(from,(x)=>x[State]="Ready" or x[State]="Logout"),
lst = List.Buffer({"Logout"}&fltr[State]),
add = Table.AddIndexColumn(fltr,"prev"),
tr = Table.TransformColumns(add,{"prev",(x)=>lst{x}}),
gr = Table.Group(tr,"prev",{"tmp",f},GroupKind.Local,(s,c)=>Number.From(c="Logout")),
to = Table.FromRecords(List.RemoveNulls(gr[tmp]))
in
to
А потом по-человечески:
let
f=(x)=>[b=x{0}[DateTime],
a=Table.Last(x),
c=[Date=a[Date],Agent=a[Agent],Ready=a[DateTime],Logout=b,Duration=Duration.TotalMinutes(Logout-Ready)],
d=if Table.RowCount(x)<2 then null else c][d],
from = Excel.CurrentWorkbook(){[Name="big"]}[Content],
fltr = Table.SelectRows(from,(x)=>x[State]="Ready" or x[State]="Logout"),
tr = Table.ReverseRows(fltr),
gr = Table.Group(tr,"State",{"tmp",f},GroupKind.Local,(s,c)=>Number.From(c="Logout")),
to = Table.FromRecords(List.RemoveNulls(gr[tmp]))
in
to
Зачем и почему оно так смотрим:
С исходниками на спонсоре
А также на рутубе, в дзене и скоро зальётся на ютуб
Лайк, коммент, подписка приветствуются )))
Надеюсь, было полезно.
Всех благ!
@buchlotnik