我正在 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...
,会自动创建两个应用步骤:
- 来源
- 改变类型
我的问题的解决方案如下:
- 在和已应用步骤
Choose Columns
之间插入一个已应用步骤并取消选择列Source
Changed Type
A 是否存在(我可能会或可能不会使用包含列的源表实例A在里面) - 编辑应用步骤的 M 语言代码
Changed Type
以删除与列对应的参数A 是否存在(我可能会或可能不会使用包含列的源表实例A在里面)
关键在于不参考柱子A在 M 语言代码中(因为如果引用了它但不存在,则会引发错误)。因此,不要显式选择列A删除,只是不要选择它进行包含。
以这种方式构造查询允许将其应用于包含或不包含列的源表A. 它在两种情况下都有效。