Power Query:通过乘以另一列来转换列

我想要做一些类似于Power Query基于另一列的转换列 ,但是我陷入了如何修改特定目标的语法。

类似于链接的问题,假设我有下表:

Table 1: Column A | Column B | Column C ------------------------------ 1 | 4 | 7 2 | 5 | 8 3 | 6 | 9 

而不是改变列A的条件,在列B的条件下,我想乘以多栏(列B和列C)的值由列A中的值并replace初始列中的值,以便我可以得到以下:

 Table 1: Column A | Column B | Column C ------------------------------ 1 | 4 | 7 2 | 10 | 16 3 | 18 | 27 

这是可能的,而不使用Table.AddColumn后跟Table.RemoveColumns多个序列?

我也尝试Table.TransformColumns基于此的 Table.TransformColumns ,但没有能够获得实现这一目标的语法。

Table.TransformColumns不会给你Column A除非你可以索引回表中,这只有当你的列只有唯一的数据时才有可能。

Table.TransformRows可以让你用你想要的任何逻辑build立新的行:

 let Source = Csv.Document("Column A,Column B,Column C 1,4,7 2,5,8 3,6,9"), PromotedHeaders = Table.PromoteHeaders(Source), ChangedType = Table.TransformColumnTypes(PromotedHeaders,{{"Column A", type number}, {"Column B", type number}, {"Column C", type number}}), MultipliedRows = Table.FromRecords(Table.TransformRows(ChangedType, each [ Column A = [Column A], Column B = [Column A] * [Column B], Column C = [Column A] * [Column C] ])) in MultipliedRows 

这适用于列B和C,但如果你需要B Z,你可能需要更好的逻辑来避免重复。

编辑:对于许多列更一般的解决scheme是使用Record.TransformFields在除"Column A"之外的所有列名称的变换列表。

 let Source = Csv.Document("Column A,Column B,Column C,D,E,F 1,4,7,1,2,3 2,5,8,4,5,6 3,6,9,7,8,9"), PromotedHeaders = Table.PromoteHeaders(Source), ChangedType = Table.TransformColumnTypes(PromotedHeaders,{{"Column A", type number}, {"Column B", type number}, {"Column C", type number}, {"D", type number}, {"E", type number}, {"F", type number}}), MultipliedRows = Table.FromRecords(Table.TransformRows(ChangedType, (row) => let ColumnA = row[Column A], OtherColumns = List.RemoveItems(Record.FieldNames(row), {"Column A"}), Transforms = List.Transform(OtherColumns, (name) => { name, (cell) => cell * ColumnA }) in Record.TransformFields(row, Transforms))) in MultipliedRows 

我觉得Table.AddColumn跟在Table.RemoveColumns之后是这个转换的通常和最清晰的方法。 我也不满意的事实,这导致了PowerQuery这么多的步骤。 但是由于PowerQuery的内部反向折叠方法,这通常不会带来更好的性能。 (如果可用,PowerQuery会尝试将主要工作返回到查询的数据库)

假设这不需要VBA和/或编程,只需复制第一列中的值,然后突出显示第二列中的值,然后select“Paste Special …”>“Multiply”。

这将在粘贴乘数的同一位置产生结果。