调用REST端点时出现问题。结果数据集太大,端点无法返回(我收到HTTP 500错误)。 我可以将查询拆分为多个部分,例如按月。如何执行对端点的多次调用-我要返回的每个月一次,然后将它们组合到一个表中?
不幸的是,REST endpoind不支持ODATA查询,因此我无法分页浏览结果集。
让
Source1 = Json.Document(Web.Contents("https://someurl?theapi" & "&q=Date>='2019-01-01' AND Date<='2019-01-31'")),
Source2 = Json.Document(Web.Contents("https://someurl?theapi" & "&q=Date>='2019-02-01' AND Date<='2019-02-28'")),
Table1= Table.FromList(Source1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Table2= Table.FromList(Source2, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
CompositeTable= Table.NestedJoin(Table2, {"Datum"}, Table1, {"Datum"}, "CompositeTable", JoinKind.LeftOuter)
在 CompositeTable
我希望将两个查询的结果集合并到“ CompositeTable”中
答案 0 :(得分:0)
有一个不错的blog post by Mark Tiedemann提出了解决方案。我已经应用了十多次这种方法,并且对于我遇到的任何分页API都可以完美地工作。
Mark的优雅解决方案是查询第一页,从第一页中提取总结果数,然后为其余所有页面调用GetPage
函数,并使用List.Union
函数合并所有页面。
对于您的用例,我将使用开始和结束日期,而不是项目/页面和总计项目。对于开始日期和结束日期之间的每个月,请调用仅查询该月的函数,然后合并结果。为了给您一个想法,像这样:
let
BaseUrl = "https://someurl?theapi&",
StartDate = #date(2019,01,01),
EndDate = #date(2019,05,31),
GetJson = (Url) =>
let Json = Json.Document(Web.Contents(Url))
in Json,
GetPage = (Index) =>
let Start = "Date>=" & Text.From(Date.StartOfMonth(Index)),
End = "Date<=" & Text.From(Date.EndOfMonth(Index)),
Url = BaseUrl & "&q=" & Start " AND " & End,
Json = GetJson(Url),
Value = Json[#"value"]
in Value,
PageIndices = { LIST OF ALL MONTHS },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table