Использование функции 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
Следующая статья
Предыдущая статья

Комментирование закрыто.

Открыт набор на наш новый онлайн-курс “R для интернет-маркетинга!”

Набор на новый поток курса по Power BI

Подпишитесь на нашу рассылку, чтобы не пропустить новые статьи!

Подписка на рассылку NeedForData

Бесплатная шпаргалка по визуализации
Плакат Как что визуализировать
Сертификаты студентов курсов NeedForData.ru

© 2018    NeedForData