Power Query基于另一列转换列

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

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

我想根据B列中的值来转换列A中的值,而不必添加新列并replace原来的列A.我尝试过使用TransformColumns,但input只能是目标列的值 – 我可以从TransformColumns函数中访问行/logging中的其他字段值。 我希望能够做到这样的事情:

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

这将导致:

 Column A | Column B ------------------- Z | 1 Y | 2 

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

这是我如何结束这样做的:

 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 _}))) 

结果:

 Column A | Column B ------------------- Z | 1 Y | 2 

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

您无法通过这样的步骤来转换现有的列。 使用新列,执行转换,然后删除现有列。 有什么大不了的? 在Excel中,您不希望公式更改不同列的值。 在Power Query中,公式的结果也存储在列中,并且不能是提供公式input值之一的列。

另一种select是这样的:

= Table.ReplaceValue(Table1,每个[列A],每个如果[列B] = 1,那么“Z”否则[列A],Replacer.ReplaceText,{“列A”})

代码有点可读性,但一次只能应用于一列。

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