【问题标题】:Power Query: try ... otherwise on list item expressionPower Query:尝试...否则在列表项表达式上
【发布时间】:2021-08-13 10:25:11
【问题描述】:

为什么捕获以下索引错误失败:

let
    Source = "abc",
    letter_list = Text.ToList(Source),
    try_on_index_error = try letter_list{5}
in
    try_on_index_error

try 语句不返回Error 记录。它一直抛出错误,就好像没有 try 存在一样。

在这种情况下,它按预期工作,返回 Error 记录作为查询的有效结果:

let
    Source = "abc",
    try_another_error = try Source + 1,
    Error = try_another_error[Error]
in
    Error

https://docs.microsoft.com/en-us/power-query/handlingerrors#catching-an-error-with-try-and-otherwise

https://docs.microsoft.com/en-us/powerquery-m/m-spec-consolidated-grammar#error-handling-expression

【问题讨论】:

  • 对我来说,这看起来更像是一个错误,而不是一个很好的解释。似乎超出范围的索引应该是可以使用try 处理的东西,而不是用“意外错误”来中断查询。
  • 看看Lazy Evaluation & Query Folding in Power BI / Power Query。如果您缓冲您的列表,它将按预期工作:letter_list = List.Buffer(Text.ToList(Source)),
  • 干杯@ron,我认为这也会帮助其他人作为答案。 (您的解决方案工作正常。)我想知道的一件事是:我还运行了我的无缓冲代码以获得有效的项目访问,如 try letter_list{1} 和这里 Error 记录 is 返回(当然有[Error][HasError] = false).

标签: powerbi powerquery m


【解决方案1】:

自然很难回答有关闭源软件行为的问题。不过,Ron Rosenfeld 的评论解决了我的问题:

letter_list = List.Buffer(Text.ToList(Source))

docs求值一章的最后一段)解释了意外行为:对列表、记录和 let 表达式进行了惰性求值。如上所示,在惰性求值的情况下,try 语句应该会退回到语法检查。

【讨论】:

    猜你喜欢
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2022-06-15
    • 2017-06-16
    • 2023-04-06
    • 2018-07-05
    • 1970-01-01
    相关资源
    最近更新 更多