Forum Discussion

pedroccamaraDBI's avatar
pedroccamaraDBI
Post Partisan
3 years ago
Solved

Pivot or...?

Hi everyone, We have a system here that for every employee, that have to check in and check out with their own card. Of course not everybody do it by the book but that's why "we" are here, to see wh...
  • AlienSx's avatar
    AlienSx
    3 years ago

    okay, i think i've fixed that bug. Try this: 

    let
        Source = your_table,
        f = (tbl as table) as table => 
            [rows = Table.ToRecords(tbl),
            acc = 
                List.Accumulate(
                    rows,
                    {},
                    (s, c) => 
                        if c[CLOCK_TYPE] = 51 then s & {c & [CHECKIN = c[DATETIMECHECK]] & [CHECKOUT = null]} 
                        else if List.IsEmpty(s) 
                            then s & {c & [CHECKIN = null] & [CHECKOUT = c[DATETIMECHECK]]}
                            else if List.Last(s)[CHECKOUT] = null 
                                then List.RemoveLastN(s, 1) & {Record.TransformFields(List.Last(s), {"CHECKOUT", each c[DATETIMECHECK]})}
                                else s & { c & [CHECKIN = null] & [CHECKOUT = c[DATETIMECHECK]]}     
                ),
            out = Table.FromRecords(acc)][out],
        g = Table.Group(Source, {"SHIFT_NUMBER", "EMPLOYEE_CODE"}, {"all", each f(Table.Sort(_, "ABS_NUMBER"))}),
        expand = Table.ExpandTableColumn(g, "all", {"CLOCK_DATE", "CHECKIN", "CHECKOUT"})
    in
        expand