问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

处理 Power Query 中的错误

创作时间:
作者:
@小白创作中心

处理 Power Query 中的错误

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/power-query/dealing-with-errors

在使用Power Query进行数据处理时,难免会遇到各种错误。本文将详细介绍如何处理Power Query中的错误,包括步骤级错误和单元格级别错误的识别与解决方法。

步骤级错误

步骤级错误会阻止查询加载,并在黄色窗格中显示错误组件。这类错误通常包含三个部分:

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

常见步骤级错误

找不到源 — DataSource.Error

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

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

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

找不到表的列

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

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

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

其他常见步骤级错误

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

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

单元格级别错误

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

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

处理单元格级别错误

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

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

删除错误

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

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

替换错误

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

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

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

保留错误

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

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

常见单元格级别错误

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

数据类型转换错误

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

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

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

操作错误

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

示例:需要通过创建包含短语“Total 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数据类型。
  • 将所涉及的数据源的隐私级别更改为允许将它们组合在一起而不进行缓冲的级别。
  • 在执行合并之前平展表,以消除包含嵌套结构化值的列(例如表、记录或列表)。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号