Forum Discussion

GraceJinM's avatar
GraceJinM
Frequent Visitor
1 year ago
Solved

Merging multiple rows into one but only keeping select responses.

Hi, 

 

I posted another thread about this topic and got lots of solutions that all worked, but the reality of what we need our data to look like keeps changing based on the client's feedback. I've created a new thread but it was getting progressively confusing as our client's desires kept changing. 

 

In my data, we have unique IDs (the A and Bs) that have multiple rows of data (ranging from numbers to dates) that need to be combined into one row for each unique ID. For some columns, only one row has data. In these cases, we want the row with the data to be kept. However, in other columns, multiple rows have data. For these columns, the client wants the row with the greatest number or most recent date to be to be kept.  

 

Here is an example of what our data currently looks like: 

 

 

Here is what we want our data to look like: 

 

 

  • Hi GraceJinM,

     

    Bit confused here, based on your example you are taking the max value from each column, not "selecting a row" based on a max value. Well, give this a go.

    let
        Source = Table.FromRows(
            {
                {"A", 1, 2, #date(2024, 9, 3)},
                {"A", null, 4, #date(2024, 9, 4)},
                {"B", 4, #date(2024, 9, 2), #date(2024, 9, 3)},
                {"B", 3, null, #date(2024, 9, 5)}
            },
            {"Section N", "Column1", "Column2", "Column3"}
        ),
        GroupRows = Table.Group(Source, {"Section N"}, 
            {{"t", each [Column1=List.Max([Column1]), Column2=List.Max([Column2]), Column3=List.Max([Column3])]}}
        ),
        Expand = Table.ExpandRecordColumn(GroupRows, "t", {"Column1", "Column2", "Column3"})
    in
        Expand

    I hope this is helpful

1 Reply

  • m_dekorte's avatar
    m_dekorte
    Resident Rockstar

    Hi GraceJinM,

     

    Bit confused here, based on your example you are taking the max value from each column, not "selecting a row" based on a max value. Well, give this a go.

    let
        Source = Table.FromRows(
            {
                {"A", 1, 2, #date(2024, 9, 3)},
                {"A", null, 4, #date(2024, 9, 4)},
                {"B", 4, #date(2024, 9, 2), #date(2024, 9, 3)},
                {"B", 3, null, #date(2024, 9, 5)}
            },
            {"Section N", "Column1", "Column2", "Column3"}
        ),
        GroupRows = Table.Group(Source, {"Section N"}, 
            {{"t", each [Column1=List.Max([Column1]), Column2=List.Max([Column2]), Column3=List.Max([Column3])]}}
        ),
        Expand = Table.ExpandRecordColumn(GroupRows, "t", {"Column1", "Column2", "Column3"})
    in
        Expand

    I hope this is helpful