Power Query根据另一列转换列

Log*_*ter 6 excel powerquery

我一直认为这应该很容易,但答案是回避我.在Excel Power Query中,我想根据另一列的值转换列的每一行中的值.例如,假设我有Table1如下:

Column A | Column B
-------------------
X        | 1
Y        | 2
Run Code Online (Sandbox Code Playgroud)

我想根据列B中的值转换A列中的值,而不必添加新列并替换原始列A.我尝试使用TransformColumns但输入只能是目标列的值 - 我可以从TransformColumns函数中访问行/记录中的其他字段值.我能够做这样的事情:

=Table.TransformColumns(Table1, {"Column A", each if [Column B]=1 then "Z" else _ })
Run Code Online (Sandbox Code Playgroud)

这将导致:

Column A | Column B
-------------------
Z        | 1
Y        | 2
Run Code Online (Sandbox Code Playgroud)

我知道有办法做到这一点,但我试图找到一个步骤/转换量最少的方法.例如,我知道我可以使用Table.AddColumn 基于查看B列的函数添加新的 A列,但是我必须删除原始的A列并将其替换为新的A列,这需要多个额外的步骤.

Log*_*ter 13

以下是我最终如何做到这一点:

Table1:
Column A | Column B
-------------------
X        | 1
Y        | 2

= Table.FromRecords(Table.TransformRows(Table1,
    (r) => Record.TransformFields(r,
        {"A", each if r[Column B]="1" then "Z" else _})))
Run Code Online (Sandbox Code Playgroud)

结果:

Column A | Column B
-------------------
Z        | 1
Y        | 2
Run Code Online (Sandbox Code Playgroud)

这样,您可以使用Record.TransformFields函数中的嵌套列表一次转换多个列.


Imk*_*keF 6

另一种选择是这样的:

= Table.ReplaceValue(Table1, each [Column A], each if [Column B]=1 then "Z" else [Column A] , Replacer.ReplaceText, {"Column A"})

该代码更具可读性,但一次只能应用于一列。

其中大部分可以通过使用 UI 生成,如下所示:http : //www.thebiccountant.com/2017/07/23/transforming-a-column-with-values-from-another-column-in-powerbi -and-powerquery-in-excel/