Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
2 years ago
Solved

Aggregate in numerical order

Hi - I will be glad if you can help me to solve following:   My current table consist of manufacturing Order which includes 3 operations (sometimes more) and a final plan date for the last operatio...
  • dufoq3's avatar
    dufoq3
    2 years ago

    Hi Anonymous, why not to use Power Query solution? If you don't know how to use this query - read note at the botom of my post.

     

    I've added 3 more rows to your sample data just to demonstrate that we consider every Order # separately.

     

    EDIT: 2024-03-28 15:07 GMT+1: I've edited my code, and now it is realy fast also with big data

     

    Result

     

    let
        fn_AggLT = 
            (lst as list)=>
            List.Reverse(List.Generate(
                ()=> [ x = List.Count(lst)-1, y = lst{x} ],
                each [x] >= 0,
                each [ x = [x]-1, y = [y] + lst{x} ],
                each [y] )
            ),
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjMwMDIwUNJRMjQwMDYB0UDsnJOamAekjYDYWN/IQt/IwMhEKVYHi3KQEuf8xBIgZU5YtTEQByQmZ0PtwaLaEIdTjAkrR3KKBWHVSE4xQVUdCwA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order #" = _t, Product = _t, Operation = _t, #"Operation name" = _t, #"Operation Leadtime" = _t, #"Order Plan date" = _t]),
        ChangedType = Table.TransformColumnTypes(Source,{{"Order #", Int64.Type}, {"Product", Int64.Type}, {"Operation", Int64.Type}, {"Operation name", type text}, {"Operation Leadtime", type number}, {"Order Plan date", type date}}, "en-US"),
        // Added Aggregated Leadtime into inner [All] table
        GroupedRows = Table.Group(ChangedType, {"Order #"}, {{"All", each Table.FromColumns(Table.ToColumns(_) & {fn_AggLT(List.Buffer([Operation Leadtime]))}, Value.Type(_ & #table(type table[Aggregated Leadtime=number], {{}}))), type table}}),
        CombinedAll = Table.Combine(GroupedRows[All]),
        Ad_StartDate = Table.AddColumn(CombinedAll, "Start Date", each Date.AddDays([Order Plan date], -[Aggregated Leadtime]), type date)
    in
        Ad_StartDate