如何安全删除 Power Query 中的列
本文翻译自 Daniil Maslyuk《Safely removing columns in Power Query》
在Power Query中,如果删除不存在的列,则会收到错误消息。尽管您可能不会故意删除不存在的列,但是当您从数据源中删除了该列时,可能会发生这种情况。防止发生此错误的常用方法是使用Table.SelectColumns函数
而不是Table.RemoveColumns。但如果要选择许多列,这可能会使查询代码膨胀。您也可以使用 try 和 otherwise,这又会使您的代码不必要地冗长。在此博客文章中,我将展示一种替代解决方案。
样本数据
为了说明问题,我将使用仅两个查询的简单数据集:
1.源表
2.转换表
源表
这是包含我们的数据的初始查询。您可以将它想象成SQL Server数据库中的视图或者Excel文件中的表。
let
Source = #table(
type table [A=number, B=number],
{{1, 2}, {3, 4}}
)
in
Source
转换表
此查询将转换“源表”查询:它将删除列B。
let
"Removed Columns" = Table.RemoveColumns(Source,{"B"})
Source = #"Source Table",in
"Removed Columns"
问题
如果我们使用上面的查询,就没有问题。如果我们从源表查询中删除列B,则会出现错误:
let
"Removed Columns" = Table.RemoveColumns(Source,{"B"})
Source = #table(
type table [A=number, B=number],
{{1, 2}, {3, 4}}
),in
"Removed Columns"
现在,如果转到“转换表”查询,则会出现以下错误:
发生此错误是因为我们指示Power Query删除B列,B列在源表查询中不再存在。
解决办法
为防止发生该错误,您只需要使用Table.RemoveColumns的可选第三个参数即可处理丢失的字段。在这种情况下,您可以使用MissingField.Ignore或MissingField.UseNull:
let
"Removed Columns" = Table.RemoveColumns(
Source = #"Source Table",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工坊
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)