我一直认为这应该很容易,但答案是回避我.在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函数中的嵌套列表一次转换多个列.
另一种选择是这样的:
= 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/