在Power Query自定义列中引用上面的单元格

我正在转换一个Excel进程到一个强大的查询自定义列,它的工作方式是通过引用上面的单元格写入当前单元格。

Excel公式为:IF(G2 <>“”,IF(I2 <>“”,I2,“”),H1)在本例中,将在H2中input。 从本质上来说,当我的单元格的左边和右边的单元格中,我会将单元格的值写入右侧,直到我看到左侧的单元格与单元格上的单元格不在一起正确的,回到空。 这贯穿了几千行,可能会触发几十次来修补小孔。 最终的结果基本上是这样的,中间的列是我的新数据(我使用零而不是“”或空视觉):

  1. 0 0 0 – 写入null
  2. 0 0 0 – 写入null
  3. x 1 1 – 向右写入值
  4. 0 1 0 – 在上面写入数值
  5. 0 1 0 – 在上面写入数值
  6. x 0 0 – 写入null
  7. 0 0 0 – 写入null

现在我必须在执行我的查询链之前编写公式,我想将这一步合并到自定义列中,但是我还没有find解决scheme。 我是一个全新的m代码和电源查询,并堆栈溢出,但到目前为止,我已经能够执行除了这一个,我需要的每一个步骤。

我的build议将是一个不同的方法:

下面的查询是基于Table1的列G,H和I,它创build了前两个步骤。

下一列H被删除。

添加一个新列H,如果G和I都为null,则最初使用I的值;否则,如果G = null,则为空(稍后将为null)。

接下来,新列H被填充。

下一个“”被replace为null。

最后,这些列被重新sorting。

编辑:通过UI完成的所有步骤; 在select“添加自定义列”之后,新列的公式被input到公式框(没有“每个”)中,

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" 

您可以添加一个索引列,然后访问当前索引减1的单元格。例如,如果您添加了一个索引列Index并命名为步骤Table ,然后要访问上一行的Column中的值,则该expression式在您的自定义公式中:

if [Index] > 0 then Table[Column]{[Index] - 1} else some_default_value

some_default_value将是任何你想要的第一行的单元格。 在你的情况下,这可能是null 。 我们需要if语句,因为表中没有第-1行。