Power Query:仅当列存在时才执行应用步骤,如果不存在则避免错误

Power Query:仅当列存在时才执行应用步骤,如果不存在则避免错误

我正在 Microsoft 365 的 Excel 中使用 Power Query。

请考虑以下 M 语言代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type of all to Text" = Table.TransformColumnTypes(Source,{{"A", type text}, {"B", type text}, {"C", type text}}),
    #"Removed Unneeded Columns" = Table.RemoveColumns(#"Changed Type of all to Text",{"A"}),
    ...
in
    #"Removed Duplicate Rows"

我遇到的问题是该列A并非始终存在于源表中。如果存在,则必须将其删除。但是,如果在 M 语言代码中包含它,则在不存在它的情况下会导致错误。

我如何更改我的 M 语言代码以有效地处理列的情况A存在和列的情况A不在场?

答案1

重新表述原始问题

我遇到的问题是该列A并非始终存在于源表中。如果存在,则必须将其删除。但是,如果在 M 语言代码中包含它,则在不存在它的情况下会导致错误。

解决方案

首先,我要指出的是,当我第一次通过右键单击源表中的单元格然后选择来创建查询时Get Data from Table/Range...,会自动创建两个应用步骤:

  1. 来源
  2. 改变类型

我的问题的解决方案如下:

  1. 在和已应用步骤Choose Columns之间插入一个已应用步骤并取消选择列SourceChanged TypeA 是否存在(我可能会或可能不会使用包含列的源表实例A在里面)
  2. 编辑应用步骤的 M 语言代码Changed Type以删除与列对应的参数A 是否存在(我可能会或可能不会使用包含列的源表实例A在里面)

关键在于不参考柱子A在 M 语言代码中(因为如果引用了它但不存在,则会引发错误)。因此,不要显式选择列A删除,只是不要选择它进行包含。

以这种方式构造查询允许将其应用于包含或不包含列的源表A. 它在两种情况下都有效。

相关内容