DAX в Power BI для начинающих: меры, фильтры и расчёты по строкам

DAX в Power BI для начинающих: меры, фильтры и расчёты по строкам

Обновлено 2 сентября 2026 года.

DAX — язык выражений для табличных моделей, в том числе Power BI и Power Pivot. Формула работает с таблицами, столбцами и контекстом вычисления. Поэтому привычка мыслить адресами отдельных ячеек Excel часто приводит к ошибкам.

Подготовьте учебную таблицу

Через «Ввести данные» создайте таблицу Sales с тремя строками. OrderID и Year задайте целыми числами, Quantity — целым числом, UnitPrice — числовым типом, Product — текстом. Все значения вымышлены; цена не включает отдельные скидки или возвраты.

OrderID Year Product Quantity UnitPrice
1 2025 A 2 100
1 2025 B 1 50
2 2026 A 3 120

Столбец и мера

Для вычисляемого столбца контекст строки позволяет взять количество и цену текущей строки:

Line Amount = Sales[Quantity] * Sales[UnitPrice]

Чтобы получить сумму этого столбца в выбранных фильтрах, создайте отдельную меру:

Sales Amount = SUM(Sales[Line Amount])

Без фильтров результат равен 610. Для 2025 года — 250, для 2026 года — 360. SUM принимает ссылку на один столбец. Произвольные дополнительные фильтры не являются аргументами SUM.

Вычисление по строкам через SUMX

Тот же результат можно получить без столбца Line Amount. Итератор SUMX вычисляет выражение для каждой видимой строки таблицы, затем складывает результаты:

Sales Amount Direct =
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice])

Результат обеих мер должен совпадать и при общем итоге, и при фильтре по товару. Синтаксис функций: SUM и SUMX.

Изменение фильтров через CALCULATE

Sales 2025 A =
CALCULATE(
    [Sales Amount],
    Sales[Year] = 2025,
    Sales[Product] = "A"
)

На учебной таблице мера даёт 200. Условия по Year и Product задаются внутри CALCULATE. По умолчанию они заменяют существующий фильтр на тех же столбцах. Поэтому выбор 2026 в срезе Sales[Year] не сделает эту меру показателем за 2026 год. Если нужно пересечение с выбором пользователя, рассмотрите KEEPFILTERS. Поведение описано в документации CALCULATE.

Читай также:  Обзор BI-систем: как сравнивать платформы перед внедрением

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

Подсчёт строк, заказов и средняя сумма

Sales Rows = COUNTROWS(Sales)
Orders = DISTINCTCOUNT(Sales[OrderID])
Average Order Amount = DIVIDE([Sales Amount], [Orders])

Это три отдельные меры. Без фильтров получится 3 строки, 2 заказа и средняя сумма 305. COUNTROWS считает строки, DISTINCTCOUNT — разные значения столбца; BLANK также учитывается DISTINCTCOUNT, поэтому отсутствие ID нужно исправлять в источнике или отдельно учитывать. COUNT считает непустые значения поддерживаемых типов в указанном столбце и не является универсальной заменой COUNTROWS.

При фильтре Product = A получится 560 / 2 = 280. Это средняя стоимость позиций A на заказ, содержащий A; стоимость остальных позиций этих заказов не включается. Название показателя должно отражать такое поведение.

Расчёты между таблицами

Если в Sales хранится ProductID, а атрибут находится в справочнике Products, сначала создайте правильную связь с уникальным ключом справочника. В контексте строки связанное значение можно получить через RELATED. Но текущая цена из справочника не заменяет историческую цену продажи: иначе обновление каталога изменит прошлую выручку.

Как проверять формулы

Начинайте с нескольких строк, которые можно посчитать вручную. Проверяйте общий итог, одну категорию, пустую выборку и нулевой знаменатель. DIVIDE без альтернативного результата возвращает BLANK при делении на ноль. Если интерфейс использует локализованные разделители DAX, вместо запятых может требоваться точка с запятой.