Forum Discussion

Andresgamez28's avatar
Andresgamez28
New Member
2 years ago
Solved

How to remove Null values from a column without affecting the entire row

Hello,

I have the next table with null values, how can I move the values to only one row without affecting the data?

 

Table to fix:

 

 

What I need to get as a result:

 

 

Thank you.

  • let
        Source = your_table,
        func = (tbl) => 
            [cols = Table.ToColumns(tbl), 
            to_table = Table.FromColumns(
                List.FirstN(cols, 3) & 
                List.Transform(
                    List.RemoveFirstN(cols, 3),
                    (x) => List.Skip(x, (w) => w is null)
                ),
                Table.ColumnNames(tbl)
            )][to_table],
        group = Table.Group(Source, {"Day", "Date", "Operator"}, {{"x", func}}),
        result = Table.Combine(group[x])
    in
        result
  • Hi Andresgamez28, similar approach here:

     

    Output

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ3sNA3MjAyUdJRck4sygFSxmZmRuZAGopidbCqAiIzKwMDIFJw9CWoFEl1gC9BpUBkaKhnClZkhN2BFqgOxKIKlwOxK8XqQJxK4Q6MBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Operator = _t, #"Docket No" = _t, #"Start Time" = _t, #"Finish Time" = _t, Hours = _t]),
        // You can delete this step when applying on real data.
        RepalceBlankToNull = Table.TransformColumns(Source, {}, each if _ = "" then null else _),
        GroupedRows = Table.Group(RepalceBlankToNull, {"Date", "Operator"}, {{"All", each Table.FromColumns(List.Transform(Table.ToColumns(_), each List.FirstN(List.RemoveNulls(_), 1)), Value.Type(_)), type table}}),
        Combined = Table.Combine(GroupedRows[All])
    in
        Combined

     

  • You can use this formula (Source is your data )

    let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],

    List={"Day", "Date", "Operator"},
    Unpivoted = Table.UnpivotOtherColumns(Source, List, "Attribute", "Value"),
    Pivoted = Table.Pivot(Unpivoted, List.Distinct(Unpivoted[Attribute]), "Attribute", "Value", List.First),
    Custom1 = Table.Sort( Pivoted & Table.Repeat(Table.SelectColumns(Pivoted,List),4), "Date")
    in
    Custom1

5 Replies

  • let
        Source = your_table,
        func = (tbl) => 
            [cols = Table.ToColumns(tbl), 
            to_table = Table.FromColumns(
                List.FirstN(cols, 3) & 
                List.Transform(
                    List.RemoveFirstN(cols, 3),
                    (x) => List.Skip(x, (w) => w is null)
                ),
                Table.ColumnNames(tbl)
            )][to_table],
        group = Table.Group(Source, {"Day", "Date", "Operator"}, {{"x", func}}),
        result = Table.Combine(group[x])
    in
        result
  • dufoq3's avatar
    dufoq3
    Community Champion

    Hi Andresgamez28, similar approach here:

     

    Output

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ3sNA3MjAyUdJRck4sygFSxmZmRuZAGopidbCqAiIzKwMDIFJw9CWoFEl1gC9BpUBkaKhnClZkhN2BFqgOxKIKlwOxK8XqQJxK4Q6MBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Operator = _t, #"Docket No" = _t, #"Start Time" = _t, #"Finish Time" = _t, Hours = _t]),
        // You can delete this step when applying on real data.
        RepalceBlankToNull = Table.TransformColumns(Source, {}, each if _ = "" then null else _),
        GroupedRows = Table.Group(RepalceBlankToNull, {"Date", "Operator"}, {{"All", each Table.FromColumns(List.Transform(Table.ToColumns(_), each List.FirstN(List.RemoveNulls(_), 1)), Value.Type(_)), type table}}),
        Combined = Table.Combine(GroupedRows[All])
    in
        Combined

     

  • You can use this formula (Source is your data )

    let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],

    List={"Day", "Date", "Operator"},
    Unpivoted = Table.UnpivotOtherColumns(Source, List, "Attribute", "Value"),
    Pivoted = Table.Pivot(Unpivoted, List.Distinct(Unpivoted[Attribute]), "Attribute", "Value", List.First),
    Custom1 = Table.Sort( Pivoted & Table.Repeat(Table.SelectColumns(Pivoted,List),4), "Date")
    in
    Custom1

  • What should happen when you have more than or less than one value per column ?