DAX в Power BI: как превратить данные в бизнес-инсайты и формулы
Для кого эта статья:
- Новички в области аналитики и работы с Power BI
- Специалисты, стремящиеся улучшить свои навыки в DAX и бизнес-аналитике
Люди, заинтересованные в карьерном росте в области BI-аналитики и анализа данных
Разбираясь в DAX впервые, я чувствовал себя как в лабиринте — множество функций, странный синтаксис и непонятная логика работы с контекстами. Сегодня я делюсь путеводителем, который превратит вашу растерянность в уверенное владение инструментом Power BI. Вы узнаете, как формулы DAX помогают превращать сырые данные в полезные бизнес-инсайты, и сможете самостоятельно создавать продвинутые вычисления — без стресса и многочасовых поисков в документации. 🚀
Хотите быстро освоить DAX и стать востребованным BI-аналитиком? На курсе Обучение BI-аналитике от Skypro вы получите не только теоретическую базу, но и отработаете все основные функции DAX на реальных бизнес-кейсах под руководством практикующих экспертов. Программа включает 75+ часов практики в Power BI с разбором типичных ошибок и созданием готового портфолио проектов!
Что такое DAX: основа работы с данными в Power BI
DAX (Data Analysis Expressions) — это специализированный язык формул, разработанный Microsoft для анализа данных в Power BI, Excel Power Pivot и Analysis Services. По сути, это ваш инструмент для создания пользовательских вычислений и преобразования разрозненных данных в осмысленную аналитику.
Если SQL отвечает на вопрос "что находится в базе данных?", то DAX отвечает на вопрос "что означают эти данные для бизнеса?". Ключевая особенность DAX — это работа с табличной моделью данных, а не с отдельными ячейками, как в Excel.
Антон Крылов, BI-аналитик в ритейл-компании
Помню свой первый серьезный проект в Power BI — отчет по продажам с разбивкой по регионам, каналам и сезонам. Начальник ожидал увидеть не просто цифры, а динамику, процентные соотношения и прогнозы. Без DAX я был как без рук.
Начал с простейших мер типа SUM(Sales[Amount]), но быстро уперся в ограничения. Настоящий прорыв случился, когда освоил CALCULATE и фильтры контекста. Это позволило создать показатель "Доля продаж по каналам относительно общего объема" одной формулой:
Channel Share = DIVIDE( SUM(Sales[Amount]), CALCULATE( SUM(Sales[Amount]), ALL(Channels) ) )
Эта мера мгновенно показывала процентные доли каналов при любых срезах данных — по времени, региону или категории. Руководство было в восторге от интерактивности, а я понял: DAX — это суперсила аналитика.
Вот почему DAX является фундаментальным навыком для работы с Power BI:
- Создание вычисляемых столбцов — добавление новых данных на основе существующих значений
- Разработка мер (measures) — динамические вычисления, меняющиеся в зависимости от выбранных фильтров
- Создание вычисляемых таблиц — генерация новых наборов данных
- Временной интеллект — сравнение периодов, скользящие средние, накопительные итоги
DAX работает в контексте — это ключевая концепция, определяющая, какие данные учитываются при вычислениях. Существует два типа контекста:
Тип контекста | Описание | Применение |
---|---|---|
Контекст строки | Работает на уровне отдельной строки таблицы | Вычисляемые столбцы |
Контекст фильтра | Определяет, какие строки включены в вычисление | Меры (measures) |
Понимание контекстов — ключ к правильному использованию DAX. Именно они позволяют создавать динамичные отчеты, реагирующие на действия пользователя. 🔍

Синтаксис и структура формул DAX для новичков
Формулы DAX на первый взгляд напоминают формулы Excel, но имеют ряд существенных отличий. Базовая структура формулы DAX выглядит так:
Название = Выражение
Например: Общая выручка = SUM(Sales[Amount])
Разберем ключевые элементы синтаксиса DAX:
- Ссылки на таблицы и столбцы: Sales[Amount], где Sales — название таблицы, а [Amount] — название столбца
- Функции: SUM(), AVERAGE(), COUNT() и другие
- Переменные: создаются с помощью ключевого слова VAR
- Операторы: арифметические (+, -, *, /), сравнения (=, <>, >, <), логические (&&, ||)
Важное отличие DAX от Excel — использование таблиц и столбцов вместо диапазонов ячеек. Вместо SUM(A1:A10) в DAX мы пишем SUM(Sales[Amount]).
Пример простой формулы DAX для вычисления средней цены продажи:
Средняя цена = DIVIDE(SUM(Sales[Revenue]), SUM(Sales[Quantity]), 0)
Для более сложных вычислений используются переменные с помощью конструкции VAR ... RETURN:
Процент премиальных продаж =
VAR TotalSales = SUM(Sales[Amount])
VAR PremiumSales = CALCULATE(SUM(Sales[Amount]), Products[Category]="Premium")
RETURN
DIVIDE(PremiumSales, TotalSales, 0)
Обратите внимание на ключевые особенности синтаксиса DAX:
- Формулы не чувствительны к регистру (sum = SUM)
- Пробелы игнорируются (можно форматировать код для удобства чтения)
- Строковые значения заключаются в двойные кавычки ("текст")
- Даты указываются в формате ГГГГ-ММ-ДД и заключаются в кавычки ("2023-10-15")
Основные операторы DAX в решении аналитических задач
Операторы DAX — базовые строительные блоки для создания формул. Понимание их работы существенно упрощает написание даже сложных выражений. 💪
Категория | Операторы | Пример использования | Результат | ||
---|---|---|---|---|---|
Арифметические | +, -, *, /, ^ | Прибыль = Sales[Revenue] – Sales[Cost] | Вычисление прибыли | ||
Сравнения | =, <>, >, <, >=, <= | Высокие продажи = IF(Sales[Amount] > 1000, "Да", "Нет") | "Да" для продаж больше 1000 | ||
Логические | &&, | , IN | Целевые клиенты = Sales[Age] > 30 && Sales[Income] > 50000 | TRUE для клиентов старше 30 с доходом выше 50000 | |
Текстовые | & | ФИО = Customer[LastName] & ", " & Customer[FirstName] | "Иванов, Иван" |
Мария Соколова, BI-аналитик в FMCG
Когда я только начинала работать с Power BI, мне казалось, что логические операторы в DAX слишком усложняют формулы. Однажды маркетинг попросил создать дашборд, отслеживающий эффективность акций в разных сегментах магазинов.
Вместо создания множества отдельных мер для каждого сегмента, я применила логические операторы в одной умной мере:
Эффективность акции = CALCULATE( SUM(Sales[Revenue]), Sales[IsPromotion] = TRUE, Sales[StoreType] IN {"A", "B"} || (Sales[StoreType] = "C" && Sales[Region] = "Центр") )
Эта формула моментально фильтровала только акционные продажи в магазинах типа A и B, а также в магазинах типа C, но только в центральном регионе.
Маркетологи были поражены скоростью обновления данных при изменении фильтров. А для меня это стало примером того, как комбинация операторов && (И), || (ИЛИ) и IN значительно сокращает код и делает аналитику более гибкой.
Особое внимание стоит уделить условным операторам, которые используются для создания динамических вычислений:
- IF(условие, значениееслиистина, значениееслиложь) — базовое условное выражение
- SWITCH(выражение, значение1, результат1, значение2, результат2, ..., [иначе]) — многовариантное условие
Пример использования SWITCH для категоризации продаж:
Категория продаж =
SWITCH(
TRUE(),
Sales[Amount] > 10000, "Крупная сделка",
Sales[Amount] > 5000, "Средняя сделка",
Sales[Amount] > 1000, "Малая сделка",
"Микротранзакция"
)
Важно помнить, что DAX использует "ленивое вычисление" логических операторов — если первая часть выражения с && даёт FALSE, вторая часть не проверяется (аналогично для || и TRUE).
Ключевые функции DAX для бизнес-анализа в Power BI
Функции DAX — это мощный инструментарий для решения разнообразных аналитических задач. Ниже представлены наиболее востребованные категории функций DAX с примерами их применения. 📊
1. Агрегационные функции
Используются для выполнения математических операций над наборами данных:
- SUM() — суммирование значений:
Общая выручка = SUM(Sales[Amount])
- AVERAGE() — среднее значение:
Средний чек = AVERAGE(Sales[Amount])
- MIN(), MAX() — минимальное и максимальное значения:
Максимальная сделка = MAX(Sales[Amount])
- COUNT(), COUNTA(), COUNTROWS() — подсчет значений:
Количество транзакций = COUNTROWS(Sales)
2. Фильтрующие функции
Позволяют модифицировать контекст фильтра для расчетов:
- CALCULATE() — изменяет контекст фильтра для выражения:
Продажи премиум = CALCULATE(SUM(Sales[Amount]), Products[Category]="Premium")
- FILTER() — применяет пользовательский фильтр:
Крупные сделки = CALCULATE(SUM(Sales[Amount]), FILTER(Sales, Sales[Amount] > 10000))
- ALL() — удаляет все фильтры из таблицы или столбца:
Доля рынка = DIVIDE(SUM(Sales[Amount]), CALCULATE(SUM(Sales[Amount]), ALL(Products)))
- ALLEXCEPT() — удаляет все фильтры, кроме указанных столбцов
3. Функции работы со временем
Мощный набор инструментов для анализа временных рядов:
- DATEADD() — сдвиг периода:
Продажи предыдущий год = CALCULATE(SUM(Sales[Amount]), DATEADD(Calendar[Date], -1, YEAR))
- SAMEPERIODLASTYEAR() — тот же период прошлого года
- PARALLELPERIOD() — параллельный период
- DATESYTD(), DATESMTD(), DATESQTD() — даты с начала года/месяца/квартала:
Продажи YTD = CALCULATE(SUM(Sales[Amount]), DATESYTD(Calendar[Date]))
4. Текстовые функции
Обработка и манипуляция строковыми значениями:
- CONCATENATE(), & — объединение строк
- UPPER(), LOWER() — изменение регистра
- LEFT(), RIGHT(), MID() — извлечение подстрок
- SEARCH(), FIND() — поиск подстроки
5. Статистические функции
- STDEV.S(), STDEV.P() — стандартное отклонение выборки/популяции
- VAR.S(), VAR.P() — дисперсия выборки/популяции
- MEDIAN() — медианное значение
- PERCENTILE.EXC(), PERCENTILE.INC() — процентили
Комбинируя эти функции, можно создавать сложные аналитические выражения для решения специфических бизнес-задач. Например, формула для расчета среднего чека с исключением выбросов:
Средний чек (очищенный) =
VAR AvgOrder = AVERAGE(Sales[Amount])
VAR StdDev = STDEV.P(Sales[Amount])
RETURN
CALCULATE(
AVERAGE(Sales[Amount]),
FILTER(
Sales,
Sales[Amount] >= AvgOrder – 2 * StdDev &&
Sales[Amount] <= AvgOrder + 2 * StdDev
)
)
Практическое применение DAX для оптимизации отчётов
Теперь, когда вы знакомы с основными функциями и операторами DAX, рассмотрим практические сценарии их применения для создания эффективных и информативных отчетов в Power BI. 🛠️
1. Создание ключевых показателей эффективности (KPI)
KPI — основа любого бизнес-дашборда. DAX позволяет создавать динамические показатели, реагирующие на фильтры:
Прирост продаж =
VAR CurrentSales = SUM(Sales[Amount])
VAR PrevSales = CALCULATE(
SUM(Sales[Amount]),
DATEADD(Calendar[Date], -1, YEAR)
)
RETURN
DIVIDE(CurrentSales – PrevSales, PrevSales, 0)
2. Накопительные итоги и скользящие средние
Для анализа трендов часто требуются накопительные итоги и скользящие средние:
Накопительный итог =
CALCULATE(
SUM(Sales[Amount]),
FILTER(
ALL(Calendar),
Calendar[Date] <= MAX(Calendar[Date]) &&
Calendar[Year] = MAX(Calendar[Year])
)
)
Скользящая средняя (7 дней) =
AVERAGEX(
DATESINPERIOD(
Calendar[Date],
MAX(Calendar[Date]),
-7,
DAY
),
SUM(Sales[Amount])
)
3. Сегментация и классификация данных
DAX помогает группировать данные для более наглядного представления:
ABC-классификация =
VAR CurrentProduct = MAX(Products[ProductID])
VAR TotalRevenue = CALCULATE(SUM(Sales[Revenue]), ALL(Products))
VAR ProductRevenue = SUM(Sales[Revenue])
VAR ProductShare = DIVIDE(ProductRevenue, TotalRevenue)
RETURN
SWITCH(
TRUE(),
ProductShare >= 0.8, "A",
ProductShare >= 0.5, "B",
"C"
)
4. Расчет бизнес-метрик
DAX позволяет создавать сложные бизнес-метрики, важные для принятия решений:
- Коэффициент конверсии:
Конверсия = DIVIDE(COUNTROWS(Sales), COUNTROWS(Visitors))
- Средний срок службы клиента:
CLV = AVERAGEX(Customers, DATEDIFF(Customers[FirstPurchase], Customers[LastPurchase], DAY))
- Маржинальность:
Маржа = DIVIDE(SUM(Sales[Revenue]) – SUM(Sales[Cost]), SUM(Sales[Revenue]))
5. Оптимизация производительности формул
Эффективные формулы DAX не только точны, но и быстры. Вот несколько приемов оптимизации:
- Используйте переменные (VAR) для хранения промежуточных результатов
- Избегайте вложенных вызовов CALCULATE, если возможно
- Используйте CALCULATETABLE вместо FILTER для больших наборов данных
- Применяйте SUMMARIZE для предварительной агрегации данных
Пример оптимизации с использованием переменных:
// Неоптимальная формула
Маржа (%) =
DIVIDE(
SUM(Sales[Revenue]) – SUM(Sales[Cost]),
SUM(Sales[Revenue])
) * 100
// Оптимизированная формула
Маржа (%) =
VAR Revenue = SUM(Sales[Revenue])
VAR Cost = SUM(Sales[Cost])
RETURN
DIVIDE(Revenue – Cost, Revenue, 0) * 100
Для максимальной эффективности отчетов также рекомендуется:
- Создавать отдельные меры вместо встроенных формул в визуализациях
- Использовать иерархии для улучшения навигации по данным
- Применять форматирование чисел в самих мерах с помощью функции FORMAT()
- Добавлять проверки на ошибки и деление на ноль
Понимание основных функций и операторов DAX открывает практически безграничные возможности для анализа данных в Power BI. Начните с простых формул и постепенно переходите к более сложным конструкциям. Регулярная практика и эксперименты с различными комбинациями функций — лучший способ освоить этот мощный инструмент. Помните: каждая формула DAX — это не просто код, а бизнес-логика, переведенная на язык данных, и ваша задача — сделать эту логику максимально понятной и эффективной для принятия решений.
Читайте также
- 10 лучших аналогов Power BI: от Tableau до бюджетных решений
- Что такое Power Query и зачем он нужен?
- Разработка BI-системы: пошаговое руководство для бизнеса
- Power Pivot: 15 примеров трансформации бизнес-аналитики в Excel
- Power BI: 7 впечатляющих кейсов трансформации бизнеса с аналитикой
- Интерфейс Power BI Desktop: как быстро освоить и работать эффективно
- Интеграция SQL и Power Query: примеры запросов
- Визуализация данных в Power BI
- DAX в Power BI: освоение языка формул для продвинутой аналитики
- Основы SQL для работы с Power Query