加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何安全删除PowerQuery中的列

(2020-06-11 17:09:29)
标签:

365

power

bi

数据分析

数据可视化

本文翻译自 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
    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"

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

发生此错误是因为我们指示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工坊原创文章,转载请注明出处!


延伸阅读:M函数的拆拆合合
用M语言创建日期表
通过#shared调取Power Query内置M函数解释
DAX+M语言应用场景:如何得到含有全国维度的图表?
Power Query中的VLOOKUP - 合并查询M语言 | 生成给定时间范围内的每秒状态

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


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

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有