处理 Power Query 中的错误

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

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

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

步骤级错误

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

步骤级错误。

  • 错误原因:冒号前的第一节。 在上面的示例中,错误原因为 Expression.Error
  • 错误消息:该节紧跟在原因后。 在上面的示例中,错误消息为找不到表的列“column”
  • 错误详细信息:该节紧跟在详细信息:字符串后。 在上面的示例中,错误详细信息为 Column

常见步骤级错误

在所有情况下,都建议您仔细查看错误原因、错误消息和错误详细信息,以了解导致错误的原因。 可以选择转到错误按钮(如果可用),以查看发生错误的第一步。

“转到错误”按钮。

找不到源 — DataSource.Error

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

示例:您有一个来自位于驱动器 D 且由用户 A 创建的文本标题的查询。用户 A 与用户 B 共享该查询,而用户 B 没有访问驱动器 D 的权限。当这个人试图执行该查询时,他们会得到 DataSource.Error,因为他们的环境中没有驱动器 D。

数据源错误,找不到文件,因为当前环境中没有驱动器 D。

可能的解决方案:可以将文本文件的文件路径更改为两个用户都有权访问的路径。 作为用户 B,可以将文件路径更改为同一文本文件的本地副本。 如果在错误窗格中提供了编辑设置按钮,则可以选择它并更改文件路径。

找不到表的列

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

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

表达式错误,找不到表的列,因为该列名称是手动更改的。

可能的解决方案:在这种情况下,有多个解决方案,但具体都取决于您希望执行的操作。 对于本示例,由于正确的 Date 列标题已来自文本文件,因此只需删除重命名列的步骤即可。 这将允许查询运行而不会出现此错误。

其他常见步骤级错误

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

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

此错误可能是由多种原因引起的,例如数据源之间的数据隐私级别,或者这些数据源的组合或合并方式。 有关如何诊断此问题的详细信息,请转到数据隐私防火墙

单元格级别错误

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

通过在包含错误的表单元格中选择空格来显示错误消息。

注意

数据分析工具可以帮助您利用列质量功能更方便地识别单元格级别错误。 详细信息:数据分析工具

处理单元格级别错误

在遇到任何单元格级别错误时,Power Query 提供了一组函数,通过删除、替换或保留错误来处理这些错误。

对于后续部分,提供的示例将使用相同的示例查询作为起点。 在此查询中,您有一个 Sales 列,该列有一个单元格,包含一个由转换错误引发的错误。 该单元格中的值为 NA;但将该列转换为整数时,Power Query 无法将 NA 转换为数字,因此系统显示以下错误。

显示数据格式错误,无法转换为错误窗格中的数据类型错误。

删除错误

若要删除 Power Query 中有错误的行,请首先选择包含错误的列。 在主页选项卡上,在减少行组中,选择删除行。 从下拉菜单中,选择删除行

“主页”选项卡上的“删除错误”按钮。

该操作将提供你正在查找的表。

以前包含五行的表现在已删除包含错误的行,从而表中留下了四行。

替换错误

如果不想删除有错误的行,而是想用固定值替换错误,也可以这样做。 若要替换有错误的行,请先选择包含错误的列。 在转换选项卡上,在任何列组中选择替换值。 从下拉菜单中,选择替换错误

“转换”选项卡上的“替换错误”按钮。

替换错误对话框中,输入值 10,因为您希望将所有错误替换为值 10。

“替换错误”对话框。

该操作将提供你正在查找的表。

第三行包含“Sales”列中的错误的表现在已将错误替换为值 10。

保留错误

即使不修正错误,Power Query 也可以作为一个很好的审核工具来识别任何有错误的行。 这是保留错误非常有用的地方。 若要保留有错误的行,请先选择包含错误的列。 在主页选项卡上,在减少行组中,选择保留行。 从下拉菜单中,选择保留行

“主页”选项卡上的“保留错误”按钮。

该操作将提供你正在查找的表。

仅保留包含错误的行的最终表。

常见单元格级别错误

与任何步骤级错误一样,我们建议仔细查看单元格级别提供的错误原因、错误消息和错误详细信息,以了解导致错误的原因。 下面几节将介绍 Power Query 中最常见的单元格级别错误。

数据类型转换错误

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

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

“无法转换为数据类型”错误详细信息。

可能的解决方案:识别有错误的行后,可以修改数据源以反映正确的值而不是 NA,也可以应用替换错误 操作来为导致错误的任何 NA 值提供值。

操作错误

尝试应用不支持的操作(例如将文本值乘以数值)时,将发生错误。

示例:需要通过创建包含短语“Total Sales:”(与 Sales 列中的值连接)的文本字符串来创建查询的自定义列。 发生错误的原因是串联操作仅支持文本列,而不支持数值列。

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

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

表,其中显示从“数字”数据类型转换为“文本”数据类型的“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 数据类型。
  • 将所涉及的数据源的隐私级别更改为允许将它们组合在一起而不进行缓冲的级别。
  • 在执行合并之前平展表,以消除包含嵌套结构化值的列(例如表、记录或列表)。