引用上面的电源查询自定义列中的单元格



我正在将Excel进程转换为高级查询自定义列,目前的工作方式是引用上面的单元格写入当前单元格。

Excel公式为=IF(G2<>",IF(I2<>",I2,"),H1)在本例中,将在H2中输入。它本质上说,当我的左边和右边都有值的单元格时,我会把单元格的值写在右边,直到我看到左边的一个单元格没有与右边的单元格对齐,然后返回null。这会贯穿几千行,可能会触发几十次来修补小孔。最终结果基本上是这样的,中心列是我的新数据(为了直观起见,我使用零而不是"或null):

  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

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

我的建议是采用不同的方法:

下面的查询基于表1,其中有G、H和I列,创建了前两个步骤。

下一列H被移除。

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

接下来,新的列H被填满。

下一个"替换为null。

最后对列进行重新排序。

编辑:通过UI完成的所有步骤;在选择"添加自定义列"后,在公式框中输入了新列的公式(不带"每个")

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列中的值,您需要在自定义公式中使用以下表达式:

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

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

最新更新