前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BI错误处理。

BI错误处理。

作者头像
冬夜先生
发布2022-09-09 16:03:40
2.8K0
发布2022-09-09 16:03:40
举报
文章被收录于专栏:csico

与 Excel 和 DAX 语言具有IFERROR函数的方式类似,Power Query具有自己的语法来测试和捕获错误。

如有关处理Power Query中的错误的文章中所述,错误可以出现在步骤或单元格级别。 本文将重点介绍如何根据自己的特定逻辑捕获和管理错误。

备注

为了演示此概念,本文将使用 Excel 工作簿作为其数据源。 此处展示的概念适用于Power Query中的所有值,而不仅仅是来自 Excel 工作簿的概念。

此演示的示例数据源是一个包含下表的 Excel 工作簿。

Excel 工作簿中的此表在标准速率列中出现 Excel 错误,例如 #NULL!#REF!#DIV/0!。 将此表导入Power Query编辑器时,下图显示了表的外观。

请注意 Excel 工作簿中的错误如何随每个单元格中的值一起 [Error] 显示。

本文介绍如何将错误替换为另一个值。 此外,还将了解如何捕获错误并将其用于你自己的特定逻辑。

在这种情况下,目标是创建新的 最终费率 列,该列将使用 标准费率 列中的值。 如果有任何错误,则它将使用“ 特率” 列中的值。

查找错误时提供替代值

在这种情况下,目标是在示例数据源中创建新的 最终速率 列,该列将使用 标准费率 列中的值。 如果存在任何错误,它将使用相应 特殊速率 列中的值。

若要创建新的自定义列,请转到 “添加列 ”菜单,然后选择“ 自定义”列。 在 “自定义列 ”窗口中,输入公式 try [Standard Rate] otherwise [Special Rate]。 将此新列命名 为最终速率

上面的公式将尝试评估 标准速率 列,并在未找到错误时输出其值。 如果在 “标准速率 ”列中找到错误,则输出将是在语句之后 otherwise 定义的值,在本例中为 “特殊速率 ”列。

将正确的数据类型添加到表中的所有列后,下图显示了最终表的外观。

备注

作为替代方法,还可以输入与上一个公式等效的公式 try [Standard Rate] catch ()=> [Special Rate],但将 catch 关键字与不需要参数的函数结合使用。

catch关键字于 2022 年 5 月引入Power Query。

提供自己的条件错误逻辑

使用与上一部分相同的示例数据源,新目标是为 最终速率创建一个新列。 如果 标准费率 中的值存在,则将使用该值。 否则将使用 特殊速率 列中的值,但出现任何 #REF! 错误的行除外。

备注

排除 #REF! 错误的唯一用途是出于演示目的。 使用本文中介绍的概念,可以从错误记录中定位所选的任何字段。

选择错误值旁边的任意空格时,将获取屏幕底部的详细信息窗格。 详细信息窗格包含错误原因和DataFormat.Error错误消息: Invalid cell value '#REF!'

一次只能选择一个单元格,因此一次只能看到一个错误值的错误组件。 这是你将创建新的自定义列并使用 try 表达式的位置。

与自定义逻辑配合使用try

若要创建新的自定义列,请转到 “添加列 ”菜单,然后选择“ 自定义”列。 在 “自定义列 ”窗口中,输入公式 try [Standard Rate]。 将此新列命名 为“所有错误”。

表达式 try 将值和错误转换为记录值,该值指示表达式是否 try 处理错误,以及正确的值或错误记录。

可以使用记录值展开此新创建的列,并通过选择列标题旁边的图标来查看要展开的可用字段。

此操作将公开三个新字段:

  • 所有 Errors.HasError - 显示 标准速率 列中的值是否出错。
  • 所有 Errors.Value — 如果 标准速率 列中的值没有错误,则此列将显示 标准速率 列中的值。 对于出现错误的值,此字段将不可用,在展开操作期间,此列将具有 null 值。
  • 所有 Errors.Error — 如果 标准速率 列中的值出错,则此列将显示 标准速率 列中的值的错误记录。 对于没有错误的值,此字段将不可用,在展开操作期间,此列将具有 null 值。

若要进一步调查,可以展开 “所有 Errors.Error ”列以获取错误记录的三个组件:

  • 错误原因
  • 错误消息
  • 错误详细信息

执行展开操作后, “所有 Errors.Error.Message ”字段将显示特定错误消息,告知每个单元格的 Excel 错误。 错误消息派生自错误记录的 “错误消息 ”字段。

现在,使用新列中的每条错误消息,可以使用名称 “最终速率 ”和以下子句创建新的条件列:

  • 如果 “所有 Errors.Errors.Message ”列中的值相等 null,则输出将是 标准速率 列中的值。
  • 否则,如果 “所有 Errors.Errors.Message ”列中的值相等 Invalid cell value '#REF!'.,则输出将是 “特殊速率 ”列中的值。
  • 否则为 null。

仅保留 帐户标准费率特殊费率最终费率 列,并为每个列添加正确的数据类型后,下图演示了最终表的外观。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查找错误时提供替代值
  • 提供自己的条件错误逻辑
    • 与自定义逻辑配合使用try
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档