Использование функции
Function.InvokeAfter() в Power Query
Текст представляет собой адаптированный перевод статьи Chris Webb (Крис Вебб),
оригинал — Using Function.InvokeAfter() In Power Query.
Рассматривается англоязычный Power Query.
Крис Вебб (Chris Webb) — независимый эксперт, консультант по технологиям Analysis Services, MDX, Power Pivot, DAX, Power Query и Power BI. Его блог — это кладезь информации на тему перечисленных технологий. Вот уже более 10 лет он пишет про BI-решения от Microsoft. Количество его статей перевалило за 1000! Также Крис выступает на большом количестве различных конференций вроде SQLBits, PASS Summit, PASS BA Conference, SQL Saturdays и участвует в различных сообществах.
Крис любезно разрешил нам переводить его статьи на русский язык. И это одна из них.

Использование функции Function.InvokeAfter() в Power Query

В одной из давних статей мы описывали, как реализовать в коде задержку между запросами к веб-сервису. С тех пор была добавлена новая функция Function.InvokeAfter(), позволяющая проделать это намного проще. Хотя она до сих пор толком не документирована.

Тем не менее, вот её сигнатура:

Function.InvokeAfter(function as function, delay as duration) as any

Данная функция вызывает другую спустя определённый промежуток времени. В примере ниже показано её применение.

Сначала мы объявляем функцию, возвращающую дату/время в текстовом формате. Потом вызываем её дважды с пятисекундной задержкой.
let  
   GetTimeAsText = ()=> DateTime.ToText(DateTime.LocalNow()),  
   Output = GetTimeAsText() & " "  
         & Function.InvokeAfter(GetTimeAsText, #duration(0,0,0,5))  
in  
   Output
Результат запроса:

28/04/2015 23:06:38 28/04/2015 23:06:43

Была одна вещь, которая смущала. Функция Function.Invoke() не позволяла передать список аргументов в вызываемую функцию. Но, благодаря техподдержке Майкрософт, данная проблема решена.

Ниже приведён пример, как вызвать функцию с параметрами:
let  
   SayHello = (personname as text) as text => "Hello " & personname,   
   Output = Function.InvokeAfter(()=>SayHello("Chris"), #duration(0,0,0,5))  
in  
   Output