Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
2 years ago

Transform multiple columns based on values in another column

Hello,

 

I am trying to group, split, or somehow transform multiple columns (Years 2020-2023) based on values in another column (Source) for visualization in Power BI. The original data comes from Excel. How can I do the following?

 

This is the raw data I have right now, where I have multiple orders per customer, and each order being estimated based on Source A, B, and C. Specifically, I have 3 orders from Customer 1, and rows 2-4 are about the 1st order. In these 3 rows, values are the same for columns aaa, bbb, ddd, eee, fff, and ggg, so it is essentially a repetition. I have numbers in columns 2020-2023, but I don't want to view Source horizontally. Instead, I would like to incorporate Source into the Year columns

 

 

This is the end product I want. Each order is only 1 row, and Source is incorporated into the Year columns such that I have 2020A, 2020B, 2020C, 2021A... and so on.

 

Really appreciate your help. Thanks!

7 Replies

  • foodd's avatar
    foodd
    Community Champion

    Hello Anonymous , and thank you for sharing a question with the Community.  This reply is informational. Please follow the decorum of the Community Forum when asking a question.

    Please share your work-in-progress Power BI Desktop file (with sensitive information removed) and any source files in Excel format that fully address your issue or question in a usable format (not as a screenshot). You can upload these files to a cloud storage service such as OneDrive, Google Drive, Dropbox, or to a Github repository, and then provide the file's URL.

    https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216

    Please show the expected outcome based on the sample data you provided.

    https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523/highlight/true#M607150

    This allows members of the Forum to assess the state of the model, report layer, relationships, and any DAX applied.

     

    If your requirement is solved, please make THIS ANSWER a SOLUTION ✔️ and help other users find the solution quickly. Please hit the LIKE 👍 button if this comment helps you.  Proud to be a Super User!

    • Anonymous's avatar
      Anonymous
      Not applicable

      Thank you for the information! Have provided the sample data in my update. Thank you!

  • Anonymous's avatar
    Anonymous
    Not applicable

    ** Update **

     

    Raw Excel data I have currently:

    aaabbbCustomerdddeeefffgggSource2020202120222023
    a1b1Customer 1d1e1f1g1Source A    
    a1b1Customer 1d1e1f1g1Source B    
    a1b1Customer 1d1e1f1g1Source C    
    a2b2Customer 1d2e2f2g2Source A    
    a2b2Customer 1d2e2f2g2Source B    
    a2b2Customer 1d2e2f2g2Source C    
    a3b3Customer 1d3e3f3g3Source A    
    a3b3Customer 1d3e3f3g3Source B    
    a3b3Customer 1d3e3f3g3Source C    
    a4b4Customer 2d4e4f4g4Source A    
    a4b4Customer 2d4e4f4g4Source B    
    a4b4Customer 2d4e4f4g4Source C    
    a5b5Customer 2d5e5f5g5Source A    
    a5b5Customer 2d5e5f5g5Source B    
    a5b5Customer 2d5e5f5g5Source C    
    a6b6Customer 2d6e6f6g6Source A    
    a6b6Customer 2d6e6f6g6Source B    
    a6b6Customer 2d6e6f6g6Source C    
    a7b7Customer 2d7e7f7g7Source A    
    a7b7Customer 2d7e7f7g7Source B    
    a7b7Customer 2d7e7f7g7Source C    
    a8b8Customer 3d8e8f8g8Source A    
    a8b8Customer 3d8e8f8g8Source B    
    a8b8Customer 3d8e8f8g8Source C    

     

    And this is the end result I am looking for:

    aaabbbCustomerdddeeefffggg2020 A2020 B2020 C2021 A2021 B2021 C2022 A2022 B2022 C2023 A2023 B2023 C
    a1b1Customer 1d1e1f1g1            
    a2b2Customer 1d2e2f2g2            
    a3b3Customer 1d3e3f3g3            
    a4b4Customer 2d4e4f4g4            
    a5b5Customer 2d5e5f5g5            
    a6b6Customer 2d6e6f6g6            
    a7b7Customer 2d7e7f7g7            
    a8b8Customer 3d8e8f8g8           

     

     

     

     

    Thank you!

    • adudani's avatar
      adudani
      Memorable Member

      hi Anonymous ,

       

      Create a blank query , copy and paste the below code into the advanced editor.

      let
          Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("rdPNCoJQEIbhWxHXbvJ/W15CS3FROXNWIVjef72rpDMcmAjkQ2fxwLtwHPPLIS/yKzNsj+dylzXjY2aEUSYw52Vbb5Id36+fZyp+MU5/MIbYKDHKyOAijDKhTLa4DaPFbRgtFUYVGVyEUSZUyRa3YbS4DaOlxqj3Bu0zF2GUCXWyxW0YLW7DaGkwmsjgIowyoUm2uA2jxW0YLS1GGxlchFEmtMkWt2G0uA2jpcPoIoOLMMqELtniNowWt2G09Bj93uD/mrkIo0zoky1uw2hxG18t0ws=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [aaa = _t, bbb = _t, Customer = _t, ddd = _t, eee = _t, fff = _t, ggg = _t, Source = _t, #"2020" = _t, #"2021" = _t, #"2022" = _t, #"2023" = _t]),
          Columns_not_to_Unpivot = Table.AddIndexColumn ( Table.FromList ( List.FirstN ( Table.ColumnNames( Source) , 8))  , "Index" ,1,1),
          #"Removed Other Columns" = Table.SelectColumns(Columns_not_to_Unpivot,{"Column1"}),
          Columns_not_to_Unpivot_List = #"Removed Other Columns"[Column1],
          Refer_to_Source = Source,
          #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Refer_to_Source, Columns_not_to_Unpivot_List, "Year", "Value"),
          #"Merged Source and Year" = Table.CombineColumns(#"Unpivoted Other Columns",{"Source", "Year"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Merged")
      in
          #"Merged Source and Year"

       

      Output: 

       

       

       

      The last step would be the structure the Merge and Value column as needed etc.

       

      However, I recommend you load it as is in Power query and use a matrix visual instead for the same.

       

      If the goal is to create a pivot table using Power query or similar , refer to Subtotal and Column Total in Power Query - YouTube 

      • Anonymous's avatar
        Anonymous
        Not applicable

        Thank you! I would need to use a table instead of matrix for the visualization. 

         

        Based on the output you provided, how can I merge the rows in the same order (ex: the a1s, the a2s) into one row, with the Merged column expanded as multiple columns?

         

        This is what I'm referring to:

        aaabbbCustomerdddeeefffA2020A2021A2022A2023B2020B2021B2022B2023...
        a1 Customer 1            
        a2 Customer 1