Использование #CalculationGroup (#CG) в визуальном элементе Матрица
Продолжаем серию статей про #CG. На этот раз задача состоит в следующем:
Вывести в матрице значения за выбранный год с разбивкой по месяцам и иметь возможность переключить абсолютное значение на относительное предыдущего года. При этом, когда выбрано абсолютное значение, то в заголовке столбца должен быть указан номер года, а когда выбрано относительное значение, то какой год с каким сравнивается. Пример: в срезе выбран 2021 год, соответственно название столбца должно быть "2020 vs 2021".
Итак, у нас есть таблица фактов продаж за 3 года, состоящая из двух столбцов [Date] и [qty]:
С помощью функции CALENDARAUTO() создадим справочник calendar и добавим в него столбцы:[Year], [Month], [Month number]:
Также нам понадобится вспомогательная таблица, с помощью которой у нас будут меняться названия столбцов. Данную таблицу мы создаем с помощью функций DAX на основе таблицы calendar, чтобы при обновлении модели набор заголовков менялся автоматически. Т.к. название заголовка у нас будет зависеть от выбранного года, то нам нужен будет столбец [Year] с номером года, столбец [Заголовок], который мы собственно и будем выводить, и столбец [#CG], в котором у нас будет индекс соответствующего items из #CalculationGroup:
Далее нам необходимо будет создать всего одну меру [Количество] = SUM(facts[qty]). После чего переходим к созданию #ГруппВычислений. На вкладке "Внешние инструменты" открываем TabularEditor, если вы его ещё не установили, то можно скачать по ссылке
Создаем #CalculationGroup с названием !CGTesting:
Создаем два #CalculationItems:
В Expression Editor задаём вычисление для [Количество]:
В Expression Editor задаём вычисление для [Год к году]:
В разделе свойств #CalculationItems не забываем задать параметр Format String Expression, чтобы числа отображались как целые числа с разделителями разрядов ("#,#"), а проценты были процентами ("0%").
Из предыдущей статьи вы наверное помните, что данный параметр можно также задать с помощью функции, если не помните, то обязательно почитайте.
Дополнение от 20.07.2021: Также необходимо задать порядок #CalculationItems изменив в свойствах значение в поле Ordinal на 0 и 1 в соответствии с таблицей ГодыVS.
Добавляем на лист визуальный элемент Срез, добавляем в него столбец calendar[Year], настраиваем внешний вид как список и переключатель "Единичный выбор"
Добавляем на лист визуальный элемент Срез, добавляем в него столбец !CGTesting[Name], настраиваем внешний вид как список и переключатель "Единичный выбор"
И финальный штрих - добавляем на лист визуальный элемент Матрица: в Строки - calendar[Month], в Столбцы - ГодыVS[Заголовок], в Значения - меру [Количество]
Всё, теперь у нас есть матрица, в которой у нас меняется не только расчёт(мера), но и её название. При этом это название динамически будет изменяться при обновлении модели.