处理 Power Query 中的错误

处理 Power Query 中的错误

在 Power Query 中,可能会遇到两种类型的错误:

  • 步骤级错误
  • 单元格级错误

本文提供了有关如何修复每个级别可能发现的最常见错误的建议,并介绍了每个级别的错误原因、错误消息和错误详细信息。

步骤级别错误

步骤级错误可防止查询加载并在黄色窗格中显示错误组件。


未找到列的步骤级错误截图。

  • 错误原因:冒号前的第一节。 在前面的示例中,错误原因是 Expression.Error。
  • 错误消息:紧随原因之后的部分。 在前一个示例中,错误消息是未找到表中名为“Column”的列。
  • 错误详细信息:详细信息:字符串后面的部分。 在前面的示例中,错误详细信息为 Column。

Power Query Online 显示略有不同的详细信息。 错误详细信息仍然是 Column,但联机错误消息还包含错误原因(Expression.Error)和错误代码(10224)。


无法找到某列的在线步骤级错误的屏幕截图。

常见步骤级错误

在所有情况下,建议仔细查看错误原因、错误消息和错误详细信息,以了解导致错误的原因。 可以选择“ 显示详细信息 ”按钮(如果可用),以显示有关错误的更多详细信息。



错误消息的屏幕截图,其中突出显示了“显示详细信息”按钮。


无法找到数据源 – DataSource.NotFound

当用户无法访问数据源、用户没有访问数据源的正确凭据或源移动到其他位置时,通常会发生此错误。

示例:用户 A 创建了一个查询,其数据来自 D 盘中的文本文件。用户 A 将查询共享给用户 B,但用户 B 的环境中没有这个 D 盘路径。用户 B 执行查询时会得到 DataSource.NotFound 错误。


无法找到文件的数据源错误的屏幕截图,因为当前环境中没有驱动器 D。

可能的解决方案:可以将文本文件的文件路径更改为两个用户都有权访问的路径。 作为用户 B,可以将文件路径更改为同一文本文件的本地副本。

未找到该表的列

当步骤直接引用查询中不存在的列名时,通常会触发此错误。

示例:你有一个来自文本文件的查询,其中一个列名为 Column。 在查询中,有一个步骤可将该列重命名为 “日期”。 但原始文本文件中发生了更改,并且它不再具有列标题 名称 Column,因为它已手动更改为 日期。 Power Query 找不到名为 Column 的列标题,因此无法重命名任何列。 它显示下图中显示的错误。


表达式错误的屏幕截图,其中找不到表的列,因为该列名是手动更改的。

可能的解决方案:解决方法取决于你希望执行的操作。在此示例中,文本文件已经提供了正确的 Date 列标题,因此只需删除重命名列的步骤,查询就可以继续运行。

其他常见步骤级错误

在多个数据源之间合并或追加数据时,可能会收到 Formula.Firewall 错误,如下图所示。



公式防火墙错误的屏幕截图,指出查询引用了其他查询或步骤,因此它可能无法直接访问数据源。


此错误因各种原因而发生,例如数据源之间的数据隐私级别或合并这些数据源的方式。 有关如何诊断此问题的详细信息,请转到 数据隐私防火墙。

单元格级错误

单元格级错误不会阻止查询加载,而是在单元格中将错误值显示为 Error 。 选择单元格中的空白会显示数据预览下方的错误窗格。


显示错误消息的屏幕截图,方法是在包含错误的表单元格中选择空格。

注释

数据分析工具能够利用列质量功能,使您更容易识别单元格级别的错误。 有关详细信息,请转到 数据分析工具。

在单元格级别处理错误

遇到任何单元格级错误时,Power Query 会提供一组函数来处理这些错误,方法是删除、替换或保留错误。

后续部分使用同一个示例查询作为起点。该查询具有 Sales 列,其中一个单元格因类型转换失败而出错:它的值是 NA,将列转换为整数时,Power Query 无法将 NA 转成数字,因此显示下面的错误。


显示数据格式错误的屏幕截图,其中错误窗格包含“无法转换为数据类型”的错误。

删除错误

若要删除 Power Query 中出现错误的行,请先选择包含错误的列。 在“ 开始 ”选项卡上的 “减少行 ”组中,选择“ 删除行”。 从下拉菜单中选择“ 删除错误”。


“开始”选项卡上的“删除错误”按钮的屏幕截图。

该操作的结果如下表所示。


以前包含五行的表的屏幕截图,其中已删除了包含错误的行,这在表中留下了四行。

替换错误

如果希望用固定值替换错误,而不是删除出错的行,也可以这样处理。先选择包含错误的列,再在“转换”选项卡的“任意列”组中选择“替换值”,并从下拉菜单选择“替换错误”。


“转换”选项卡上“替换错误”按钮的屏幕截图。

在 “替换错误 ”对话框中,输入值 10 ,因为你想要将所有错误替换为值 10。


“替换错误”对话框的屏幕截图,该值设置为 10。

该操作的结果如下表所示。


表格的截图,其中第三行的 Sales 列中的错误现已替换为数值 10。

保留错误

即使未修复错误,Power Query 也可以用作一个很好的审核工具,以识别任何出现错误的行。 这种情况下,保留错误可能会有所帮助。 若要保留具有错误的行,请首先选择包含错误的列。 在“ 开始 ”选项卡上的“ 减少行 ”组中,选择“ 保留行”。 从下拉菜单中,选择“ 保留错误”。


“开始”选项卡上的“保留错误”按钮的屏幕截图。

该操作的结果如下表所示。


最终表格的屏幕截图,仅保留包含错误的行。

常见单元格级错误

与任何步骤级错误一样,我们建议仔细查看单元格级别提供的错误原因、错误消息和错误详细信息,以了解导致错误的原因。 以下部分讨论了 Power Query 中一些最频繁的单元格级错误。

数据类型转换错误

通常在更改表中列的数据类型时触发。 列中找到的某些值无法转换为所需的数据类型。

示例:你有一个包含名为 Sales 的列的查询。 该列中的一个单元格具有 NA 作为单元格值,而其余的单元格将整数作为值。 你决定将列的数据类型从文本转换为整数,但具有 NA 值的单元格会导致错误。


显示“无法转换为数据类型错误详细信息”的屏幕截图。

可能的解决方案:识别出错的行后,可以修改数据源,用正确的值替代 NA;也可以应用“替换错误”操作,为因 NA 导致的错误提供替代值。

操作错误

尝试执行不受支持的操作时(例如将文本值与数值相乘),就会发生错误。

示例:你想创建一个自定义列,将文本 Total Sales: 与 Sales 列中的值连接起来。错误的原因是连接运算只支持文本值,不支持直接连接数值。


尝试将 And 运算符应用于“销售”列中的文本和数字而导致的错误窗格中的表达式错误的屏幕截图。

可能的解决方案:在创建自定义列之前,请将 Sales 列的数据类型更改为文本。


表的屏幕截图,其中销售列从数字转换为文本类型,以及包含这两个表达式的新列。

嵌套值显示为错误

使用包含嵌套结构化值(如表、列表或记录)的数据时,有时可能会遇到以下错误:



公式防火墙触发的嵌套值错误的屏幕截图。


Expression.Error: We cannot return a value of type {value} in this context

Details: In the past we would have returned a text value of {value}, but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information.

这些错误通常有两个原因:

  • 数据隐私防火墙缓冲数据源时,嵌套的非标量值会自动转换为错误。
  • 当 Any 类型的列包含非标量值时,这些值会在加载到 Excel 工作簿或 Power BI Desktop 数据模型的过程中报错。

可能的解决方案:

  • 删除出错的列,或为这些列设置 Any 以外的数据类型。
  • 将所涉及的数据源的隐私级别更改为允许它们组合在一起,而无需缓冲。
  • 在执行合并之前平展表,以消除包含嵌套结构化值的列(例如表、记录或列表)。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容