Найти в Дзене

Краткий курс по основам DAX для начинающих

Представьте, что ваши данные в Power BI — это просто сырые ингредиенты. Панель полей — это нож, которым вы их нарезали. DAX — это плита и специи, которые позволяют вам приготовить новое, сложное блюдо из этих ингредиентов. Примеры "блюд", которые готовит DAX: Без DAX вы можете показать только то, что прямо есть в ваших данных. С DAX — вы можете показать то, что спрятано в ваших данных. Есть два основных места, где вы будете писать формулы DAX: Столбцы (Calculated Columns): Добавляют новый столбец в таблицу. Вычисляются для каждой строки и физически хранятся в модели (могут увеличивать размер файла). Аналогия в Excel: Формула, протянутая на весь столбец. Меры (Measures): Это ВАЖНЕЙШИЙ концепт. Меры не хранятся в таблице, а вычисляются «на лету» в контексте визуального элемента (графика, среза). Они динамичны. Аналогия в Excel: СУММЕСЛИ или СВОДНАЯ ТАБЛИЦА. Результат зависит от того, какие ячейки выбраны. > 90% вашей работы будет с МЕРАМИ. 1. Синтаксис: НАЗВАНИЕ_ФУНКЦИИ( Аргумент1, Аргум
Оглавление

1. Что такое DAX и зачем он нужен?

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

Примеры "блюд", которые готовит DAX:

  • Посчитать продажи за предыдущий месяц.
  • Вычислить процент выполнения плана.
  • Создать показатель накопленного итога за год.
  • Сгруппировать клиентов на новичков и постоянных.

Без DAX вы можете показать только то, что прямо есть в ваших данных. С DAX — вы можете показать то, что спрятано в ваших данных.

2. Где живут формулы DAX?

Есть два основных места, где вы будете писать формулы DAX:

Столбцы (Calculated Columns): Добавляют новый столбец в таблицу. Вычисляются для каждой строки и физически хранятся в модели (могут увеличивать размер файла).

Аналогия в Excel: Формула, протянутая на весь столбец.

Меры (Measures): Это ВАЖНЕЙШИЙ концепт. Меры не хранятся в таблице, а вычисляются «на лету» в контексте визуального элемента (графика, среза). Они динамичны.

Аналогия в Excel: СУММЕСЛИ или СВОДНАЯ ТАБЛИЦА. Результат зависит от того, какие ячейки выбраны.

> 90% вашей работы будет с МЕРАМИ.

Основные кирпичики любой формулы DAX

1. Синтаксис: НАЗВАНИЕ_ФУНКЦИИ( Аргумент1, Аргумент2, ... )
Очень похоже на Excel. Аргументами могут быть столбцы, другие меры, числа или выражения.

2. Столбцы в формулах: Вы всегда ссылаетесь на столбец не просто по имени, а указываете его таблицу. Это важно!

  • Неправильно: [Выручка]
  • Правильно: 'Продажи'[Выручка] или Продажи[Выручка]

3. Базовые функции, с которых нужно начать:

Это «золотая пятёрка», без которой никуда.

  • SUM() — Сумма.

SUM( Продажи[Выручка] ) — Сумма выручки из столбца «Выручка» таблицы «Продажи».

  • CALCULATE() — САМАЯ ВАЖНАЯ ФУНКЦИЯ в DAX. Она меняет контекст вычисления.

Аналогия в Excel: Магическая комбинация «СУММЕСЛИ» и «Фильтр».

CALCULATE( [Мера], Условие1, Условие2, ... )

Пример: CALCULATE( SUM(Продажи[Выручка]), 'Дата'[Год] = 2024 ) — Покажет сумму выручки, но только для 2024 года, даже если на дашборде выбран другой год.

  • FILTER() — Фильтрует таблицу по заданному условию. Часто используется внутри CALCULATE.

FILTER( Таблица, Условие )

Пример: CALCULATE( [Общая Выручка], FILTER( 'Продажи', Продажи[Количество] > 10 ) ) — Выручка только по тем строкам, где количество больше 10.

  • DIVIDE() — Умное деление. Лучше использовать его, чем символ /, потому что он автоматически обрабатывает деление на ноль.

DIVIDE( Числитель, Знаменатель, [Альтернативный_Результат] )

Пример: DIVIDE( SUM(Продажи[Выручка]), SUM(Продажи[Количество]) ) — Посчитает среднюю цену (выручка / кол-во), и если деление на 0, вернёт пустоту.

Функции для работы со временем (Time Intelligence) — «Магия времени»:

Эти функции работают ТОЛЬКО при наличии правильно настроенной таблицы дат.

  • TOTALYTD() / TOTALQTD() / TOTALMTD() — Вычисляет итог с начала года / квартала / месяца.

TOTALYTD( SUM(Продажи[Выручка]), 'Календарь'[Дата] ) — Накопленная выручка с начала года.

  • SAMEPERIODLASTYEAR() — Возвращает набор дат за аналогичный период прошлого года. Идеально для сравнения.

CALCULATE( [Выручка], SAMEPERIODLASTYEAR( 'Календарь'[Дата] ) ) — Выручка за аналогичный период прошлого года.

Пошаговый пример: Создаём свою первую меру

Задача: Мы хотим показывать не просто общую выручку, а долю каждой категории товаров в общей выручке.

ШАГ 1: cоздаём базовую меру «Общая Выручка»

1. В панели полей правой кнопкой мыши щёлкните по вашей таблице (например, «Продажи») и выберите «Новая мера».

2. В строке формул напишите:

dax

Copy

Download

Общая Выручка = SUM(Продажи[Выручка])

3. Нажмите Enter. Теперь в списке полей вашей таблицы появилась эта мера. Её можно использовать в любом графике.

ШАГ 2: cоздаём меру «Доля в Выручке» с помощью CALCULATE

1. Снова создайте новую меру.

2. Напишите формулу:

dax

Copy

Download

Доля в Выручке% =

DIVIDE(

SUM(Продажи[Выручка]), -- Наша выручка в текущем контексте (напр., для "Ноутбуков")

[Общая Выручка] -- Общая выручка по ВСЕМ товарам

)

Но это не сработает идеально... Почему?

ВНИМАНИЕ: КОНТЕКСТ!
На графике, где есть фильтр по «Товару», мера [Общая Выручка] тоже будет посчитана только для этого товара. Нам нужно «сбросить» фильтр по товару, чтобы получить общую сумму.

ШАГ 3: Исправляем меру. Используем CALCULATE и ALL
Функция
ALL() убирает все фильтры, applied к указанной таблице или столбцу.
Исправляем нашу меру:

dax

Copy

Download

Доля в Выручке% =

DIVIDE(

SUM(Продажи[Выручка]),

CALCULATE( [Общая Выручка], ALL( 'Продажи'[Товар] ) ) -- Игнорируем фильтр по столбцу "Товар"

)

Теперь это работает "perfectly"!

  • В числителе: выручка для конкретного товара (в контексте строки графика).
  • В знаменателе: выручка по всем товарам (мы «сбросили» фильтр по товару с помощью ALL).

ШАГ 4: форматируем меру
Выделите новую меру на панели полей -> во вкладке
«Моделирование» на ленте выберите формат «Процентный» с двумя знаками после запятой.

Краткий чек-лист для написания любой меры:

  1. Задача: что я хочу посчитать? (Накопленный итог, процент, сравнение с прошлым годом).
  2. Базовый агрегат: с чего начать? (SUM, AVERAGE, COUNT).
  3. Нужно ли изменить контекст? Если да, то вам нужен CALCULATE. Пример: «Посчитать выручку только для Москвы» -> CALCULATE( [Выручка], Город[Название] = "Москва" ).
  4. Проверить результат: всегда смотрите, как мера ведёт себя в разных визуальных элементах (на целом графике и при выборе в срезе).

Что делать дальше?

  • Создайте отдельную таблицу Дат (календарь) — это критически важно для работы с Time Intelligence.
  • Практикуйтесь на простых примерах: % от общего, сравнение с прошлым периодом, ранжирование.
  • Используйте подсказки! Редактор DAX в Power BI имеет IntelliSense — он подсказывает названия функций и таблиц по мере ввода.

Конечно сразу сложно разобраться с таким объёмом информации. Но, когда вы начнёте практиковаться, всё постепенно встанет на свои места. Обязательно смотрите видео по данной тематике из открытых источников, и в процессе просмотра вы уже будете в каких-то моментах понимать, о чем идет речь!