Excel Power Query 自定义函数编辑器可捕获未找到的值

问题描述

需要指导为未从 API 找到的 NPI 值添加捕获错误。该表有 2000 个 NPI 编号,其中一些不会在 API 调用中找到。当我运行此函数时,它会在找不到匹配项时停止并出错。我希望函数继续运行并将错误放在适当的行上。

let
Source = (NPPES_API as any) => let
    Source = Json.Document(Web.Contents("https://npiregistry.cms.hhs.gov/api/?version=2.1&number=" & NPPES_API)),results = Source[results],results1 = results{0},addresses = results1[addresses],addresses1 = addresses{0},#"Converted to Table" = Record.ToTable(addresses1),#"Removed Columns" = Table.RemoveColumns(#"Converted to Table",{"Name"}),#"Removed Top Rows" = Table.Skip(#"Removed Columns",4),#"Removed Blank Rows" = Table.SelectRows(#"Removed Top Rows",each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_),{"",null})))
in
    #"Removed Blank Rows"
in
Source

解决方法

当您搜索不存在或无效的 NPI 编号时,服务器似乎在其响应中包含 Errors 字段。所以也许检查这个条件,然后相应地扩展响应。

下面是 NPI 编号列表的示例实现(为了从服务器引出和处理错误响应,其中一个故意无效)。

let
    npiNumbers = {"1245319599","abc"},getDataForNpiNumber = (someNpiNumber as text) as record =>
        let
            json = Web.Contents("https://npiregistry.cms.hhs.gov/api/",[
                Query = [version = "2.1",number = someNpiNumber]
            ]),parsed = Json.Document(json),row = [
                npiNumber = someNpiNumber,data = Table.FromRecords(Record.FieldOrDefault(parsed,"results",{})),errors = Table.FromRecords(Record.FieldOrDefault(parsed,"Errors",{}))
            ]
        in row,rows = List.Transform(npiNumbers,getDataForNpiNumber),data = Table.FromRecords(rows)
in
    data

它应该为您提供一个表格,其中包含请求的每个 NPI 编号的行。每行本身应包含 3 个字段:

  • npiNumber(请求的 NPI 编号)
  • data(从服务器收到此 NPI 编号的数据,如果发生错误则为空表)
  • errors(从服务器收到此 NPI 编号的错误,如果服务器成功完成请求,则为空表)

然后,您可以根据需要展开表格的行并向下钻取(因为您尚未描述要对数据执行的操作或需要如何对其进行结构化)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...