Как реализовать do while l oop в Power Query и прочитать последнюю строку таблицы, которая обновляется динамически - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь импортировать данные из оставшегося API sharepoint, используя идентификатор документа для всех документов. Моя цель - начать с самого маленького идентификатора документа и двигаться дальше, пока не останется больше документов. Я разработал пользовательскую функцию и вызываю ее, передавая идентификатор документа, который начинается с 0. Эта функция возвращает мне таблицу, содержащую 500 документов, у которых идентификатор Do c превышает идентификатор документа, который я передаю.

#"Output" =Table.AddColumn(Termset,"c", each GetList( try List.Max(Output[c.DocId]) otherwise LastDocID))

Таким образом, мои данные обновляются в выходной таблице. Моя проблема здесь в том, что он снова и снова возвращает один и тот же набор из 500 записей. Возможно, это связано с тем, что значение List.Max (Output [c .DocId] не меняется (я хочу, чтобы это значение было последним идентификатором документа, возвращаемым из функции GetList). Я пытаюсь сделать что-то вроде делать, пока l oop.

do{
Output=GetList(LastDocID)
LastDocId=List.Max(Output[DocId])
}while(there_are_no_more_docs)

Есть ли какой-либо способ в Power Query, чтобы я мог динамически изменять значение LastDocId, которое я передаю функции GetList. Метод, который я попробовал ниже, не кажется работать, так как он не может читать содержимое таблицы «Вывод» после каждого вызова функции. Примечание: я использую «Термсет» как страницы для проверки общего количества читаемых документов. Это список, значение которого начинается с 0 и увеличивается на 500, пока не станет меньше, чем общее количество документов в Sharepoint.

Я был бы очень признателен, если бы кто-нибудь мог помочь мне здесь.

1 Ответ

0 голосов
/ 20 апреля 2020

Вам нужно взглянуть на List.Generate , чтобы сгенерировать все ваши запросы на странице, а затем вычислить последний идентификатор документа из списка результатов.

Использовать al oop как следующие для извлечения всех страниц из REST API:

listOfPages = List.Generate(
  () => FetchPage(null),
  (page) => page <> null,
  (page) => FetchPage(page)
)
...