Обратите внимание на процессы в диспетчере задач во время выполнения скриптов. Есть там такие Microsoft Mashup Evaluation Container. Все вычисления PQ передает в них. Вот у них есть ограничения один процесс максимум 256 Мб, и одновременно может работать не более 4 процессов. Соответственно если вы напихаете в них данных больше чем на 1 Гиг, то все что сверху PQ начнет кэшировать на жесткий диск. И хорошо если это у вас SSD. А если HD? Со всеми вытекающими.
Как я использую функцию: Например нужно выполнить запрос, который на выходе дает список значений.
Код |
---|
let
Today = DateTime.Date(DateTime.LocalNow()),
Source2 =
Table.FromList(
List.Dates(
Today + Duration.From(1),
55,
Duration.From(1)),
Splitter.SplitByNothing() ),
AddColMonths = Table.AddColumn(Source2, "Month", each Date.ToText([Column1], "yyyy/MM"), type text),
DaysToForecast = List.Buffer( Table.Group(AddColMonths, {"Month"}, {{"Diff", each Number.From(List.Max([Column1]) - List.Min([Column1]) ) + 1, type date}})[Diff] )
in
DaysToForecast |
В дальнейшем эти значения будут применены для расчетов в примерно 300 000 ячеек, и если бы в последнем шаге я не применил List.Buffer, то каждый раз при обращении к значениям этого списка из-за ленивых вычислений весь код будет выполняться с самого начала, это миллисекунды, но если их умножить на 300 000, то оно вырастает в минуты. Применив же функцию, запрос вычисляется один раз, закидывает список в память и в остальные разы читает значения уже из памяти - ПРОФИТ!
Вроде ничего не соврал. На моем скрипте без буфера запрос вычисляется минут 5 с буфером 2-2,5 минуты