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

В примере выше был использован шаблон для округления значений столбца numofemployees, название столбца-результата выполнения шаблона было изменено на "Округление числа работников". Увидеть список всех доступных шаблонов можно перейдя по
Меню > Настройки > Шаблоны > Тип шаблона: формула

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

После этого система отобразит список доступных шаблонов формул:

После выбора шаблона, система предложит выбор столбцов, пользователь также может самостоятельно описать шаблон и используемые столбцы для агрегирования.
Затем, необходимо нажать на "Сохранить", и шаблон будет применён.
Созданный шаблон появится в разделе редактирования визуализации, где его можно редактировать или удалить:

Создание шаблонов формул
В данном разделе рассмотрен пример создания шаблона формулы.
Для создания шаблона сначала необходимо задать его тип, имена, описание согласно разделу, посвящённому созданию шаблонов.
В качестве типа необходимо выбрать FORMULA.
Особенности программного кода шаблонов формул
Рассмотрим пример создания шаблона SUM:
this.formula = {
sysName: 'SUM',
description: 'Сумма чисел или содержимого ячеек',
handler: (...args) => {
let sum = 0;
for (let i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
}Шаблоны формул являются объектами JS, инициализируются при помощи
this.formula = {}Шаблоны формул включают в себя свойства sysName - системное имя, description - описание.
Далее, для передачи значений в качестве аргументов шаблона, инициализация происходит через
handler: (...args) => {}Для отображения аргументов из системного представления в примитивы js используется функция
this.utils.argsToArray()Пример использования:
var argss = this.utils.argsToArray(args);После применения упомянутой выше функции, набор аргументов будет представлен (в данном примере) массивом argss.
Затем, аргументы обрабатываются в функции, хранящейся в handler. Например, для шаблона SUM, возвращающего сумму значений столбцов, обработка заключается в циклическом суммировании всех аргументов (args):
handler: (...args) => {
let sum = 0;
for (let i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}Получившийся код шаблона:
this.formula = {
sysName: 'SUMIF',
description: 'Сумма содержимого ячеек, соответствующих определенному условию',
handler: (...args) => {
var argss = this.utils.argsToArray(args);
var criteria = argss.pop();
var range = this.utils.parseNumberArray(this.utils.flatten(argss));
if (range instanceof Error) {
return range;
}
var result = 0;
for (var i = 0; i < range.length; i++) {
result += eval(range[i] + criteria) ? range[i] : 0; // jshint ignore:line
}
return result;
}
}Созданный шаблон будет суммировать значения столбцов, указанных при применении шаблона:
