处理 Power Query 中的错误

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

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

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

步骤级别错误

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

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

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

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

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

常见步骤级错误

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

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

无法找到数据源 - DataSource.NotFound

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

示例:你有位于驱动器 D 中的文本磁贴中的查询,并由用户 A 创建。用户 A 与用户 B 共享查询,该用户 B 无权访问驱动器 D。当此人尝试执行查询时,会获取 DataSource.NotFound ,因为环境中没有驱动器 D。

无法找到文件的数据源错误的屏幕截图,因为当前环境中没有驱动器 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,也可以应用 Replace 错误 作来为导致错误的任何 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 数据类型。
  • 将所涉及的数据源的隐私级别更改为允许它们组合在一起,而无需缓冲。
  • 在执行合并之前平展表,以消除包含嵌套结构化值的列(例如表、记录或列表)。