Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

concatenate column name + cell value

Hello all, 

 

my manager has asked me if it is possible to create a single column which would list the concatenation of the [column title]+[cell value]. for example, my data set looks as follows:

 

Expense Work OrderCaptial Work order DCCCapital Work Order MCCExpense WO related to Cap DCC
00510452   
00507539436506436507 
507528475601  

 

The results should be the following:

Accounts
Expense Work Order 00510452
Expense Work Order 00507539, Captial Work order DCC 436506, Captial Work Order MCC 436507
Expense Work Order 507528, Captial Work order DCC 475601

 

I am familiar with the CONCATENATE() function, however I am not sure on how to merge a column title and the cell value below it per row. Any suggestions?

 

ixdutt

  • Hi Anonymous ,

     

    The following will merge this data in Power Query. Turns

    into this:

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjAwNTQwMTVS0lFSgONYHbCEgbmpsSVQwMTYzNTADMYwhysBKTCyAImbm5oZGCK0xwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Expense Work Order" = _t, #"Captial Work order DCC" = _t, #"Capital Work Order MCC" = _t, #"Expense WO related to Cap DCC" = _t]),
        #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
        #"Merged Columns" = Table.CombineColumns(#"Unpivoted Other Columns",{"Attribute", "Value"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Filtered Rows" = Table.SelectRows(#"Merged Columns", each not Text.EndsWith([Merged], ", ")),
        #"Grouped Rows" = 
            Table.Group(
                #"Filtered Rows", 
                {"Index"}, 
                {
                    {
                        "Test", 
                        each Text.Combine(
                            List.Transform(_[Merged], Text.From), ", "
                        )
                    }
                }
            ),
        #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Index"})
    in
        #"Removed Columns"

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

    I don't know how you would do this in DAX. I had to unpivot the columns to get the columns at a field level to work with. I'd be interested to see if someone can post DAX code that can return the field name a value exists in.

  • Anonymous - Well, you could unpivot your columns. That would put their names in a single column. And then you could get a list of them but no idea what that would do to your data model, etc. In the currently described format, edhans is 100% correct.

13 Replies

  • edhans's avatar
    edhans
    Icon for Community Champion rankCommunity Champion

    Hi Anonymous ,

     

    The following will merge this data in Power Query. Turns

    into this:

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjAwNTQwMTVS0lFSgONYHbCEgbmpsSVQwMTYzNTADMYwhysBKTCyAImbm5oZGCK0xwIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Expense Work Order" = _t, #"Captial Work order DCC" = _t, #"Capital Work Order MCC" = _t, #"Expense WO related to Cap DCC" = _t]),
        #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Index", {"Index"}, "Attribute", "Value"),
        #"Merged Columns" = Table.CombineColumns(#"Unpivoted Other Columns",{"Attribute", "Value"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
        #"Filtered Rows" = Table.SelectRows(#"Merged Columns", each not Text.EndsWith([Merged], ", ")),
        #"Grouped Rows" = 
            Table.Group(
                #"Filtered Rows", 
                {"Index"}, 
                {
                    {
                        "Test", 
                        each Text.Combine(
                            List.Transform(_[Merged], Text.From), ", "
                        )
                    }
                }
            ),
        #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Index"})
    in
        #"Removed Columns"

     

    How to use M code provided in a blank query:
    1) In Power Query, select New Source, then Blank Query
    2) On the Home ribbon, select "Advanced Editor" button
    3) Remove everything you see, then paste the M code I've given you in that box.
    4) Press Done
    5) See this article if you need help using this M code in your model.

     

    I don't know how you would do this in DAX. I had to unpivot the columns to get the columns at a field level to work with. I'd be interested to see if someone can post DAX code that can return the field name a value exists in.

      • Greg_Deckler's avatar
        Greg_Deckler
        Icon for Community Champion rankCommunity Champion

        Well edhans - To the best of my knowledge you can't get the column names "dynamically" in DAX, you have to already know what the column names are. I suppose if you did not promote headers and used an Index you could identify names of the columns becaues then they would be rows with an Index of 1. But, it is an interesting thought and I will ponder it.

         

        The other thing Anonymous that I ponder is that I can't fathom how that format of data could possibly be useful in an analysis scenario. Could you enlighten? 

  • v-diye-msft's avatar
    v-diye-msft
    Icon for Community Support rankCommunity Support

    Hi Anonymous 

     

    If the above posts help, please kindly mark it as a answer to help others find it more quickly. thanks!

    If not, please kindly elaborate more.