Записки охотника

Использование меры в качестве переключателя

Тематические статьи
Рвав-рвав, собака Смайл приветствует аудиторию!

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

Пример:

  • Таблица «Курсы валют» содержит плановые курсы на определенные даты для российского рубля (RUR), доллара США (USD), и евро (EUR), то есть это обычный справочник:

Таблицы
Курсы валют

  • Таблица «Суммы для пересчета» содержит суммы в локальной валюте (RUR), для которых необходимо сделать пересчет в другие валюты (USD и EUR) соответствии с курсом :

Таблица
Суммы для пересчета

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

Задача:

На основе представленных данных необходимо обеспечить пересчет сумм локальной валюты в дополнительные, для просмотра результатов использовать визуальный элемент «Срез».

Процесс разработки:

  • Создана таблицу «Настройка среза» — это таблица, представляющая собой справочник валютных кодов, созданный на уровне DAX, при помощи следующей формулы:

Настройка среза =
DISTINCT (
    SELECTCOLUMNS ( 'Курсы валют', "Код валюты", 'Курсы валют'[Код валюты] )
)

Данная таблица будет содержать все, что необходимо для реализации меры-переключателя, визуальным воплощением переключателя, как вы, наверное, уже поняли из названия таблицы, будет обычный элемент «Срез».

  • В таблице «Настройка среза» создан расчетный столбец «Порядок» — это столбец, содержащий индекс, привязанный к определенному коду валюты, который необходим для корректной работы механизма переключения. Формула столбца следующая:

Порядок =
SWITCH ('Настройка среза'[Код валюты], «RUR», 1, «USD», 2, «EUR», 3)

  • В таблице «Настройка среза» также создан расчетный столбец «Название» — это столбец, содержащий текстовые названия кодов валют, элемент необязателен, создан для удобства конечного пользователя. Формула столбца следующая:

Название валюты =
SWITCH (
    'Настройка среза'[Порядок],
    1"Российский рубль",
    2"Доллар США",
    3"Евро"
)

  • Проверка получившегося результата:

Таблица
Настройка среза

  • Следующим этапом является расстановка связей, схема модели представлена ниже:


  • Далее необходимо реализовать расчеты, позволяющие пересчитать исходную сумму в каждую из валют. Для этого необходимо создать, как минимум, две меры, для доллара США и Евро, но в нашем примере для целей проверки корректности пересчета «оригинальная сумма → пересчитанная сумма», также создается мера для российского рубля. Ее мы также будем использовать в дальнейшем для значения «по умолчанию». Пример формулы для доллара США может выглядеть следующим образом, хотя, конечно, вариантов может быть несколько:

USD =
VAR _StartAmount =
    SUM ( 'Суммы для пересчета'[Оригинальная сумма] )
VAR _Rate =
    MAXX (
        FILTER ( 'Курсы валют', 'Курсы валют'[Код валюты] = "USD" ),
        'Курсы валют'[Курс валюты]
    )
VAR _EndAmount =
    DIVIDE _StartAmount_Rate0 )
RETURN
    _EndAmount

Рвав-рвав, совет от хитрой собаки Смайла:
— Если конструкции, применяемые в расчетах, не просты, например, содержат несколько действий, как в формуле выше, то на первых порах лучше разбить итоговую формулу на несколько составляющих (переменных) используя «var».
— Если к имени переменной добавлять знак «_», то при подстановке в формулу ваши переменные можно будет быстро найти в общем списке.

  • Формула меры-переключателя строится следующим образом:

Переключатель =
VAR _Toggle =
    SELECTEDVALUE ( 'Настройка среза'[Порядок] )
RETURN
    SWITCH (
        TRUE (),
        _Toggle = 1, [RUR],
        _Toggle = 2, [USD],
        _Toggle = 3, [EUR],
        [RUR]
    )

Рвав-рвав, товарищи, ловите очередное обещание: есть идея создавать отдельные посты для описания работы тех вещей, которые часто применяются в повседневной жизни. Планируется выкладывать некоторые хитрости по принципу «Мелочь, а приятно». Волевым решением, но с одобрения высоких инстанций, данный контент будет иметь общий заголовок «Мелкие радости» с раскрытием темы поста.

Процесс визуализации данных:

  • Создать визуальный фильтр «Валюта отчетности», используя элемент «Срез», при этом в качестве значений использовать данные столбца «Название валюты» таблицы «Настройка среза». Собственно при помощи данного элемента будет происходить процесс переключения.
  • Создать график «Валютные курсы», используя элемент «График». График визуализирует исходные данные, а именно, значения курсов валют на конкретные даты, и необходима для иллюстрации результатов пересчета.
  • Создать таблицу «Демонстрация пересчета», используя элемент «Матрица». Элемент визуализирует как исходные данные (столбцы «Дата» и «Оригинальная сумма», так и получившийся результат (столбец «Пересчитанная сумма»).

Проверка результатов:

  • Пересчет в доллары США:

Таблица
Вариант 1: пересчет в Доллары США

  • Пересчет в Евро:

Таблица
Вариант 2: пересчет в Евро

  • Вид по умолчанию (Российские рубли):

Таблица
Вариант 3: вид по умолчанию

Таким образом, при нажатии соответствующей кнопки на визуализации «Срез», происходит перестроение графика (стандарт), а также пересчет данных столбца в соответствующую валюту (переключение).

Рвав-рвав, товарищи, надеюсь, это было познавательно!
Статья закончена, а я спать пошел, завидуйте мне, двуногие, я сплю, когда хочу :-Р
Ваш Смайл