Как объединить источники в один? - PullRequest
1 голос
/ 12 июня 2019

У меня проблема при вызове конечной точки REST.Полученный набор данных слишком велик для возврата конечной точки (я получаю ошибку HTTP 500).Я могу разбить запрос на части, например, по месяцам.Как выполнить несколько вызовов к конечной точке - по одному на каждый месяц, который я хочу вернуть, а затем объединить их в одну таблицу?

К сожалению, конечная точка REST не поддерживает запросы ODATA, поэтому я не могу пролистатьнабор результатов.

let

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"

1 Ответ

0 голосов
/ 12 июня 2019

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