Power Query:如何更新 table 中的列值?

Power Query: How to update column values in a table?

需要您帮助解决以下问题:

我有一个以 Excel table 作为来源的查询。 此 table 有多个 user-input 列,现在需要将其乘以此 table 中另一列的系数。应保留列名。

示例:

let
    Source = Table.FromColumns({{1, 1}, {2, 2}, {null, 0.5}}, {"Clmn1", "Clmn2", "ClmnMultiplier"})
in
    Source

有什么方法可以更新它们的值吗:

row[Clmn1] = row[Clmn1] * IsNull(Row[ClmnMultiplier],1)
row[Clmn2] = row[Clmn2] * IsNull(Row[ClmnMultiplier],1)

或者通过对列列表应用逻辑更好。

当然,我可以通过一个接一个地创建新列来做到这一点,但我发现这既不优雅也不高效。

任何人都可以给我一些建议吗?谢谢!

我找到了问题的解决方案。

Table.TransformRows函数完成。 显而易见的解决方案是使用 Table.TransformColumns,但事实证明您无法从中引用当前行。一些搜索指向这个解决方案:

let
    Source = Table.FromColumns({{1, 1}, {2, 2}, {null, 0.5}}, {"Clmn1", "Clmn2", "ClmnMultiplier"}),
    Transf = Table.FromRecords(
                Table.TransformRows(Source, 
                    (r) => Record.TransformFields(r,
                            {
                                {"Clmn1", each if r[ClmnMultiplier] <> null then _ * r[ClmnMultiplier] else _}, 
                                {"Clmn2", each if r[ClmnMultiplier] <> null then _ * r[ClmnMultiplier] else _}
                            })
                )
            )
in
    Transf

非常感谢LoganTheSnowEater and his

备选方案

let
    colNames = {"Clmn1", "Clmn2", "ClmnMultiplier"},
    Source = Table.FromColumns({{1, 1}, {2, 2}, {null, 0.5}}, colNames),
    transformRows = Table.TransformRows(Source, each Record.TransformFields(_, {
        {"Clmn1", (f)=>[Clmn1]*(if [ClmnMultiplier] is null then 1 else [ClmnMultiplier])},
        {"Clmn2", (f)=>[Clmn2]*(if [ClmnMultiplier] is null then 1 else [ClmnMultiplier])}
    }))
in
    Table.FromList(transformRows, Record.ToList, colNames)

对了,你可以提前计算一下
null_1=(if [ClmnMultiplier] is null then 1 else [ClmnMultiplier])
在函数之外(在每一行中)并像这样使用它:

...
{"Clmn1", (f)=>[Clmn1]*null_1},
{"Clmn2", (f)=>[Clmn2]*null_1}
...

为了不计算两次