使用 Power Query 通过 REST API 查询分页 XML
Posted
技术标签:
【中文标题】使用 Power Query 通过 REST API 查询分页 XML【英文标题】:Query Paginated XML via REST API using Power Query 【发布时间】:2021-02-16 10:14:13 【问题描述】:我收到此错误:Expression.Error:在评估期间遇到循环引用。 我认为它在这一行: = Table.FromList(DataList, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
我在 PowerBI 中使用高级 Web 输入,但 API 将每个查询的请求限制为 100 条记录。
let
BaseUrl = "https://api.samanage.com/incidents.xml",
Token = [TOKEN],
EntitiesPerPage = 100,
Options = [Headers=[Accept="application/vnd.samanage.v2.1+xml", #"X-Samanage-Authorization" = "Bearer " & Token ]],
Url = BaseUrl,
GetXml = (Url) =>
let
RawData = Web.Contents(Url, Options),
xml = Xml.Document(RawData)
in
xml,
GetTotalCount = () =>
let
Xml = GetXml(Url),
Entities = Xml(EntityCount)
in
Entities,
EntityCount = GetTotalCount(),
PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),
PageIndex = 1 .. PageCount,
GetPage = (PageIndex) =>
let
PageUrl = BaseUrl & "page=" & Text.From(PageIndex),
Xml = GetXml(PageUrl),
Value = Xml[ticket_metrics]
in
Value,
GetUrl = (PageIndex) =>
let
PageNum = "page=" & Text.From(PageIndex),
PageUrl = BaseUrl & PageNum
in
PageUrl,
Urls = List.Transform(PageIndex, each GetUrl(_)),
Pages = List.Transform(PageIndex, each GetPage(_)),
DataList = List.Union(Pages),
TableFromList = Table.FromList(DataList, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
TableFromList
【问题讨论】:
【参考方案1】:我没有运行你的代码,所以我在下面写的内容可能完全错了,但我认为在你的 GetTotalCount
函数中,你可能打算写:
Entities = Xml[EntityCount]
改为:
Entities = Xml(EntityCount)
我假设(但我可能错了)您正在使用的 XML 资源中有一个 EntityCount
字段。
关于周期性错误,如果我们采取这一行:
EntityCount = GetTotalCount(),
再往里看GetTotalCount
,我们看到它循环引用了EntityCount
GetTotalCount = () =>
let
Xml = GetXml(Url),
Entities = Xml(EntityCount)
in
Entities,
无关:通常,如果您想从 API 获取一些数据,但从一开始就不确定需要多少请求,您可以使用类似 List.Generate
的东西,它将继续生成值列表(在您的情况下,这些值可能是顺序 API 响应)并且您可以给它一个函数来定义它应该何时停止。
详情:https://docs.microsoft.com/en-us/powerquery-m/list-generate。
【讨论】:
以上是关于使用 Power Query 通过 REST API 查询分页 XML的主要内容,如果未能解决你的问题,请参考以下文章
Power Query 将表类型数据加载到单个 Excel 工作表
Power BI Python 在Power BI Desktop中Python代码如何使用Power Query数据
通过 Power Query 将 Excel 连接到 Smartsheet