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

Расчет отклонений

Мелкие радости
Рвав-рвав, сегодня я — фитнес-собака!

Похоже, вопрос дизайна незримо присутствует в окружающих меня вещах, и это будет уже 2-я заметка в этом году (из 2-х!), на эту тему :-)
Перед вами — 6-я заметка из нашего цикла «Мелкие радости», и сегодня мы рассмотрим часто встречающиеся запросы по визуализации сравнения плана и факта в наиболее простом его варианте — таблице. На эту тему написано довольно много, и, в принципе, тема не особо сложна.

Пример:

  • Имеется таблица, содержащая исходную информацию в виде номенклатуры товаров, а также плановой и фактической суммы продаж:

Таблица
Исполнение продаж

Задача:

  • посчитать абсолютное отклонение факта от плана;
  • посчитать относительное отклонение факта от плана;
  • отформатировать данные таким образом, чтобы положительные значения отображались со знаком «+», а отрицательные со знаком «-»;
  • визуализировать при помощи иконок направление движения показателей;
  • раскрасить значения в разные цвета;
  • объединить получившийся результат в один столбец.

Рвав-рвав, как уже отмечалось выше, все довольно просто, но муторно.


Концептуальные вопросы для разработчика:

  • С помощью чего будем считать показатели? Реализация возможна как на мерах, так и на расчетных столбцах. Меры — выбор редакции.
  • Как будет осуществляться форматирование данных, а именно — появление знаков «+» и «-» ?. В данном случае собака Смайл пойдет простым путем, и нарисует их текстом, но особо привередливые человеки могут использовать функцию FORMAT.
  • Что делать с иконками? Иконки можно вставлять как картинку, или использовать символы Unicode. Символы — выбор редакции.
  • Каким способом, собственно, красить-то будем? Понятное дело, что надо использовать условное форматирование, но вот цвета и условия можно указывать либо при помощи встроенных возможностей, либо задавать при помощи меры. Опять же, меры — выбор редакции.

Решение:

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

План =
SUM ('Исполнение продаж'[Плановая сумма])

Факт =
SUM ('Таблица'[Фактическая сумма])

  • Далее необходимо сформировать визуальный элемент «Таблица», при этом в качестве столбцов с суммами мы будем использовать полученные меры:

Таблица
Формирование визуального элемент с использованием мер

  • Затем необходимо посчитать абсолютное отклонение факта продаж от плана:

Абсолютное отклонение =
[Факт] - [План]

  • И, конечно же, нужно не забыть про относительное отклонение:

Относительное отклонение =
DIVIDE ([Абсолютное отклонение], [План], 0 )

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

Таблица
Расчет абсолютного и относительного отклонения плановых данных от фактических данных

  • Следующим шагом создание меры для цветового обозначения, кодировку цветов, естественно, нужно предварительно подобрать:

Цвет =
SWITCH (
    TRUE (),
    [Абсолютное отклонение ] > 0"#008E26",
    [Абсолютное отклонение ] < 0"#EB475A",
    [Абсолютное отклонение ] = 0"#C35300"
)

  • Далее необходимо собрать получившийся результат в один столбец, с добавлением определенных символов Unicode и форматирования. Формула, позволяющая получить составное значение, выглядит следующим образом:

Результат =
VAR _AbsoluteDeviation =
    IF (
        [Абсолютное отклонение ] > 0,
        "+" & [Абсолютное отклонение ],
        [Абсолютное отклонение ]
    )
VAR _RelativeDeviation =
    IF (
        [Относительное отклонение ] > 0,
        "+" & FORMAT ( [Относительное отклонение ], "0.0%" ),
        FORMAT ( [Относительное отклонение ], "0.0%" )
    )
VAR _UnicodeSquare = 9724
VAR _UnicodeTriangleUp = 9650
VAR _UnicodeTriangleDown = 9660
VAR _UnicodeLable =
    SWITCH (
        TRUE (),
        [Абсолютное отклонение ] = 0UNICHAR ( _UnicodeSquare ),
        [Абсолютное отклонение ] > 0UNICHAR ( _UnicodeTriangleUp ),
        [Абсолютное отклонение ] < 0UNICHAR ( _UnicodeTriangleDown ),
        BLANK ()
    )
VAR _UnicodeLongSpace = 8194
VAR _Gap =
    UNICHAR _UnicodeLongSpace )
RETURN
    _AbsoluteDeviation & _Gap & _RelativeDeviation & _Gap & _UnicodeLable

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

Таблица
Получение составного значения в столбце "Результат"

  • Последним шагом является применение условного форматирования на основе меры «Цвет»:

Таблица
Условное форматирование

На этом все.

Рвав-рвав, женский пол с наступающим праздником!
Ваш Смайл