如何安全删除 Power Query 中的列

本文翻译自 Daniil Maslyuk《Safely removing columns in Power Query》

在Power Query中,如果删除不存在的列,则会收到错误消息。尽管您可能不会故意删除不存在的列,但是当您从数据源中删除了该列时,可能会发生这种情况。防止发生此错误的常用方法是使用Table.SelectColumns函数
而不是Table.RemoveColumns。但如果要选择许多列,这可能会使查询代码膨胀。您也可以使用 try 和 otherwise,这又会使您的代码不必要地冗长。在此博客文章中,我将展示一种替代解决方案。

样本数据

为了说明问题,我将使用仅两个查询的简单数据集:
1.源表
2.转换表

源表

这是包含我们的数据的初始查询。您可以将它想象成SQL Server数据库中的视图或者Excel文件中的表。
file

let
Source = #table(
type table [A=number, B=number],
{{1, 2}, {3, 4}}
)
in
Source

转换表

此查询将转换“源表”查询:它将删除列B。

file

let
Source = #"Source Table",

"Removed Columns" = Table.RemoveColumns(Source,{"B"})

in

"Removed Columns"

问题

如果我们使用上面的查询,就没有问题。如果我们从源表查询中删除列B,则会出现错误:

let
Source = #table(
type table [A=number, B=number],
{{1, 2}, {3, 4}}
),

"Removed Columns" = Table.RemoveColumns(Source,{"B"})

in

"Removed Columns"

现在,如果转到“转换表”查询,则会出现以下错误:

file

发生此错误是因为我们指示Power Query删除B列,B列在源表查询中不再存在。

解决办法

为防止发生该错误,您只需要使用Table.RemoveColumns的可选第三个参数即可处理丢失的字段。在这种情况下,您可以使用MissingField.Ignore或MissingField.UseNull:

let
Source = #"Source Table",

"Removed Columns" = Table.RemoveColumns(
    Source,
    {"B"},
    MissingField.Ignore
)

in

"Removed Columns"

现在就没有错误啦,查询仅返回列A?

一个小意见

不幸的是,Table.TransformColumnTypes函数没有相应的参数来处理缺少的字段,但在某些情况下,使用它会很有用。如果您觉得这个意见不错,可以进行如下尝试:
在PowerQuery的Table.TransformColumnTypes函数中包含MissingField Argument。

原文链接:

https://xxlbi.com/blog/safely-removing-columns-power-query/

  • PowerPivot工坊原创文章,转载请注明出处!

    如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊