Введение
Просмотрите следующее видео, чтобы узнать о функциях итератора.
Выражения анализа данных (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).