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

Редактор можно вызвать по командам создания и редактирования нового элемента в контекстном меню иерархии измерения. Имеется также возможность определить формулу расчета для существующего элемента, что тоже может быть полезным.
Синтаксис выражений
В выражениях можно использовать элементы измерений, арифметические операции, константы, операторы, группировку с использованием скобок, встроенные функции (их, кстати, можно комбинировать). Есть возможность расширения набора встроенных функций за счет реализации собственных функций, которые также становятся доступными в редакторе формул после регистрации.
Мы рассмотрим несколько примеров вычислений для источника с информацией о затратах на производство продукции.
Арифметика
Допустим, мы хотим рассчитать и вывести в отчет прибыль от продаж продукции как разницу между выручкой и полными затратами. Для этого в измерении
Статьи расходов создадим элемент
Прибыль:
{Выручка от реализации продукции, услуг[t]} — {Производственная себестоимость отгруженной продукции (работ, услуг) — всего[t]}
Обратите внимание, что при вставке элементов в формулу платформа обозначает их вместе с индексом t на конце. Данный индекс означает расчет в текущей точке измерения времени.
После добавления элемента
Прибыль мы получим следующий результат:

В нашем источнике данные отражаются в разрезе месяцев. Если мы хотим представить и сравнивать их в разрезе кварталов, мы также можем создать такие вычисляемые элементы в измерении времени:
{X[2012-01]} + {X[2012-02]} + {X[2012-03]}
Присвоим элементу имя
1кв 2012. В данном случае, когда мы вставили в редакторе первые три месяца 2012 года, платформа отобразила их в формуле в виде специального синтаксиса для измерения времени.
После того, как элемент создан, его можно разместить в желаемой позиции иерархии, используя редактор иерархии, доступный по команде
Иерархия -> Редактировать на ленте инструментов. Переместим элемент в начало иерархии:

Все изменения с иерархиями выполняются на уровне отчета, то есть пользователь может создавать все необходимые для его отчетности элементы, при этом исходные измерения в репозитории платформы, образующие единую корпоративную модель данных, никак не изменяются.
Время
В нашем примере с
Прибылью мы вычисляли значения в текущей точке измерения времени. Однако в формулах можно легко ссылаться на предыдущие и следующие периоды времени, заменяя индекс t на t+1, t-1 и т.д. Для этого нужно дважды кликнуть по элементу формулы, чтобы перейти в режим редактирования индекса.
Давайте рассчитаем изменение выручки по отношению к предыдущему году, в процентах. Создадим в измерении
Статьи расходов элемент
Прирост:
({Выручка от реализации продукции, услуг[t]} — {{Facts}|{Товары}|Выручка от реализации продукции, услуг|{Предприятия}[t-1]}) / {Выручка от реализации продукции, услуг[t-1]} * 100
Аналогичные расчеты можно выполнять, используя функции навигации по иерархии времени
lead и
lag на заданное число позиций:
({Выручка от реализации продукции, услуг[t]} — lag({Выручка от реализации продукции, услуг[t]}, 1)) / lag({Выручка от реализации продукции, услуг[t]}) * 100

Чтобы результат расчета был корректным, важен порядок выполнения вычислений в отчете. Агрегация данных выполняется первой, а затем агрегированные значения используются в формуле для элемента
Прирост. Для контроля и управления порядком вычислений в отчете доступна команда
Конструктор -> Цепочка вычислений. В открывающемся диалоге вычисления можно переупорядочивать, после чего все вычисляемые элементы будут пересчитаны.
Фильтрация
Иногда необходимо выполнить расчет, используя не текущие фильтры пользователя, а определенный заданный фильтр. Например, рассчитаем выручку по продуктам
Бензин и
Бензиновая фракция и выведем ее вместе с общей выручкой.
Для этого создадим вычисляемый элемент
Выручка (Бензин):
{Выручка от реализации продукции, услуг[t]}
И тут же в редакторе формул создадим новый фильтр, используя команду определения фильтров прямо над полем редактирования выражения. В фильтре выберем элементы измерения, по которым нам необходимо выполнить расчет.

Мы получим следующий результат:

Для корректного вычисления данного элемента порядок должен быть обратным – сначала должен вычисляться наш элемент
Выручка (Бензин) с учетом фильтра, а затем выполняться агрегация.
Условные выражения
Вычисления по определенным элементам измерения можно выполнять, используя не фильтр, а условные выражения. В выражении можно проверять значения различных атрибутов элементов измерения. Рассчитаем выручку по продуктам
Бензин и
Бензиновая фракция с помощью условия:
if(contains({Выручка (бензины).ТОВАРЫ.NAME[t]}, «Бензин»), {Выручка от реализации продукции, услуг[t]}, Null)
Обратите внимание на особенность обращения к атрибутам измерений – для текущего вычисляемого элемента через точку указывается имя интересующего измерения и далее его атрибут.
Мы получим результат, аналогичный предыдущему примеру:
Автоматические вычисления
Некоторые простейшие вычисления также можно создавать в отчетах автоматически, используя для выделенных элементов измерения функции Добавить по отмеченным с операцией, Объединить в новый элемент в контекстном меню. Например, мы можем сгруппировать элементы
Бензин и
Бензиновая фракция в элемент
Бензины и
фракции. Для этого следует выделить строки с нужными элементами в срезе и вызвать команду
Объединить в новый элемент -> Сумма в контекстном меню.

Мы получим следующий результат:

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