Сравнение версий
Версия | Старая версия 1 | Новая версия Текущий |
---|---|---|
Изменения, внесенные | ||
Сохранено |
Ключ
- Эта строка добавлена.
- Эта строка удалена.
- Изменено форматирование.
В Visiology 3представлена новая схема моделирования данных. С вы можете моделировать данные с помощью формул, в которых используются DAX функции, вы можете производить -функции. Эти функции позволяют выполнять сложные вычисления, результатом которых будут становятся новые данные, которые вы можете затем . Полученные данные можно использовать для углубленного анализа данных и создания более информативных дашбордов. Таким образом, научившись создавать формулы DAX, вы сможете наиболее эффективно использовать свои данные, получая нужную информацию для решения различных бизнес-задач.
В данном разделе представлены функции DAX, которые вы можете использовать в текущей версии платформы. Каждая функция сопровождается примером. Наши примеры основываются на модели данных построенной по схеме “звезда“, таблицей фактов в которой является factonlinesales:

Для ознакомления с поддерживаемыми
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
– изменяет контекст фильтра, добавляя условиеРегионы[Регион] = "Северный регион"
, чтобы учитывать только данные для указанного региона.Image Added
Пример 3 (комбинация контекста строки и фильтра)
Далее компания хочет рассчитать среднюю прибыль по брендам, но только для тех, которые были проданы в текущем году. Для этого можно использовать следующую формулу:
Блок кода |
---|
Средняя_прибыль_текущий_год =
CALCULATE(
AVERAGEX(Продажи, Продажи[Выручка] - Продажи[Себестоимость]),
FILTER(Продажи, Продажи[Год] = YEAR(TODAY()))
) |
где
AVERAGEX
– функция, которая итерируется по каждой строке таблицыПродажи
и вычисляет среднее значение прибыли (Выручка - Себестоимость
).CALCULATE
– добавляет фильтр, чтобы учитывать только данные за текущий год (Продажи[Год] = YEAR(TODAY())
).Image Added
Преобразование контекста
Еще одной важной концепций 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 мин.
Нужна дополнительная помощь?