Forum Discussion

ssk_1984's avatar
ssk_1984
Helper II
1 year ago
Solved

Unpivot or Transpose Header in row level into Column also values

Team help me to bring the below tables values into desired output, is there any way to pivot/unpivot/traspose the values.

NameSuresh
Sales10
NameRaj
Sales20
NameSunil
Sales30

Inthe above table records are stored as one by one , actual requirement to transpose above values into 

NameSales
Suresh10
Raj20
Sunil30
  • One way to do this is to;

    1) group by the first column choosing do not aggregate so you get all the rows

    2) add an index column to the resulting nested tables

    3) expand the nested tables

    4) pivot the table on the first column, choosing not to aggregate the values in the second column

    5) remove the index column

    Here is an example code...

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVXSUQouLUotzlCK1YlWCk7MSS0GChkagLlQBUGJWSiyRiiywaV5mTko8sZA+VgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Column1"}, {{"All", each Table.SelectColumns(_, {"Column2"}), type table [Column1=text, Column2=text]}}),
        Custom1 = Table.TransformColumns(#"Grouped Rows", {{"All", each Table.AddIndexColumn(_, "index", 1, 1)}}),
        #"Expanded All" = Table.ExpandTableColumn(Custom1, "All", {"Column2", "index"}, {"Column2", "index"}),
        #"Pivoted Column" = Table.Pivot(#"Expanded All", List.Distinct(#"Expanded All"[Column1]), "Column1", "Column2"),
        #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"index"})
    in
        #"Removed Columns"
  • Hi ssk_1984, another solution:

     

    Before

     

    After

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVXSUQouLUotzlCK1YlWCk7MSS0GChkagLlQBUGJWSiyRiiywaV5mTko8sZA+VgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
        Transformed = Table.FromRows(List.Split(Source[Column2], 2), {"Name", "Sales"})
    in
        Transformed
  • Hi ssk_1984 

     

    another solution

    let
    Source = Your_Source,
    Group = Table.Group(Source, {"Column1"}, {{"Data", each [Column2]}}),
    Table = Table.FromColumns(Group[Data], Group[Column1])
    in
    Table

    Stéphane 

10 Replies

  • dufoq3's avatar
    dufoq3
    Community Champion

    Hi ssk_1984, another solution:

     

    Before

     

    After

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVXSUQouLUotzlCK1YlWCk7MSS0GChkagLlQBUGJWSiyRiiywaV5mTko8sZA+VgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
        Transformed = Table.FromRows(List.Split(Source[Column2], 2), {"Name", "Sales"})
    in
        Transformed
    • ssk_1984's avatar
      ssk_1984
      Helper II

      Hi Dufo,

       

      i have one more query on the same request,

      Now my data set /column increased earlier it depends on two column, now i have 4 different column.

       

      values to be shown like the below samples...help me out how to convert these values in pivot/unpivot

       

      Nowcolumn and data present in the data set
          
      WeekDateProcessMapIDFieldNameFieldValue
      12-Apr-256229Connect_Duration(Days)62
      12-Apr-256229Connect RAGGreen
      12-Apr-256229A&R RAGGreen
      12-Apr-256229Execute_Duration(Days)160
      12-Apr-256229Execute RAGRed
      12-Apr-256229ProcessTypeVoice
      12-Apr-256229TransitionTypeStandard
      16-Apr-256229Connect_Duration(Days)65
      16-Apr-256229Connect RAGRed
      16-Apr-256229A&R RAGRed
      16-Apr-256229Execute_Duration(Days)180
      16-Apr-256229Execute RAGGreen
      16-Apr-256229ProcessTypeNon Voice
      16-Apr-256229TransitionTypeStandard

       

       ThenRequired format/final format required      
        only Field Name & Field Value to transformed      
      WeekDateProcessMapIDConnect_Duration(Days)Connect RAGA&R RAGExecute_Duration(Days)Execute RAGProcessTypeTransitionType
      12-Apr-25622962GreenGreen160RedVoiceStandard
      16-Apr-25622965RedRed180GreenNon VoiceStandard
      • dufoq3's avatar
        dufoq3
        Community Champion

        Hi ssk_1984, try this:

         

        Ouput

         

        Procedure

         

  • One way to do this is to;

    1) group by the first column choosing do not aggregate so you get all the rows

    2) add an index column to the resulting nested tables

    3) expand the nested tables

    4) pivot the table on the first column, choosing not to aggregate the values in the second column

    5) remove the index column

    Here is an example code...

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8kvMTVXSUQouLUotzlCK1YlWCk7MSS0GChkagLlQBUGJWSiyRiiywaV5mTko8sZA+VgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Column1"}, {{"All", each Table.SelectColumns(_, {"Column2"}), type table [Column1=text, Column2=text]}}),
        Custom1 = Table.TransformColumns(#"Grouped Rows", {{"All", each Table.AddIndexColumn(_, "index", 1, 1)}}),
        #"Expanded All" = Table.ExpandTableColumn(Custom1, "All", {"Column2", "index"}, {"Column2", "index"}),
        #"Pivoted Column" = Table.Pivot(#"Expanded All", List.Distinct(#"Expanded All"[Column1]), "Column1", "Column2"),
        #"Removed Columns" = Table.RemoveColumns(#"Pivoted Column",{"index"})
    in
        #"Removed Columns"
  • Hi ssk_1984 

     

    another solution

    let
    Source = Your_Source,
    Group = Table.Group(Source, {"Column1"}, {{"Data", each [Column2]}}),
    Table = Table.FromColumns(Group[Data], Group[Column1])
    in
    Table

    Stéphane 

  • Hi ssk_1984 , here's a quick way to solve your problem. I am attaching two images, first of the M code snippet used and second of the ouput. Thanks!

     

    • ssk_1984's avatar
      ssk_1984
      Helper II

      Thank you for your quick revert, one more query rather than only two column...in my table has more than two column...i can add for each by col3, col4,col5 ...like that....Suggest me pls

       

      • SundarRaj's avatar
        SundarRaj
        Super User

        Could you be a little more specific with regards to your query? I didn't quite understand it correctly