Forum Discussion

JustaRookie012's avatar
JustaRookie012
Frequent Visitor
6 years ago
Solved

Replace null value with value from the same column based on value of other column

Hi guys, can someone help me out with the following problem? Column A    Colum B null              abc null              abc 123              abc 456              efg null              efg R...
  • artemus's avatar
    artemus
    6 years ago

    Yea, sorry, it is kind of condenced.

     

    Table.ReorderColumns(Table.RenameColumns(Table.RemoveColumns(Table.AddColumn(PreviousStep, "_temp", each Table.SelectRows(PreviousStep, each [ColumnA] <> null){[[ColumnB]]}[ColumnA]), "ColumnA"), {"_temp", "ColumnA"}), Table.ColumnNames(PreviousStep))

     

    ReorderColumns, RenameColumns, RemoveColumns, AddColumns - this it just to get around the fact that when you do a transform columns operations you can't access other columns.

     

    • Table.SelectRows(PreviousStep, ...) - this is to create a sub query which has unique values for the columns we are interested in.
    • each [ColumnA] <> null - this removes the null entries as part of getting unique values in the ColumnB
      • "each <expression>" is shorthand for: (_ as any) as any => <expression>
      • (foo as text, bar as number) as duration => means declare a function that takes in for and bar as parameters and returns duration with implementation after =>
      • [ColumnA] is shorthand for: _[ColumnA] where _ is the function variable
    • {[[ColumnB]]} -
      • [[ColumnB]] is shorthand for [ColumnB=_[ColumnB]], which means a record with field ColumnB equal to the _ variable's field ColumnB. Or in other words, just take the ColumnB part of the row record. [ColumnB] means unwrap the field, while [[ColumnB]] means don't unwrap it.
      • MyTable{[KeyColumn="MyValue"]} means get the row from MyTable where the column KeyColumn has the value "MyValue"
    • ...{[[ColumnB]]}[ColumnA] - means after getting the row that where ColumnB matches ColumB of the previous Table.Select statement, get the value of ColumnA.
      • MyTable[ColumnA] means get the column ColumnA for MyTable.
      • MyTable{0} means get the the first row from MyTable.
      • MyRow[ABC] means get the record field ABC from the record MyRow
      • MyColumn{0} means get the first entry from a list
      • MyTable[ColumnA]{0} = MyTable{0}[ColumnA]
    • The final part about Table.ColumnNames() is just to restore the order of the columns back to their origional order.