Forum Discussion

Lio123's avatar
Lio123
Advocate I
1 year ago
Solved

Urgent Help - Power Query - Data Transformation

Dear Developers,  My data looks like below, I want build the same matrix in Power BI. Can you please help me how to handle this in Power Query data transformation. This is a double header case but...
  • danextian's avatar
    1 year ago

    Hi jaineshp 

    You will need to shape your data so the two headers are parallel in two separate columns. You can do that by accessing  the first and second row before promoting the  headers and use the combination of the two as the new column names. Unpivot your data after then split the attribute into two separate columns.

    let
        Source = Excel.Workbook(File.Contents("D:\testdata.xlsx"), null, true),
        Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
        #"Automatically Renamed Columns" = 
            let 
                tbl = Sheet1_Sheet,
                header1 = Record.ToList(Sheet1_Sheet{0}),
                header2 = Record.ToList(Sheet1_Sheet{1}),
                zipped = List.Zip({header1, header2}),
                combined = List.Transform(
                    zipped,
                    //each (if _{0} = null then _{1} else _{0}) & "__" & _{1}
                    //each (if _{0} = null then _{1} & "" else _{0}) & "__" & _{1}
                    each (if _{0} = null then "" else _{0}) & "__" & _{1}
                ),  
    
                OriginalColumns = Table.ColumnNames(tbl),
                renamevalues = List.Zip({OriginalColumns,combined }),
                renamed = Table.RenameColumns(tbl, renamevalues)
            in
                renamed,
        #"Removed Top Rows" = Table.Skip(#"Automatically Renamed Columns",2),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Removed Top Rows", {"__Type", "__Qty", "__USD"}, "Attribute", "Value"),
        #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Other Columns",{{"__Type", "Type"}, {"__Qty", "Qty"}, {"__USD", "USD"}}),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Renamed Columns", "Attribute", Splitter.SplitTextByDelimiter("__", QuoteStyle.Csv), {"Attribute.1", "Attribute.2"}),
        #"Renamed Columns1" = Table.RenameColumns(#"Split Column by Delimiter",{{"Attribute.1", "Month"}, {"Attribute.2", "Category"}}),
        #"Added Custom" = Table.AddColumn(#"Renamed Columns1", "Month Sort", each Date.Month(Date.From([Month] & "1, 2025"))),
        #"Changed Type" = Table.TransformColumnTypes(#"Added Custom",{{"Value", Int64.Type}, {"Month Sort", Int64.Type}, {"Type", type text}, {"Qty", type text}, {"USD", type text}})
    in
        #"Changed Type"

    Please see the attached sample pbix.