导入数据后,替换所有列的错误值(保留行)

10
An Excel表格作为数据源可能包含错误值(#NA,#DIV/0),这可能会在Power Query的转换过程中干扰后续步骤。根据以下步骤,我们可能会得到无输出但有错误的情况。那么如何处理这些情况呢?
我在Power Query中找到了两个标准步骤来捕捉它们:
  • 删除错误 (UI: 主页/删除行/删除错误) -> 所有带有错误的行将被删除
  • 替换错误值(UI: 转换/替换错误) -> 首先必须选择列以执行此操作。
对我来说,第一种可能性不是一个解决方案,因为我想保留行并只替换错误值。
在我的情况下,我的数据表会随时间变化,这意味着列名可能会改变(例如年份),或者新列会出现。因此,第二种可能性太静态了,因为我不想每次都更改脚本。
因此,我尝试找到一种动态的方法来清理所有列,独立于列名(和列数)。它用空值替换错误。
let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],

    //Remove errors of all columns of the data source. ColumnName doesn't play any role
    Cols = Table.ColumnNames(Source),
    ColumnListWithParameter = Table.FromColumns({Cols, List.Repeat({""}, List.Count(Cols))}, {"ColName" as text, "ErrorHandling" as text}),
    ParameterList = Table.ToRows(ColumnListWithParameter ),
    ReplaceErrorSource = Table.ReplaceErrorValues(Source, ParameterList)
in
    ReplaceErrorSource

这里是加入两个新列(带有错误)到源数据后的三个不同查询消息:
如果有人有其他解决数据清理问题的方法,请在此处发布您的帖子。

你可以用IfError函数替换生成错误的原始列吗?这样可以捕获错误并生成其他默认值。 - Eileen R
2个回答

18
let
    src = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    cols = Table.ColumnNames(src),
    replace = Table.ReplaceErrorValues(src, List.Transform(cols, each {_, "!"}))
in
    replace

谢谢!你的代码比我的简洁多了。 - visu-l

0

专为像我这样的Power Query新手设计

"!"可以作为错误值的替代字符串。我最初认为它是通配符。

List.Transform(cols, each {_, "!"}) 生成了按列处理错误的列表,用于主要函数:

Table.ReplaceErrorValues(table_with errors, {{col1,error_str1},{col2,error_str2},{},{}, ...,{coln,error_strn}})

很好的优雅解决方案,谢尔盖


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接