【问题标题】:Power Query: How to update column values in a table?Power Query:如何更新表中的列值?
【发布时间】:2021-05-29 03:48:00
【问题描述】:

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

我有一个以 Excel 表为源的查询。 此表有几个 user-input 列,现在需要乘以该表中另一列的系数。应保留列名。

例子:

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)

甚至更好地为列列表应用逻辑。

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

谁能给我一个建议?谢谢!

【问题讨论】:

    标签: powerquery


    【解决方案1】:

    替代解决方案

    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}
    ...
    

    为了不计算两次

    【讨论】:

    • 嗯,是的,预先计算是不错的选择和更清洁的技术。你甚至不需要一个函数: {"Clmn1", each [Clmn1]*null_1},
    【解决方案2】:

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

    这是通过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 和他的post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多