реклама
Бургер менюБургер меню

Инженер – Аналитика с помощью Power BI (страница 5)

18

$\text{FILTER}()$ — возвращает таблицу, отфильтрованную по условию.

$\text{CALCULATE}()$ — главная функция DAX. Вычисляет выражение в изменённом контексте фильтра.

4.3. Практические примеры формул DAX

Пример 1. Выручка с нарастающим итогом (YTD):

Выручка YTD =

CALCULATE(

[Выручка],

DATESYTD('Календарь'[Дата])

)

Пример 2. Рост продаж год к году (YoY Growth):

Рост YoY =

DIVIDE(

[Выручка] - [Выручка Прошлый Год],

[Выручка Прошлый Год]

)

Пример 3. ABC‑анализ клиентов:

ABC-категория =

VAR CumulativeSales =

CALCULATE(

[Выручка],

FILTER(

ALLSELECTED(Клиенты),

[Выручка] >= EARLIER([Выручка])

)

)

VAR TotalSales = CALCULATE([Выручка], ALLSELECTED(Клиенты))

RETURN

SWITCH(

TRUE(),

CumulativeSales / TotalSales <= 0{,}8, "A",

CumulativeSales / TotalSales <= 0{,}95, "B",

"C"

)

Пример 4. Скользящее среднее за 7 дней:

Скользящее Среднее 7д =

AVERAGEX(

DATESINPERIOD('Календарь'[Дата], LASTDATE('Календарь'[Дата]), -7, DAY),

[Выручка]

)

4.4. Работа с временными периодами

DAX имеет встроенные функции для работы с датами:

$\text{SAMEPERIODLASTYEAR}()$ — данные за тот же период прошлого года.

$\text{PREVIOUSMONTH}()$, $\text{PREVIOUSQUARTER}()$ — предыдущий месяц/квартал.

$\text{TOTALMTD}()$, $\text{TOTALQTD}()$, $\text{TOTALYTD}()$ — нарастающие итоги с начала месяца/квартала/года.

Важно: для корректной работы функций времени нужна таблица‑календарь с непрерывными датами. Создайте её с помощью формулы:

Календарь = CALENDAR(DATE(2020, 1, 1), DATE(2030, 12, 31))

4.5. Контекст расчёта в DAX

Понимание контекста — ключ к правильному использованию DAX:

Контекст строки: вычисление формулы для каждой строки таблицы (актуально для вычисляемых столбцов).

Контекст фильтра: применение фильтров из визуализаций, срезов или функций $\text{CALCULATE}()$.

Ошибка новичков: попытка использовать SUM(Столбец) в вычисляемом столбце без учёта контекста. Всегда проверяйте, где создаётся формула — в столбце или мере.

4.6. Отладка и оптимизация DAX‑формул

Советы по отладке:

Разбивайте сложные формулы на части с использованием VAR (временные переменные).

Проверяйте результат каждой части отдельно.

Используйте функцию $\text{ISBLANK}()$ для обработки пустых значений.

Избегайте вложенных функций $\text{FILTER}()$ без необходимости — они замедляют расчёт.

Оптимизация:

заменяйте $\text{FILTER}(ALL(<таблица>), <условие>)$ на $\text{REMOVEFILTERS}() + \text{FILTER}()$;

используйте $\text{KEEPFILTERS}()$, если нужно сохранить существующие фильтры;

минимизируйте количество вычисляемых столбцов — предпочитайте меры.

Практическое задание

Задача: создать меры для анализа динамики продаж и рентабельности с использованием DAX.

Данные: модель из Главы 2 («Клиенты» и «Заказы») + таблица «Календарь» с полями: Дата, Месяц, Квартал, Год.

Шаги: