如何将源合并为一个?
How to combine sources into one?
我在调用 REST 端点时遇到问题。生成的数据集对于端点来说太大 return(我收到 HTTP 500 错误)。
我可以将查询分成几部分,例如按月。我如何对端点执行多次调用 - 每个月一次 return,然后将它们组合成一个 table?
很遗憾,REST 端点不支持 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"
有一个很棒的 blog post by Mark Tiedemann 提出了解决方案。这种方法我已经应用了十几次,它对我遇到的任何分页 API 都完美无缺。
Mark 的优雅解决方案是查询第一页,从中提取总结果数,然后对所有剩余页面调用 GetPage
函数,并使用 List.Union
函数合并所有页面。
对于您的用例,我会使用开始日期和结束日期,而不是 items/page 和项目总数。对于开始日期和结束日期之间的每个月,仅调用查询该月的函数,并合并结果。给你一个想法,像这样:
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
我在调用 REST 端点时遇到问题。生成的数据集对于端点来说太大 return(我收到 HTTP 500 错误)。 我可以将查询分成几部分,例如按月。我如何对端点执行多次调用 - 每个月一次 return,然后将它们组合成一个 table?
很遗憾,REST 端点不支持 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"
有一个很棒的 blog post by Mark Tiedemann 提出了解决方案。这种方法我已经应用了十几次,它对我遇到的任何分页 API 都完美无缺。
Mark 的优雅解决方案是查询第一页,从中提取总结果数,然后对所有剩余页面调用 GetPage
函数,并使用 List.Union
函数合并所有页面。
对于您的用例,我会使用开始日期和结束日期,而不是 items/page 和项目总数。对于开始日期和结束日期之间的每个月,仅调用查询该月的函数,并合并结果。给你一个想法,像这样:
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