Моделирование данных с помощью DAX
В Visiology 3 вы можете моделировать данные с помощью формул, в которых используются DAX-функции. Эти функции позволяют выполнять сложные вычисления, результатом которых становятся новые данные. Полученные данные можно использовать для углубленного анализа данных и создания более информативных дашбордов.
DAX (Data Analysis Expressions) - это мощный язык формул и выражений, предназначенный для работы с данными в различных инструментах анализа данных. С помощью DAX можно создавать меры (measures) и выполнять сложные аналитические операции, что делает его незаменимым инструментом для анализа больших объемов данных.
Концепции DAX
Контекст вычислений
Одной из ключевых концепций DAX является контекст вычислений. Контекст определяет, как интерпретируются и вычисляются формулы в зависимости от условий. В DAX выделяют два основных типа контекстов:
Контекст строки (row context)
Этот контекст определяет, как данные обрабатываются в пределах текущей строки таблицы. Например, при использовании функцииSUMXпроисходит итерация по каждой строке таблицы, и указанное выражение применяется к каждой строке отдельно. Контекст строки позволяет работать с данными на уровне отдельных записей, что особенно полезно для построения агрегаций или вычислений, зависящих от значений в конкретных строках.Контекст фильтра (filter context)
Этот контекст определяет, какие данные учитываются при выполнении вычислений. Он применяется в дополнение к контексту строки и позволяет сузить область вычислений до определенных значений. Например, фильтры, примененные в отчете или заданные с помощью функций, влияют на результат вычислений. Контекст фильтра часто используется в таких функциях, какCALCULATE,FILTER,ALLи других. Например, функцияCALCULATEпозволяет изменять контекст фильтра для выполнения вычислений с учетом дополнительных условий, аRELATEDпозволяет извлечь значения столбцов из связанных таблиц внутри контекста строки.
Понимание контекстов - ключ к эффективному использованию DAX. Правильное применение контекста строки и фильтра позволяет создавать гибкие аналитические решения, адаптированные под конкретные бизнес-задачи.
Рассмотрим несколько примеров, которые демонстрируют данную концепцию.
Пример 1 (контекст строки)
Предположим, компания хочет рассчитать прибыль для каждого бренда в таблице продаж. Прибыль рассчитывается как разница между выручкой и себестоимостью для каждой строки (бренда). Для этого используется следующая формула DAX:
Прибыль = SUMX (Продажи, Продажи[Выручка] - Продажи[Себестоимость])В данной формуле Продажи[Выручка] и Продажи[Себестоимость] – это столбцы в таблице Продажи. Формула применяется к каждой строке таблицы, вычисляя прибыль для каждого бренда.
Пример 2 (контекст фильтра)
Теперь предположим, что компания хочет рассчитать общую выручку только для определенного региона (например, "Северный регион"). Для этого нужно применить фильтр по региону:
Выручка_Северный_регион =
CALCULATE(
SUM(Продажи[Выручка]),
FILTER(Регионы, Регионы[Регион] = "Северный регион")
)где
SUM(Продажи[Выручка])– суммирует выручку.CALCULATE– изменяет контекст фильтра, добавляя условиеРегионы[Регион] = "Северный регион", чтобы учитывать только данные для указанного региона.
Пример 3 (комбинация контекста строки и фильтра)
Далее компания хочет рассчитать среднюю прибыль по брендам, но только для тех, которые были проданы в текущем году. Для этого можно использовать следующую формулу:
Средняя_прибыль_текущий_год =
CALCULATE(
AVERAGEX(Продажи, Продажи[Выручка] - Продажи[Себестоимость]),
FILTER(Продажи, Продажи[Год] = YEAR(TODAY()))
)где
AVERAGEX– функция, которая итерируется по каждой строке таблицыПродажии вычисляет среднее значение прибыли (Выручка - Себестоимость).CALCULATE– добавляет фильтр, чтобы учитывать только данные за текущий год (Продажи[Год] = YEAR(TODAY())).
Преобразование контекста
Еще одной важной концепций DAX является преобразование контекста (context transition). Это механизм, который преобразует контекст строки в контекст фильтра. Происходит это, когда функции, такие как CALCULATE, используются для изменения контекста фильтра и выполнения вычислений в новом контексте. Например, когда внутри CALCULATE используется итератор, такой как SUMX или AVERAGEX, контекст строки преобразуется в контекст фильтра. Для иллюстрации давайте рассмотрим простой пример.
Предположим, вам необходимо рассчитать средний объем продаж на клиента, используя данные о продажах и клиентах. Для этого можно воспользоваться следующей формулой:
AverageSalesPerCustomer =
AVERAGEX(
SUMMARIZE(dimcustomer, dimcustomer[customerkey]),
CALCULATE(
SUMX(
factonlinesales,
factonlinesales[salesquantity] * factonlinesales[unitprice]
)
)
)где
SUMMARIZE(dimcustomer, dimcustomer[customerkey])– создаёт временную таблицу с уникальными значениями ключей клиентов (customerkey) из таблицыdimcustomer. Это позволяет получить список всех уникальных клиентов.AVERAGEX– проходит по каждому клиенту из этого списка и вычисляет среднее значение для заданного выражения.Внутри
AVERAGEXдля каждого клиента:CALCULATE– изменяет контекст фильтрации, устанавливая текущего клиента в качестве фильтра.SUMX– вычисляет общую сумму продаж для текущего клиента, умножая количество проданных товаров (salesquantity) на их цену (unitprice) из таблицыfactonlinesales.
Результат работы
SUMX(общая сумма продаж для каждого клиента) передаётся вAVERAGEX, который вычисляет среднее значение по всем клиентам.
Таким образом, формула AverageSalesPerCustomer отвечает на вопрос: «Какую среднюю сумму потратил один клиент за всё время?»
Если же мы не будем использовать CALCULATE, то строчный контекст (каждая строка – текущий клиент) не преобразуется в фильтрационный контекст для таблицы factonlinesales. Это означает, что внутри SUMX(factonlinesales, ...) не будет фильтрации по текущему клиенту. В результате при каждой итерации AVERAGEX мы получим одно и то же значение (полные продажи), повторяющееся для каждого клиента. Эти одинаковые значения затем усреднятся. Усреднение набора одинаковых чисел даст то же самое число, т.е AVERAGEX вернёт просто общую сумму продаж, а не среднее значение на клиента. В итоге такая мера вернёт вернёт общую сумму продаж, а не среднюю сумму продаж на одного клиента:
Для ознакомления с поддерживаемыми DAX-функциями, пройдите по ссылке ниже::
Смотрите также
На этой странице
Время чтения: 3 мин.
Нужна дополнительная помощь?