Forum Discussion

irfan_abdrhman's avatar
2 years ago
Solved

Combining Columns to create Main Columns

The table below is the data that i have which can't be changed until is transformed into power query What I want it to become is the columns become Material, Type/Grade, Quantity Delivered and o...
  • dufoq3's avatar
    dufoq3
    2 years ago

    Expected Outcome 1

    Result

    let
        Source = Excel.Workbook(File.Contents("C:\Downloads\PowerQueryForum\irfan_abdrhman\MRDO.xlsx"), null, true),
        #"Dashboard _Sheet" = Source{[Item="Dashboard ",Kind="Sheet"]}[Data],
        FilteredRows = Table.SelectRows(#"Dashboard _Sheet", each ([Column1] <> null)),
        PromotedHeaders = Table.PromoteHeaders(FilteredRows, [PromoteAllScalars=true]),
        Transformed = [ a = Table.ColumnNames(PromotedHeaders),
        b = List.Select(a, (x)=> Text.StartsWith(x, "Material")),
        c1 = {"MRDO NO", "MRDO DATE"},
        c2 = {"Requestor", "Delivery Location"},
        c3 = List.RemoveMatchingItems(a, c1 & c2),
        d = Table.SelectColumns(PromotedHeaders, c3),
        e = List.TransformMany(
                Table.ToRows(PromotedHeaders),
                each List.Split(List.RemoveLastN(List.Skip(_,2),2), List.Count(c3) / List.Count(b)),
                (x,y)=> List.FirstN(x, 2) & y & List.LastN(x, 2)),
        f = List.Transform({ 0..List.PositionOf(a, List.Skip(b){0}) -1 }, (x)=> a{x}),
        g = Table.FromRows(e, Value.Type(Table.SelectColumns(PromotedHeaders, f & c2))),
        h = Table.TransformColumnNames(g, (x)=> Text.Remove(x, {"0".."9"}))
      ][h],
        FilteredRows2 = Table.SelectRows(Transformed, each ([#"Material "] <> null)),
        ChangedType = Table.TransformColumns(FilteredRows2, {
            //{"MRDO NO", each Text.PadStart(Text.From(_), 3, "0"), type text},
            {"MRDO DATE", each Date.ToText(Date.From(_), [Format="d-MMM-yy", Culture="en-US"]), type text} })
    in
        ChangedType