Вычисляемые показатели

Интерфейс ввода формул

Формулы для вычисления показателя задаются в окне редактирования или создания показателя (в паспорте показателя или в АП/конструкторе: иконка шестеренки справа от названия показателя или кнопка “Новый показатель”).

_images/115.png

По нажатию на вкладку «Формула» разворачивается область для задания формул.

_images/116.png

В этой области есть:

  • Кнопка «Выбрать аргументы» — для выбора показателей, которые будут использоваться в формулах.

  • Список показателей, выбранных для использования в формуле (под кнопкой «Выбрать аргументы»).

  • Набор кнопок с математическими знаками («+», «-», «*», «/», «(», «)», «=») для использования в формулах.

  • Кнопки с выпадающим списком доступных в Cистеме формул.

  • Поле для ввода формул.

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

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

Все выбранные показатели появятся в списке под кнопкой “Выбрать аргументы”. Каждому из них будет присвоена буквенная переменная (А, В, С и так далее), актуальная только для задания формулы в этом показателе. Она указана в поле с показателем (слева от его названия).

Переменная «А» всегда присваивается показателю, который сейчас редактируется, остальные — в порядке выбора.

При вводе формул обязательно, чтобы в левой части формулы в качестве аргумента стоял показатель, который в настоящий момент редактируется (невозможно при редактировании показателя А написать формулу вида В=С+Е).

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

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

Задание формулы

В окне ввода формулы при помощи кнопок с математическими действиями, кнопок с названиями показателей и функций, задаются формулы для вычисления показателей.

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

Аналогично добавляются функции и знаки арифметических действий. Подробно о каждой функции написано в подразделе «Функции».

Каждая новая формула должна начинаться с новой строки, между двумя формулами должен стоять знак «;» (после последней формулы он не нужен).

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

Фильтры в формулах

По клику на показатель в формуле можно выбрать фильтр для этого показателя. Во вспомогательном окне будут отображены аналитические признаки показателя, которые можно добавить в фильтры.

_images/118.png

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

_images/119.png

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

_images/120.png

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

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

Например, при создании нескольких формул для одного показателя, фильтры на левую часть определяют в каких случаях будет применяться та или иная формула.

Правила написания формул

Общее

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

Для создания или изменения формулы расчета показателя в карточке показателя предусмотрено окно редактирования формул (подробнее см. в подразделе «Задание формул и агрегации»).

Примеры простых формул:

  1. Остаток = Доход - Расход

  2. Баланс ПРИ Статья баланса = Остаток = Баланс ПРИ Статья баланса = Доход - Баланс ПРИ Статья баланса = Расход

  3. Баланс ПРИ (Статья баланса = Остаток И Период = 2018 г.)= Баланс ПРИ (Период = 2017 г. И Статья баланса = Остаток) - Баланс ПРИ (Статья баланса = Расход И Период = 2017 г.)

  4. Доля расходов на производство, % = 100.0 * (Расход ПРИ Статья баланса = Производство) / Расход

Свободные переменные

Система позволяет добавлять в формулы свободные переменные, значения которых берутся из аналитических признаков показателя. Они, как правило, используются в следующих целях:

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

f(p=x) = g(k=x) + h(p=x)
  • Проигнорировать значение аналитического признака внутри формулы:

f(p=x) = g() + h(p=x)
  • Заменить значение аналитического признака на фиксированное значение:

f(p=x) = g(p= "foo") + h(p=x)

Для одной и той же переменной типы данных в аналитических признаках должны быть одинаковыми. Если значение переменной берется из справочника, то это должен быть один и тот же справочник.

Для того, чтобы добавить свободную переменную в формулу, следует кликнуть по аргументу. Откроется окно настроек показателя. В этом окне требуется перенести нужный аналитический признак в фильтр, поставить галочку в чекбоксе «переменная» и ввести букву переменной, например, «x».

_images/121.png

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

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

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

Голы команды ПРИ Команда=x = Голы гостя ПРИ Гость=x + Голы хозяина ПРИ Хозяин=x

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

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

_images/122.png

Система позволяет для свободных переменных использовать «сдвиг», в случае если переменная описывает период или справочник, которому она соответствует, упорядочен. Сдвиг в фильтре с типом значений «Период» позволяет осуществить сдвиг на целое число периодов (день, месяц, год и т.д.) от текущего периода данного типа. Например, чтобы сдвинуть значение на один период назад, необходимо в поле ввода переменной ввести значение «X-1».

Подробнее о порядке элементов справочника см. в подразделе «Порядковый номер».

Значение по умолчанию

Система позволяет указать для аргументов значения по умолчанию, тогда формула будет вычислена, даже если какие-то аргументы не определены. Для задания значения по умолчанию при задании аргумента формулы в поле «Значение по умолчанию» необходимо ввести/выбрать значение по умолчанию.

_images/196.png

Применять только аналитические признаки

При использовании этого функционала к аргументу применяются (участвуют в запросе или проваливаются глубже в вычисления) только фильтры с показателями - аналитическими признаками показателя-аргумента.

_images/402.png

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

Например, если используется:

  • Показатель 1, с признаками X и Y,

  • Показатель 2, с признаками X и Y,

  • Показатель 3, с признаком X.

и задана формула для Показателя 1:

_images/403.png

То если вывести в отчете Показатель 1 (с заданными в отчете признаками X=x1, Y=y1), Система попробует обработать формулу:

Показатель 1 ПРИ (X=x1 И Y=y1) = Показатель 2 ПРИ (X=x1 И Y=y1) + Показатель 3 ПРИ (X=x1 И Y=y1). Но значения для Показателя 3 (с признаками X=x1, Y=y1) не существует, т.к. у Показателя 3 признака Y нет. Формула не посчитается.

Если же в формуле отметить для показателя Показатель 3 чекбокс «Применять только аналитические признаки», то, соответственно, при выводе в отчете показателя Показатель 1 (с признаками X=x1, Y=y1) - Система обработает формулу:

Показатель 1 ПРИ (X=x1 И Y=y1) = Показатель 2 ПРИ (X=x1 И Y=y1) + Показатель 3 ПРИ (X=x1). Обработка пройдет корректно и формула посчитается.

Таким образом, эта формула практически эквивалентна формуле со свободной переменной:

Показатель 1 ПРИ (Y=y) = Показатель 2 ПРИ (Y=y) + Показатель 3, за исключением того, что не требует существования фильтра по Y на Показатель 1 для расчета.

Значения из фильтров

Этот функционал позволяет переводить «фильтры» в «аргументы», что необходимо при вычислении определенных формул. Если в формуле необходимо использовать значение показателя, который используется в качестве фильтра в отчете, то при задании аргумента у него следует выбрать опцию «Брать значение из фильтров»

_images/197.png

Показатели по цепочке

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

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

  1. В паспорте показателя нажать на кнопку «Редактировать».

  2. В разделе «Формула» нажать левой кнопкой мыши на интересующий показатель типа «Справочник» в формуле.

  3. В появившемся окне нажать на кнопку «+» справа от названия показателя типа «Справочник».

  4. Выбрать интересующий показатель.

  5. Закрыть все окна и нажать на кнопку «Сохранить».

Примеры формул с использованием конструкции «показатели по цепочке»:

Наименование вышестоящей организации = Административная структура.Родительский элемент в дереве.Полное наименование

Дата подписания контракта = Контракт.Дата подписания

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

  1. В паспорте показателя нажать на кнопку «Редактировать».

  2. В разделе «Формула» нажать левой кнопкой мыши на интересующий показатель в формуле.

  3. В появившемся окне выбрать фильтр в левой части окна (нажать на кнопку «+» или выбрать один из перечисленных аналитических признаков).

  4. В правой части окна нажать на оранжевую кнопку возле названия выбранного показателя-фильтра.

  5. В новом появившемся окне нажать на кнопку «+» справа от названия показателя-фильтра.

  6. Выбрать интересующий показатель-фильтр.

  7. Закрыть все окна и нажать на кнопку «Сохранить».

Пример формулы с использованием «показателей по цепочке»:

Количество контрактов, заключённых в мае 2017 г. = КОЛИЧЕСТВО (Контракт ПРИ (Контракт.Дата подписания > 30.04.2017 И Контракт.Дата подписания < 01.06.2017))

Примечание: Формулы с использованием «показателей по цепочке» задаются только для невычисляемых показателей, то есть рассчитываются только по исходным данным, не по вычисленным.

Также конструкция «показатели по цепочке» применяется при построении отчетов, форм и реестров (см. подраздел «Показатели по цепочке»).

Рекурсивные формулы

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

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

Количество на начало периода ПРИ Период = 1999 г. = 0

Количество на начало периода ПРИ Период = x = Количество на конец отчетного периода ПРИ Период = x-1

При этом:

Количество на конец периода = Количество на начало отчетного периода + Доходы за год

Агрегация

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

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

При задании агрегации в окне формул, она будет выполняться по обычным правилам вычисления, в порядке написания формул. Таким образом можно регулировать приоритетность цепочки расчетов для показателя.

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

Показатель ПРИ Признак = X = СУММА (Показатель ПРИ Признак.Родитель = X)

Показатель «Родитель» (id = -400) - системный показатель, который используется для древовидных справочников и периодов, указывает на родительский узел в дереве, его можно применять ко всем показателям-древовидным справочникам и показателям-периодам.

Формулы для вычисления виртуальных признаков

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

Показатель1 = Показатель2.Показатель1 , заданная для Показатель1

эквивалентна использованию следующей формулы, заданной для Показатель3, для которого требуется применить «виртуальный признак».

Показатель3 ПРИ Показатель1 = X = Показатель3 ПРИ Показатель2.Показатель1 = X

Арифметические операции и операции сравнения

В формулах допустимо использование арифметических операций «+», «-», «*», «/». При этом вcе числовые типы показателей в этих операциях совместимы между собой.

Для операций «-» и «+» дополнительно совместимы типы «Период» и «Целое». Например, допустимы выражения:

Период1 + 2

Период1 - 1

Результатом применения операции является период того же типа, что и значение операнда типа «Период» со сдвигом в число шагов периода, равному значению операнда типа «Целое» (т.е. +2 дня, -1 месяц).

Для операции «+» дополнительно совместимы между собой операнды с типом строка. Результатом применения операции «+» к строкам является конкатенация (объединение в одну строку) этих строк.

Для числовых показателей допустимо использование операций «+» и «-» как унарных.

В формулах допустимо использование бинарных операций сравнения «==», «<», «<=», «>», «>=».

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

Функции

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

Каждая функция имеет свои правила работы с типами элементов.

Функции делятся на два типа:

  • Обычные - это функции, которые осуществляют прямое преобразование какого-либо значения в другое значение.

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

Обычные функции

Список обычных (не «жадных») функций (в формате «функция (количество аргументов) - описание»):

Математические функции:

  • RANK (1) - Вычисление ранга значения показателя среди его обязательных аналитических признаков.

  • SARIMA (8 или 9) - Прогноз по сезонной интегрированной модели авторегрессии - скользящего среднего. Принимает восемь или девять аргументов. Первый аргумент - показатель (или вложенное выражение), значения которого определяют параметры модели для построения прогноза (т.е. значения, которые и будут «продолжены» в будущее результатом вычисления прогноза). Следующие аргументы - целые числа, определяют порядки модели: порядок авторегресси (d), порядок интегрирования (d), порядок скользящего среднего (q), порядок авторегрессии сезонной составляющей (P), порядок интегрирования сезонной составляющей (D), порядок скользящего среднего сезонной составляющей (Q), сезонность временного ряда (s), например s = 12 для данных по месяцам и сезонности равной 1 году. Последний (необязательный) аргумент - показатель типа «Период», задает временной признак для прогноза, определяющий динамику изменения значений во времени и моменты времени для прогноза из фильтров. Если последний аргумент не задан, то он автоматически определяется по аналитическим признакам показателя - первого аргумента.

  • А_ПРОЦЕНТ_ОТ (2) - Процент, который составляют значения первого аргумента, по второму аргументу. Например «ПРОЦЕНТ_ОТ ( прибыль, магазин )». Автоматически агрегирует и производит вложенные вычисления по аналитическим признакам показателя - первого аргумента или по аргументам со второго, если заданы.

  • В_ДОЛЕ (2) - Фильтрация значений, которые входят по рангу в определенную долю общей суммы. Первый аргумент - показатель, значения которого фильтруются, второй аргумент - доля (число от 0 до 1).

  • ЛОГ (1 или 2) - Вычисление логарифма. Принимает один или два аргумента. Первый аргумент - показатель, от значений которого вычисляется логарифм. Второй аргумент - основание логарифма. Если второй аргумент не задан, то вычисляется натуральный логарифм.

  • МАКС_ИЗ (произвольное) - Максимальное из значений аргументов.

  • МИН_ИЗ (произвольное) - Минимальное из значений аргументов функции.

  • ПРОГНОЗ (1 или 2) - Автоматический прогноз по обобщенной аддитивной модели y(t) = g(t) + s(t) + h(t) + Et, где g(t) представляет тренд, s(t) - сезонность, h(t) - аномальные дни, Et - ошибку. Принимает один или два аргумента. Первый аргумент - показатель (или вложенное выражение), значения которого определяют параметры модели для построения прогноза (т.е. значения, которые и будут «продолжены» в будущее результатом вычисления прогноза). Второй (необязательный) аргумент - показатель типа «Период», задает временной признак для прогноза, определяющий динамику изменения значений во времени и моменты времени для прогноза из фильтров. Если второй аргумент не задан, то он автоматически определяется по аналитическим признакам показателя - первого аргумента.

  • ПРОГНОЗ_ВЕРХ - Автоматический прогноз (верхняя оценка) по обобщенной аддитивной модели y(t) = g(t) + s(t) + h(t) + Et (аналогично функции ПРОГНОЗ)

  • ПРОГНОЗ_НИЗ - Автоматический прогноз (нижняя оценка) по обобщенной аддитивной модели y(t) = g(t) + s(t) + h(t) + Et (аналогично функции ПРОГНОЗ)

  • ПРОЦЕНТ_ОТ - Процент, который составляют значения первого аргумента, по второму аргументу. Например «ПРОЦЕНТ_ОТ ( прибыль, магазин )».

  • СКОЛЬЗЯЩЕЕ_СРЕДНЕЕ (3) - Среднее значение первого показателя-аргумента за несколько предыдущих значений второго показателя-аргумента. Третий аргумент - число предыдущих значений.

  • СУММА_ЗА (3) - Сумма значений первого показателя-аргумента за несколько предыдущих значений второго показателя-аргумента. Третий аргумент - число предыдущих значений.

  • ЭКСП (1 или 2) - Вычисление экспоненциальной функции. Принимает один или два аргумента. Первый аргумент - показатель, в значение которого (показатель степени) возводится число из второго аргумента (основания степени). Если основание степени не задано, то оно равно числу e - основанию натурального логарифма.

Функции для работы с датами и периодами:

  • ДЛИНА_ГОДА (1) - Количество дней в году, в который попадает заданная дата (или начало заданного периода): «ДЛИНА_ГОДА ( Период или Дата )».

  • ДЛИНА_КВАРТАЛА (1) - Количество дней в квартале, в который попадает заданная дата (или начало заданного периода): «ДЛИНА_КВАРТАЛА ( Период или Дата )».

  • ДЛИНА_ПЕРЕСЕЧЕНИЯ (3) - Длина пересечения - один интервал задается первыми двумя аргументами-периодами, второй интервал - третьим аргументом-периодом.

  • ДОЛЯ_В_МЕСЯЦЕ (1) - Доля периода типа «День» (аргумента функции) в месяце, который его содержит (для первого дня месяца доля равна нулю).

  • РАБОЧИЙ_ДЕНЬ (1) - Период с тем же типом, что и период-аргумент, и началом в ближайший рабочий день позже периода-аргумента.

  • РАБОЧИЙ_ДЕНЬ_ДО (1) - Период с тем же типом, что и период-аргумент, и началом в ближайший рабочий день раньше периода-аргумента.

  • С_НАЧАЛА_КВАРТАЛА (1) - Количество дней между датой, заданной аргументом, (или началом периода, заданного аргументом), и началом квартала, в который входит эта дата (или начало периода): «С_НАЧАЛА_КВАРТАЛА (Период или Дата)».

  • СДВИГ_ДАТА (2, 3 или 4) - Первый аргумент - дата (период). Второй, третий и четвертый - количество лет, месяцев и дней соответственно, на которые сдвигается дата из первого аргумента.

  • СЕЙЧАС (0) - Текущие дата-время.

Функции для работы со строками:

  • ПОДСТРОКА (3) - Получение подстроки из строки с разделителями. Первый аргумент - исходная строка, второй аргумент - разделитель, третий аргумент - индекс (порядковый номер) возвращаемого отрезка (индекс первого отрезка - 1).

Функции для преобразования типов данных:

  • ДАТА (1, 2 или 3) - Получение даты. Принимает 1, 2 или 3 аргумента. Если задан один аргумент, то строковое значение аргумента преобразуется в дату в соответствии с ISO-форматом (год-месяц-день). Если заданы два аргумента, то строковое значение первого аргумента преобразуется в дату в соответствии с форматом, заданным вторым аргументом - строкой, содержащей символы форматирования: %Y (4 цифры года), %y (2 последние цифры года), %m (номер месяца), %d (день месяца) и другие. Например, «%d.%m.%Y» - формат даты вида «31.12.2000». Если заданы три аргумента, то дата формируется из первого, второго и третьего аргумента, задающих год, месяц и день даты соответственно.

  • ДРОБНОЕ_ДЕСЯТИЧНОЕ (1) - Приведение аргумента к типу «Денежный».

  • НАЧАЛО_ПЕРИОДА (1) - Дата начала периода, переводит тип «Период» в тип «Дата и Время».

  • ОКРУГЛ (1) - Округление числа до ближайшего целого.

  • ПЕРИОД (1 или 2) - Преобразование даты к периоду. Первый аргумент - дата, второй - строка с типом периода, по умолчанию (если тип периода не задан) - «День».

  • СТР (1) - Приведение аргумента к типу «Строка».

  • СТР_ДАТА (2) - Форматирование даты в строку. Первый аргумент - дата, второй аргумент - строка, содержащая латинские символы форматирования через свой разделитель: E (название месяца), j (день месяца), n (номер месяца), t (число дней в месяце), w (день недели, где 0 - воскресенье), W (неделя года), y (последние две цифры года), Y (год), z (день года) и другие.

  • ЦЕЛОЕ (1) - Округление числа до меньшего целого и преобразование строки в целое.

Логические функции:

  • ЕСЛИ (2 или 3) - Принимает два или три аргумента. Первый аргумент - логическое выражение. Если оно истинно, возвращает второй аргумент, если ложно - то третий аргумент (в варианте с двумя аргументами в этом случае считаем, что значение не вычислено).

  • ЕСТЬ (1) - Есть одно значение (выражение-аргумент этой функции имеет одно значение).

  • СОДЕРЖИТ (2) - Проверяет вхождение значения показателя выбора из справочника, заданного вторым аргументом, в множество - значение показателя множественного выбора из справочника, заданного первым аргументом.

Программируемые функции:

  • КОД (2 и более) - Первый аргумент - строка: либо константа, либо показатель типа «Строка». Второй и следующие аргументы - произвольные константные значения или показатели. В первом аргументе задается код на языке python. Значения остальных аргументов доступны в коде через словарь fields, аналогично вычисляемым полям в коннекторах. В словаре fields по ключам «arg1», «arg2» и т.д. доступны значения второго (первого исключая код), третьего и т.д. аргумента функции КОД.

Код заданный в первом аргументе должен использовать инструкцию return для получения результата в вычислении.

Далее некоторые функции описаны подробнее.

Функция КОД

Допустим, есть такой набор исходных данных:

_images/functions_code_data.png

Тогда для показателя со следующей формулой:

_images/functions_code_formula.png

Получим такой вид отчета:

_images/functions_code_result.png
Функция СТР_ДАТА

Функция применяется для преобразования даты в строку.

Если необходимо получить строку в виде даты в обычном российском формате, следует задать формат «d.m.Y»:

Строка_Дата заключения контракта = СТР_ДАТА ( Дата заключения контракта , «d.m.Y»).

Результаты применения данной формулы:

_images/formula_str_date1.png

Если необходимо получить строку в виде даты в российском формате, но без ведущего нуля при записи числа, следует задать формат «j.m.Y»:

Строка_Дата заключения контракта = СТР_ДАТА ( Дата заключения контракта , «j.m.Y»).

Результаты применения данной формулы:

_images/formula_str_date2.png

Если необходимо получить строку текста с вставленными в нужных местах названиями числа, месяца и года заключения контракта, следует использовать несколько вызовов функции СТР_ДАТА, например:

Строка_Сведения о контракте = (((((«Год заключения контракта: » + СТР_ДАТА ( Дата заключения контракта , «Y»)) + «; Число и месяц заключения контракта: » ) + СТР_ДАТА ( Дата заключения контракта , «j»)) + » » ) + СТР_ДАТА ( Дата заключения контракта , «M»)).

Результаты применения данной формулы:

_images/formula_str_date3.png

Если необходимо получить строку в формате: день, месяц и год из показателя типа «Дата и время»:

Дата заказа = ((((СТР_ДАТА ( Дата и время заказа , «j») + «число») + СТР_ДАТА ( Дата и время заказа , «m»)) + «месяц») + СТР_ДАТА ( Дата и время заказа , «Y»)) + «год».

Результаты применения данной формулы:

_images/date_time.PNG

Примечание: форматирование дня месяца и номера месяца может выводиться двумя способами. Например, дата 02.05.2009. При «j» день месяца «2» , а при «d» получаем «02». При «n» номер месяца «5» , а при m получаем «05».

Функция ЕСЛИ

Функция ЕСЛИ принимает два или три аргумента. Первый аргумент - логическое выражение с использованием оператора сравнения («==», «<», «<=», «>», «>=»). Если оно истинно, функция возвращает второй аргумент. Если логическое выражение ложно - функция возвращает третий аргумент (а в варианте с двумя аргументами в этом случае нет значения).

Пример с двумя аргументами (если «Признак» = 10, то в ячейку попадет «Значение», если «Признак» != 10, то в ячейке будет «пусто»):

ЕСЛИ ( Признак = 10, Значение )

Пример с тремя аргументами (если «Признак» = 10, то в ячейку попадет «Значение», если «Признак» != 10, то в ячейке будет «0»):

ЕСЛИ ( Признак = 10, Значение, 0 )

Таким образом, первое выражение означает: с некоторыми общими признаками (контекст вычисления в текущей ячейке) есть объект, у которого есть значение «Признак», равное 10, и есть объект, у которого есть значение «Значение», например:

_images/396.png

где показатель «Значение_ЕСЛИ» вычисляется по формуле с использованием функции «ЕСЛИ»:

_images/397.png

Основной случай использования функции «ЕСЛИ» - с аргументами, когда нужно выбрать одно из значений в зависимости от других значений. Функцию «ЕСЛИ» с признаками возможно использовать только в том случае, если точно известно, что происходит.

Для объединения двух логических условий в первой части выражения с «ЕСЛИ» используется знак «*» вместо «И». Вместо «ИЛИ» используется знак «+».

Функция ЕСТЬ

Функция ЕСТЬ - выражение-аргумент этой функции имеет одно значение, «1» - если значение есть, «пусто» - если значения нет.

ЕСТЬ ( Значение ПРИ Признак = 10 )

Смысл формулы состоит в том, что при признаке «Признак» равном 10, берется значение «Значение» - т.е. результатом будет один (вычисленный) объект.

_images/398.png

Показатель «Значение_ЕСТЬ» вычисляется по формуле с использованием функции «ЕСТЬ»:

_images/399.png

Функцию «ЕСТЬ» можно использовать внутри других функций, например, в функции «ЕСЛИ»:

ЕСЛИ ( ЕСТЬ Значение , 5, 0)

_images/400.png

Также у функции существует «жадный» вариант - функция «ЕСТЬ_ЗНАЧЕНИЕ». Эта функция определяет уникальное значение («есть хотя бы одно значение»).

Функции от показателей типа «Период»

Для показателей типа «Период» работают формулы сложения и вычитания:

Период_день2 = Период_день1 + 2

Период_месяц2 = Период_месяц1 - 1

Результатом применения формул является период того же типа со сдвигом в число шагов периода, указанное в формуле (т.е. +2 дня, -1 месяц)

Функция, актуальная для периода с типом «День»:

Период_день2 = РАБОЧИЙ_ДЕНЬ (Период_день1)

возвращает ближайший рабочий день в будущем - понедельник (пн), если итоговое Период_день1 выпало на субботу (сб) или воскресенье (вс).

Формула

Период_день2 = РАБОЧИЙ_ДЕНЬ_ДО (Период_день1)

возвращает ближайший рабочий день в прошлом - пятницу (пт), если итоговое Период_день1 выпало на субботу (сб) или воскресенье (вс).

Формула

Число = ДОЛЯ_В_МЕСЯЦЕ (Период)

возвращает долю дня в месяце (для первого числа месяца доля равна 0).

Формула

Число = ДЛИНА_ПЕРЕСЕЧЕНИЯ (Период1, Период2, Период3)

возвращает длину пересечения двух интервалов - (п1.начало, п2.начало) и (п3.начало, п3.конец). То есть первый временной интервал - от начала периода Период1 до начала периода Период2, второй временной интервал - от начала периода Период3 до конца периода Период3.

Функции от показателей типа «Дата»

Пусть показатель «А» имеет численный тип значений, а показатель «Дата» принимает значения типа «Дата и время». Тогда:

  1. Формула

A = С_НАЧАЛА_КВАРТАЛА (Дата)

определяет, в какой квартал попала дата - аргумент функции, и возвращает разницу в днях между аргументом и датой начала квартала.

  1. Формула

А = ДЛИНА_КВАРТАЛА (Дата)

определяет, в какой квартал попала дата - аргумент функции, и возвращает разницу в днях между датой конца квартала и датой начала квартала.

Даты начала и конца кварталов:

  • 1 января – 31 марта.

  • 1 апреля – 30 июня.

  • 1 июля – 30 сентября.

  • 1 октября – 31 декабря.

  1. Формула

А = ДЛИНА_ГОДА (Дата)

вычисляет, сколько дней содержится в году, соответствующем данной дате.

Функции ДЛИНА_КВАРТАЛА и ДЛИНА_ГОДА также работают с аргументами типа «Период». Соответствующий квартал или год определяется в зависимости от даты начала периода.

Над функциями от показателей типа «Дата» можно производить математические операции.

«Жадные» функции

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

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

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

В простейшем виде формула имеет вид:

Суммарное производство = СУММА (Производство)

Число производителей = КОЛИЧЕСТВО (Производитель)

Пример формулы с фильтрами:

Обработано с начала года ПРИ (Период = x) = СУММА (Обработано ПРИ (Период <= в текущем году x))

Существует возможность использовать несколько «жадных» функций в одной формуле:

Средний надой = СУММА (Надой) / КОЛИЧЕСТВО (Надой)

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

Сумма А = СУММА (А, показатель, по которому суммируем)

A = B / C

Список «жадных» функций (в формате «функция (количество обязательных аргументов) - описание»):

Математические функции:

  • ДИСПЕРСИЯ (1)- Мера разброса (отклонения от среднего) значений показателя.

  • КВАНТИЛЬ (2) – первый аргумент - показатель в значениях которого искать квантиль, второй - доля, определяющая квантиль.

  • КОЛИЧЕСТВО (1) – количество значений показателя.

  • КОЛИЧЕСТВО_УНИК (1) – количество уникальных значений.

  • МАКС (1) – максимум значений показателя.

  • МЕДИАНА (1) – значение, которое делит ранжированную совокупность значений показателя на две равные части.

  • МИН (1) – минимум значений показателя.

  • СРЕДНЕЕ (1) – среднее значений показателя.

  • СТАНДАРТОЕ_ОТКЛОНЕНИЕ (1) – мера разброса (отклонения от среднего) значений показателя. Квадратный корень из дисперсии.

  • СУММА (1) – сумма значений показателя.

  • УРЕЗСРЕДНЕЕ - Возвращает среднее внутренности множества данных. Вычисляет среднее, отбрасывая заданный процент данных с экстремальными значениями. Первый аргумент - данные для вычисления среднего, второй аргумент - значение от 0 до 1, задающее процент данных с экстремальными значениям, которые не учитываются при вычислении среднего

Строковые функции:

  • СУММА_ЗПТ (1) – получение строки, в которой запятыми разделены значения показателя.

  • СУММА_ЗПТ_УНИК (1) – получение строки, в которой запятыми разделены уникальные значения показателя.

  • УНИК_СТР (2) – объединение уникальных значений показателя, задаваемого первым аргументом, в строку с разделителем, задаваемым вторым аргументом.

Логические функции:

  • ЕСТЬ_ЗНАЧЕНИЕ (1) – определение уникального значения (функция может быть использована для избавления от расслоения).

  • ПОСЛЕДНЕЕ (1) – последнее из значений первого аргумента, отсортированных по признакам для этого аргумента, заданных дополнительными аргументами или фильтрами на первый аргумент.

  • УНИК (1) - Уникальное значение показателя - первого аргумента. Возвращает одно - уникальное значение, если все значения одинаковые. Если значения не одинаковые, то результат вычисления функции - отсутствие значения.

Программируемые функции:

  • КОД_АГР (2 и более) - Предназначена для обработки расслоений с помощью кода на языке python. Принимает 2 и более аргументов. В отличие от функции КОД, из-за особенностей вычислений, первый аргумент здесь - это показатель, значения которого будут обработаны кодом, заданным во втором аргументе. Третий и следующие аргументы - это обычные дополнительные аргументы жадных функций и они не могут быть использованы внутри кода. Значения первого аргумента передаются в код, заданный вторым аргументом, в виде списка ( list ) значений и доступны в коде через fields[„arg1“]. Код заданный во втором аргументе должен использовать инструкцию return для получения результата в вычислении.

Агрегирующие функции:

  • Все функции, с префиксом «А_» работают аналогично функциям без него, но предварительно автоматически агрегируют показатель аргумент по всем его аналитическим признакам.

Функция КОД_АГР

Рассмотрим следующую формулу:

_images/functions_codeagr_formula.png

Где Фибоначчи - показатель из примера для функции КОД()

Такая формула возвращает произведение всех чисел, заданных первым аргументом, поэтому получим:

_images/functions_codeagr_result.png

Поскольку в отчете не указан конкретный период, то в формулу попадают все существующие значения показателя Фибоначчи, который определен только для первых 11 номеров (см. Функция КОД), то есть мы получаем произведение первых 11 чисел.

Функция ПОСЛЕДНЕЕ

Формула, возвращающая значение показателя B с наибольшим значением признака Период:

А = ПОСЛЕДНЕЕ (В, Период)

Формула, выражающая расчет агрегации значений показателя A с функцией агрегации «последнее по периоду»:

А ПРИ Период = Х = ПОСЛЕДНЕЕ (А ПРИ Период.Родительский элемент в дереве = Х)

«Жадные» макросы

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

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

  • А_СУММА.

  • А_МЕДИАНА.

  • А_СТАНДАРТОЕ_ОТКЛОНЕНИЕ.

  • А_СРЕДНЕЕ - агрегирует «правильно», т.е. считает по уровням не среднее средних, а настоящее среднее.

  • А_ДИСПЕРСИЯ.

  • А_УНИК_СТР.

  • А_МИН.

  • А_МАКС.

  • А_КВАНТИЛЬ.

  • А_КОЛИЧЕСТВО_УНИК.

Функции прогнозирования

  • SARIMA (8 или 9) - Прогноз по сезонной интегрированной модели авторегрессии - скользящего среднего. Принимает восемь или девять аргументов. Первый аргумент - показатель (или вложенное выражение), значения которого определяют параметры модели для построения прогноза (т.е. значения, которые и будут «продолжены» в будущее результатом вычисления прогноза). Следующие аргументы - целые числа, определяют порядки модели: порядок авторегресси (d), порядок интегрирования (d), порядок скользящего среднего (q), порядок авторегресси сезонной составляющей (P), порядок интегрирования сезонной составляющей (D), порядок скользящего среднего сезонной составляющй (Q), сезонность временного ряда (s), например s = 12 для данных по месяцам и сезонности равной 1 году. Последний (необязательный) аргумент - показатель типа «Период», задает временной признак для прогноза, определяющий динамику изменения значений во времени и моменты времени для прогноза из фильтров. Если последний аргумент не задан, то он автоматически определяется по аналитическим признакам показателя - первого аргумента. Предполагается, что параметры подбираются в сторонней системе.

  • ПРОГНОЗ (1 или 2) - Автоматический прогноз по обобщенной аддитивной модели y(t) = g(t) + s(t) + h(t) + Et, где g(t) представляет тренд, s(t) - сезонность, h(t) - аномальные дни, Et - ошибку. Принимает один или два аргумента. Первый аргумент - показатель (или вложенное выражение), значения которого определяют параметры модели для построения прогноза (т.е. значения, которые и будут «продолжены» в будущее результатом вычисления прогноза). Второй (необязательный) аргумент - показатель типа «Период», задает временной признак для прогноза, определяющий динамику изменения значений во времени и моменты времени для прогноза из фильтров. Если второй аргумент не задан, то он автоматически определяется по аналитическим признакам показателя - первого. Подробней о методе прогноза: https://research.fb.com/prophet-forecasting-at-scale/, https://peerj.com/preprints/3190.pdf

  • ПРОГНОЗ_ВЕРХ (1 или 2) - аналогична ПРОГНОЗ, но считает верхнюю оценку прогноза.

  • ПРОГНОЗ_НИЗ (1 или 2) - аналогична ПРОГНОЗ, но считает нижнюю оценку прогноза.