CRS*_*PLK 1 excel excel-formula powerquery
我正在将 Excel 进程转换为 Power Query 自定义列,它目前的工作方式是引用上面的单元格写入当前单元格。
Excel 公式为 =IF(G2<>"", IF(I2<>"",I2,""),H1) 在本例中将在 H2 中输入。它本质上是说,当我的左侧和右侧的单元格具有值时,我会将单元格的值写入右侧,直到我看到左侧的单元格与右侧的单元格不匹配对,然后返回 null。这贯穿几千行,可能会被触发几十次以修补小孔。最终结果基本上是这样的,中心列是我的新数据(为了视觉目的,我使用零而不是 "" 或 null):
- 0 0 0 - 写空
- 0 0 0 - 写空
- x 1 1 - 向右写值
- 0 1 0 - 写入上面的值
- 0 1 0 - 写入上面的值
- x 0 0 - 写空
- 0 0 0 - 写空
现在我必须在执行我的查询链之前编写公式,我想将此步骤合并到自定义列中,但我还没有找到解决方案。对于代码和电源查询以及堆栈溢出,我完全是新手,但到目前为止,除了这一步之外,我已经能够执行我需要的每一步。
我的建议是一种不同的方法:
下面的查询基于包含 G、H 和 I 列的 Table1,它创建了前 2 个步骤。
下一列 H 被删除。
添加一个新列 H,如果 G 和 I 都是 <> 空,则最初使用来自 I 的值,否则如果 G = null 则为空白(稍后将为空)。
接下来填充新的 H 列。
下一个 "" 被替换为 null。
最后对列进行重新排序。
编辑:通过用户界面完成的所有步骤;选择“添加自定义列”后,在公式框中输入了新列的公式(没有“每个”)
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"G", type text}, {"H", type any}, {"I", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"H"}),
#"Added Custom" = Table.AddColumn(#"Removed Columns", "H", each if [G] <> null and [I] <> null then [I] else if [G] <> null then "" else null),
#"Filled Down" = Table.FillDown(#"Added Custom",{"H"}),
#"Replaced Value" = Table.ReplaceValue(#"Filled Down","",null,Replacer.ReplaceValue,{"H"}),
#"Reordered Columns" = Table.ReorderColumns(#"Replaced Value",{"G", "H", "I"})
in
#"Reordered Columns"
Run Code Online (Sandbox Code Playgroud)