Группы вычислений в Power BI

В этой статье я хотел бы наглядно и на живом примере показать, как можно упростить и ускорить расчёты в Microsoft Power BI с помощью групп вычислений (calculation groups) и параметров полей (field parameters). Само собой, я предполагаю, что вы не полный ноль в Power BI и, как минимум, умеете загружать туда данные, связывать их в модель и писать по ним простые меры на DAX. Если с этим пока сложно, то рекомендую ознакомиться сначала с этой статьей и видеоуроком.

Постановка задачи

Итак, предположим, что мы загрузили в Power BI и связали в модель три простых таблицы с данными:

  • таблицу фактов Sales с данными о продажах за 2020-2021 гг., где есть стоимость, вес, количество штук и прочие детали по каждому заказу;
  • таблицу-справочник Customers с данными о покупателях (связана с Sales по уникальному ID клиента);
  • календарную таблицу дат Dates - must have в любой модели данных (связана с Sales по дате продажи).
Модель данных

Затем мы создали три простейших базовых меры для подсчёта итогов по стоимости, весу и количеству штук:

Вес = SUM( Sales[Вес] )

Стоимость = SUM( Sales[Стоимость] )

Штуки = SUM( Sales[Штук] )

Если в целях проверки поместить их, например, в визуализацию матрицы с годами и месяцами, то это будет выглядеть примерно так:

Базовые меры в матрице

Теперь представим, что от мудрого руководителя нам прилетает вводная: хочу видеть в похожей таблице с годами и месяцами более подробную аналитику по стоимости, например:

  • среднюю стоимость на клиента
  • стоимость нарастающим итогом с начала года (YTD)
  • долю стоимости текущего месяца внутри года

Т.е. на первый взгляд нужно садиться и писать ещё три меры, используя в них базовую меру стоимости:

Стоимость на клиента = AVERAGEX( Customers, [Стоимость] )

Стоимость YTD = TOTALYTD( [Стоимость], Dates[Дата] )

Доля месяца в году по стоимости = DIVIDE( [Стоимость], CALCULATE( [Стоимость], REMOVEFILTERS( Dates[Месяц], Dates[Номер месяца] ) ) )

Потом их можно будет закинуть в матрицу и получить желаемое.

Но где гарантия, что увидев такую красоту, ваш руководитель не скажет: "О, здорово! А теперь сделай мне такие же расчёты, но по весу товаров. И по количеству штук тоже давай сделаем!"

Если решать задачу «в лоб», то для этого нам придётся для этого создать еще 6 мер – дважды повторить каждую из 3 мер, заменяя там последовательно исходную меру выручки на меру прибыли и меру количества проданных товаров. Очевидно, что это чисто механическая, скучная работа, которая, к тому же, забивает нашу модель кучей однообразных мер. А если базовых мер будет не три, как в нашем простом примере, а сильно больше? Тоска зелёная.

На самом деле для решения подобной задачи можно создать группу вычислений (calculation group) – набор шаблонных формул, в которые затем автоматически будет подставляться любая выбранная пользователем мера: хочешь - стоимость, хочешь - вес, хочешь - штуки.

Создание группы вычислений

В старых версиях Power BI для работы с группами вычислений приходилось использовать сторонние приложения, например, бесплатную надстройку Tabular Editor. Начиная же с ноябрьского обновления 2023 года инструменты для работы с группами вычислений появились и во встроенном функционале Power BI.

Переключитесь в Представление модели (Model view) и на панели Данные (Data) справа перейдите на вкладку Модель (Model). В древовидном списке содержимого должен быть пункт Группы вычислений (Calculation Groups):

Группы вычисление в панели Данные на вкладке Модель

Щёлкните правой кнопкой мыши по строке Группы вычислений и выберите команду Новая группа вычислений (New calculation group). К сожалению, группы вычислений «не дружат» с неявными мерами (и это ещё одна причина, чтобы их не использовать), о чём мы получим честное предупреждение, с которым надо будет согласиться:

Предупреждение о несовместимости с неявными мерами

Давайте сразу переименуем нашу группу, сделав по ней двойной щелчок левой кнопкой мыши, и назовём её, например, Аналитика. Соседний Столбец группы вычислений (Calculation group column) аналогичным образом тоже переименуем, например, в Метрики.

После этого можно переходить непосредственно к созданию элементов вычислений – наших четырёх шаблонных формул, входящих в группу. Для этого щёлкнем правой кнопкой мыши уже по строке Элементы расчета (Calculation Items), выберем команду Новый элемент вычисления (New calculated item), а затем введём выражение для его определения в строку формул.

Для начала давайте создадим элемент, который просто ссылается на базовую меру:

Итого =SELECTEDMEASURE ()

Здесь функция SELECTEDMEASURE() используется как заполнитель – вместо неё позднее, при использовании группы вычислений в отчёте, будет автоматически подставляться любая используемая в текущий момент мера, будь то стоимость, количество проданных товаров, вес и т. д. 

Следующие три меры создаются совершенно аналогично:

В среднем на клиента =
AVERAGEX ( Customers, SELECTEDMEASURE () )

YTD =
TOTALYTD ( SELECTEDMEASURE (), Dates[Дата] )

Доля в году =
DIVIDE (
    SELECTEDMEASURE (),
    CALCULATE (
        SELECTEDMEASURE (),
        REMOVEFILTERS ( Dates[Месяц], Dates[Номер месяца] )
    )
)

В итоге, если все сделали правильно, у нас должна получиться вот такая картина:

Созданная группа вычислений

Настройка форматов

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

Чтобы это реализовать, выберем требуемый вычисляемый элемент на вкладке Модель (Model) в панели Данные (Data), а затем на соседней панели Свойства (Properties) включим опцию Строка динамического формата (Dynamic format string). После этого можно щёлкнуть ниже по ссылке Изменить в строке формул DAX (Edit in DAX formula bar) и ввести туда маску нашего пользовательского формата, состоящую из трёх фрагментов, разделённых точкой с запятой:

"+0.0%;-0.0%;0%"

Принципы тут те же, что и при создании пользовательских форматов для мер. Первый фрагмент (+0.0%) будет применяться к положительным значениям отклонений и отображать их в виде процентов со знаком плюс и одним дробным разрядом. Второй (-0.0%) – делать то же самое, но со знаком минус для отрицательных значений. Третий (0%) будет применяться только к нулевым отклонениям.

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

"0.0%"

Выводим результаты

Осталось воспользоваться созданной и настроенной группой вычислений в нашем дашборде. Для этого создадим матрицу, где:

  • в области строк будут лежать те же годы и месяцы;
  • в область столбцов поместим столбец Метрики из нашей группы Аналитика;
  • в область значений можно положить любую меру, которая должна быть использована как базовая мера для нашей группы вычислений – например, ту же стоимость.

В результате получаем:

Результат

А если закинуть в область значений вместо стоимости, например, штуки, то получим аналогичную картину, но уже для них и т.д.

И не требуется создавать никаких дополнительных однообразных мер. Удобно.

Добавляем срез-переключатель для базовой меры

Если же хочется сделать совсем красиво, то можно сделать срез-переключатель, где наш руководитель сам сможет выбирать меру (стоимость, вес или штуки), которую он хочет видеть в отчёте. 

Для этого:

  1. Выбираем на вкладке Моделирование (Modeling) команду Создание параметра - Поля (Create parameter - Field).
  2. Закидываем в него все базовые меры (Стоимость, Вес, Штуки).
  3. Проверяем, чтобы внизу окна была включена галочка Добавить срез на страницу (Add slicer to page) и жмём кнопку Создать (Create).

Создание параметра поля

Останется заменить в созданной ранее матрице в области значений лежащую там меру на только что сделанный параметр - и можно будет переключаться между базовыми мерами в группе вычислений при помощи удобного среза:

Срез для выбора параметра базовой меры

Ссылки по теме



11.08.2025 06:48:46
Здравствуйте.
А можно ли внутри группы вычислений, создавая новый элемент вычисления, ссылаться на уже имеющийся элемент вычисления? Есть ощущение, что я когда-то читал, что можно, но это было еще до появления встроенного в PBI инструмента, и речь 100% шла о Tabular Editor. Недавно понадобилась такая возможность, но беглый поиск результатов не дал.
13.08.2025 17:20:37
Добрый день, Илья!
Можно сослаться, используя таблицу, которая формируется при создании группы вычислений. Например, на вычисляемый элемент YTD можно сослаться как
'Аналитика'[Метрики] = "YTD" 
09.09.2025 12:34:04
Добрый день, Николай.
Можно ли поменять порядок расположения метрик в матрице?
Например, чтобы первый столбец был "Итого", а потом "В среднем на клиента".
09.09.2025 12:42:45
Да, конечно - просто перетащите их мышью в правой панели (в представлении Модели).
09.09.2025 12:58:30
Спасибо большое! Сразу не увидел этой опции) И кустарно проставил индексы перед названием элемента расчёта.
Будет здорово, если вы будете больше уроков. Или выпустите книгу о microsoft fabric / bi.
09.09.2025 15:06:39
Николай, ещё один вопрос.
Подскажите, как форматировать числовые значения параметра в значениях?
Обычно щелчком правой кнопки можно сделать условное форматирование, сейчас - нет такой возможности.
Попробовал в визуализации сделать в значениях задать условное форматирование по правилу, но тоже нет такого меню - только выбор цвета.
Я хотел сделать градацию к примеру: 1) значения >100% -красным 2) значения меньше 100% - зелёным и пр.
Причём это нужно не для всех метрик, а только для части
Наверх