Forum Discussion

jaryszek's avatar
jaryszek
Super User
4 years ago
Solved

Merge values from rows into one row

Hi Guys,

 

i have table like here:

1DeploymentsMap
6DeploymentsMap
3DeploymentsMap
6DeploymentsMap

 

and what i want to get is:

TableName|Index

DeploymentsMap1;3;6

 

how to do this?

I will have multiple TableNAmes in a column...

 

Please help,
Jacek

  • Anonymous's avatar
    Anonymous
    4 years ago

    Hi jaryszek ,

     

    Please try:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJJLcjJr8xNzSsp9k0sUIrViVYywy5sjF3Y0NrI2tjaxNoUu7QRUNjRyRnMNoGxYwE=", 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}}),
        #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Column1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Removed Duplicates" = Table.Distinct(#"Split Column by Delimiter"),
        #"Grouped Rows" = Table.Group( #"Removed Duplicates", {"Column2"}, {{"Combined", each Text.Combine(List.Sort(List.Distinct([Column1])), ";")}})
    in
        #"Grouped Rows"

     

    Best Regards,
    Eyelyn Qin
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

4 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi jaryszek ,

     

    Please try:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJJLcjJr8xNzSsp9k0sUIrViVYywy5sjF3Y0NrI2tjaxNoUu7QRUNjRyRnMNoGxYwE=", 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}}),
        #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"Column1", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Removed Duplicates" = Table.Distinct(#"Split Column by Delimiter"),
        #"Grouped Rows" = Table.Group( #"Removed Duplicates", {"Column2"}, {{"Combined", each Text.Combine(List.Sort(List.Distinct([Column1])), ";")}})
    in
        #"Grouped Rows"

     

    Best Regards,
    Eyelyn Qin
    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

  • And the problem which i can have also that sometimes 

    Value can be an array like "1;2;3;4;5" and in this case i should keep whole array plus append missing rows.

    So in this case i would append "6" to get "1;2;3;4;5;6"

     

    Best,
    Jacek

  • mahoneypat's avatar
    mahoneypat
    Microsoft Employee

    You can do that by creating a Group By step on the Home tab, and then modifying the code in the Formula Bar to match this example.  To see how it works, just create a blank query, open the Advanced Editor and replace the text there with the M code below.

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJJLcjJr8xNzSsp9k0sUIrViVYywy5sTLzqWAA=", 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", {"Column2"}, {{"Combined", each Text.Combine(List.Sort(List.Distinct([Column1])), ";")}})
    in
        #"Grouped Rows"

     

    Pat

    • jaryszek's avatar
      jaryszek
      Super User

      Thank you it is working!

       

      One more thing. 

      Sometimes i will have already created strings as Value like "1;2;3;4;5":

       

      1DeploymentsMap
      6DeploymentsMap
      3DeploymentsMap
      1;2;3;4;5DeploymentsMap

       

      And as result i would like to get 

      1;2;3;4;5;6DeploymentsMap


      so check if in list value exists, if not append. So check if there is alreadylist, if yes to not have duplicates --> 

      appendto get only uniqes.

       

      what i get using provided formula:

      Column2Combined

      DeploymentsMap1;1;2;3;4;5;3;6


      Can you please advise also?

      Best,
      Jacek