Введение

Завершено

Просмотрите следующее видео, чтобы узнать о функциях итератора.

Выражения анализа данных (DAX) включают семейство функций, известных как функции итератора. Функции итератора перечисляют все строки данной таблицы и оценивают данное выражение для каждой строки. Они обеспечивают гибкость и контроль над суммированием данных в вычислениях для вашей модели.

К этому моменту вы уже знакомы с функциями формирования сводных данных по одному столбцу, включая SUM, COUNT, MIN, MAX и другие. У каждой из этих функций есть эквивалентная функция итератора, обозначенная суффиксом "X", например, SUMX, COUNTX, MINX, MAXX и другие. Кроме того, существуют специализированные функции итератора, которые выполняют фильтрацию, ранжирование, полуаддитивные вычисления во времени и многое другое.

Основной характеристикой всех функций итераторов является то, что вы должны передать таблицу и выражение. Таблица может быть ссылкой на таблицу модели или выражением, которое возвращает объект таблицы. Вычисление выражения должно давать скалярное значение.

Функции формирования сводных данных по одному столбцу (такие как SUM) являются сокращенными функциями. На внутреннем уровне Microsoft Power BI преобразует функцию SUM в SUMX. В результате следующие два определения мер будут выдавать одинаковый результат с одинаковой производительностью.

Revenue = SUM(Sales[Sales Amount])
Revenue =
SUMX(
    Sales,
    Sales[Sales Amount]
)

Понимание того, как контекст работает с функциями итератора, имеет большую важность. Так как функции итератора перечисляют строки таблицы, выражение вычисляется для каждой строки в контексте строки, аналогично формулам вычисляемых столбцов. Таблица оценивается в контексте фильтра. Таким образом, если вы используете предыдущий пример определения меры Revenue и визуальный элемент отчета был отфильтрован по финансовому году FY2020, то таблица Sales будет содержать упорядоченные строки продаж для этого года. Контекст фильтра описан в модуле контекста фильтра.

Важно!

При применении функций итератора не используйте большие таблицы (строк) с выражениями, в которых задействованы расширенные функции DAX. Некоторые функции, например, функция SEARCH (DAX), которая выполняет сканирование текстового значения в поисках определенных символов или текста, могут привести к снижению производительности. Кроме того, функция LOOKUPVALUE (DAX) может привести к медленному построчному извлечению значений. Во втором случае по возможности вместо указанной выше функции используйте функцию RELATED (DAX).