Forum Discussion

rsrajkumar's avatar
rsrajkumar
Helper I
1 year ago
Solved

Transform and Transpose data

Hi,

I have loaded the below data form an excel file:

 

Column 1MTDYTD
Orders  
A3.05.0
B8.010.0
C2.03.0
D7.08.0
   
Sales  
A7.09.0
B15.017.0
C3.06.0
D5.07.0
   
Profit  
A6.07.0
B4.06.0
C2.04.0
D1.03.0

 

 

I would like to transform and transpose the data to the below format:

CategoryProductMTDYTD
OrdersA3.05.0
 B8.010.0
 C2.03.0
 D7.08.0
SalesA7.09.0
 B15.017.0
 C3.06.0
 D5.07.0
ProfitA6.07.0
 B4.06.0
 C2.04.0
 D1.03.0

 

Please let me know how this can be done

 

Thanks

  • Hey rsrajkumar,

    Your input table is a single table or there are 3 separate ones? If the former, then you can try these steps in Power Query (just paste the code in Advanced Editor to see it in action):

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8i9KSS0qVtJRUgDjWJ1oJUcgy1jPAEiaAkmQiBOQbQEWMTSACjkDOUZgIWOoiAuQbQ4WsYCKKKAYG5yYk4ppEUSHJZJFhqYQm8yRbII4xwzJJogic6w2BRTlp2WWYFhlhqIFZJUJirEIL5kgWWSI8GQsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Product = _t, MTD = _t, YTD = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Category", each if [Product] = "Orders" or [Product] = "Sales" or[Product] = "Profit" then [Product] else null),
        #"Filled Down" = Table.FillDown(#"Added Custom",{"Category"}),
        #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Product] <> " " and [Product] <> "Sales" and [Product] <> "Orders" and [Product] <> "Profit")),
        #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"Category", "Product", "MTD", "YTD"})
    in
        #"Reordered Columns"

     

    Output table:

     

6 Replies

  • wini_R's avatar
    wini_R
    Solution Supplier

    Hey rsrajkumar,

    Your input table is a single table or there are 3 separate ones? If the former, then you can try these steps in Power Query (just paste the code in Advanced Editor to see it in action):

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8i9KSS0qVtJRUgDjWJ1oJUcgy1jPAEiaAkmQiBOQbQEWMTSACjkDOUZgIWOoiAuQbQ4WsYCKKKAYG5yYk4ppEUSHJZJFhqYQm8yRbII4xwzJJogic6w2BRTlp2WWYFhlhqIFZJUJirEIL5kgWWSI8GQsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Product = _t, MTD = _t, YTD = _t]),
        #"Added Custom" = Table.AddColumn(Source, "Category", each if [Product] = "Orders" or [Product] = "Sales" or[Product] = "Profit" then [Product] else null),
        #"Filled Down" = Table.FillDown(#"Added Custom",{"Category"}),
        #"Filtered Rows" = Table.SelectRows(#"Filled Down", each ([Product] <> " " and [Product] <> "Sales" and [Product] <> "Orders" and [Product] <> "Profit")),
        #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"Category", "Product", "MTD", "YTD"})
    in
        #"Reordered Columns"

     

    Output table:

     

    • rsrajkumar's avatar
      rsrajkumar
      Helper I

      Hi wini_R , Thanks for your quick response. It is from a single table. What is the significance of the text that follows "Binary.FromText"

      • wini_R's avatar
        wini_R
        Solution Supplier

        Hey rsrajkumar,

        For your final solution it doesn't matter, that step should be replaced with your source data. It is here to simplify code sharing between users - anyone can grab it and use in their power query editor without the need to load/prepare some sample data. Essentially it is your input table encoded to Base64 format.