Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

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

В данном разделе представлены функции DAX, которые вы можете использовать в текущей версии платформы. Каждая функция сопровождается примером. Наши примеры основываются на модели данных построенной по схеме “звезда“, таблицей фактов в которой является factonlinesales:

Image Removed

Для ознакомления с поддерживаемыми

DAX (Data Analysis Expressions) - это мощный язык формул и выражений, предназначенный для работы с данными в различных инструментах анализа данных. С помощью DAX можно создавать меры (measures) и выполнять сложные аналитические операции, что делает его незаменимым инструментом для анализа больших объемов данных.

Концепции DAX

Контекст вычислений

Одной из ключевых концепций DAX является контекст вычислений. Контекст определяет, как интерпретируются и вычисляются формулы в зависимости от условий. В DAX выделяют два основных типа контекстов:

  1. Контекст строки (row context)
    Этот контекст определяет, как данные обрабатываются в пределах текущей строки таблицы. Например, при использовании функции SUMX происходит итерация по каждой строке таблицы, и указанное выражение применяется к каждой строке отдельно. Контекст строки позволяет работать с данными на уровне отдельных записей, что особенно полезно для построения агрегаций или вычислений, зависящих от значений в конкретных строках.

  2. Контекст фильтра (filter context)
    Этот контекст определяет, какие данные учитываются при выполнении вычислений. Он применяется в дополнение к контексту строки и позволяет сузить область вычислений до определенных значений. Например, фильтры, примененные в отчете или заданные с помощью функций, влияют на результат вычислений. Контекст фильтра часто используется в таких функциях, как CALCULATEFILTERALL и других. Например, функция CALCULATE позволяет изменять контекст фильтра для выполнения вычислений с учетом дополнительных условий, а RELATED позволяет извлечь значения столбцов из связанных таблиц внутри контекста строки.

Понимание контекстов - ключ к эффективному использованию DAX. Правильное применение контекста строки и фильтра позволяет создавать гибкие аналитические решения, адаптированные под конкретные бизнес-задачи.

Рассмотрим несколько примеров, которые демонстрируют данную концепцию.

Пример 1 (контекст строки)

Предположим, компания хочет рассчитать прибыль для каждого бренда в таблице продаж. Прибыль рассчитывается как разница между выручкой и себестоимостью для каждой строки (бренда). Для этого используется следующая формула DAX:

Блок кода
Прибыль = SUMX (Продажи, Продажи[Выручка] - Продажи[Себестоимость])

В данной формуле Продажи[Выручка] и Продажи[Себестоимость] – это столбцы в таблице Продажи. Формула применяется к каждой строке таблицы, вычисляя прибыль для каждого бренда.

about1.pngImage Added

Пример 2 (контекст фильтра)

Теперь предположим, что компания хочет рассчитать общую выручку только для определенного региона (например, "Северный регион"). Для этого нужно применить фильтр по региону:

Блок кода
Выручка_Северный_регион = 
    CALCULATE(
        SUM(Продажи[Выручка]), 
        FILTER(Регионы, Регионы[Регион] = "Северный регион")
    )

где

  • SUM(Продажи[Выручка]) – суммирует выручку.

  • CALCULATE – изменяет контекст фильтра, добавляя условие Регионы[Регион] = "Северный регион", чтобы учитывать только данные для указанного региона.

    about2.pngImage Added

Пример 3 (комбинация контекста строки и фильтра)

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

Блок кода
Средняя_прибыль_текущий_год = 
CALCULATE(
    AVERAGEX(Продажи, Продажи[Выручка] - Продажи[Себестоимость]),
    FILTER(Продажи, Продажи[Год] = YEAR(TODAY()))
)

где

  • AVERAGEX – функция, которая итерируется по каждой строке таблицы Продажи и вычисляет среднее значение прибыли (Выручка - Себестоимость).

  • CALCULATE – добавляет фильтр, чтобы учитывать только данные за текущий год (Продажи[Год] = YEAR(TODAY())).

    about3.pngImage 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 вернёт просто общую сумму продаж, а не среднее значение на клиента. В итоге такая мера вернёт вернёт общую сумму продаж, а не среднюю сумму продаж на одного клиента:

Image Added

Для ознакомления с поддерживаемыми DAX-функциями, пройдите по ссылке ниже::

➡️ Поддерживаемые функции DAX


Смотрите также

📄 Создание и визуализация мер
📄 Математические операторы

На этой странице

Оглавление
minLevel1
maxLevel6
outlinefalse
styledisc
typelist
printabletrue

🕑 Время чтения: 3 мин.


Нужна дополнительная помощь?

Свяжитесь с технической поддержкой.