Есть замечательное сообщение в блоге Марка Тидемана , в котором предлагается решение.Я применял этот метод дюжину раз, и он безупречно работает для любого разбитого на страницы API, с которым я столкнулся.
Элегантное решение Марка - запросить первую страницу, извлечь из нее общее количество результатов и затем вызвать * 1005.* функция для всех оставшихся страниц и объединение всех страниц с использованием функции 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