Шаблоны формул

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

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

Использование шаблонов формул

Пример использования шаблона выглядит следующим образом:

В примере выше был использован шаблон для округления значений столбца 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;
    }
}

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