Перейти к содержимому

Скалярные функции

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

В примерах поля записаны по названию в квадратных скобках, как в редакторе: [Сумма]. Русские имена функций (ОКРУГЛ, ЕСЛИ…) перечислены в указателе функций.

Модуль числа.

abs(-5) // → 5
abs([Сумма] - [Плановая сумма])

Округление к ближайшему. Второй аргумент задаёт число знаков после запятой, по умолчанию 0.

round(3.7) // → 4
round(3.14159, 2) // → 3.14
round([Сумма] / 12, 2) // в месяц, две цифры после запятой

Округление вниз / вверх.

floor(7.9) // → 7
ceil(7.1) // → 8

Минимум/максимум из аргументов. Null-аргументы игнорируются.

min([Аренда в месяц], 50000)
max(0, [Прибыль]) // отрицательное → 0

Первый ненулевой аргумент. Удобно для значений по умолчанию.

coalesce([Заметки], "—") // если заметки пусты, покажем «—»
coalesce([Факт], [План], 0)

Условие. Тернарного оператора ? : в формулах нет, вместо него if.

if([Сумма] > 100000, "Большая", "Малая")
if([Сдан в аренду], [Аренда в месяц], 0)
ЕСЛИ([Категория] == "Зарплата"; [Сумма]; 0)

Вложенные условия:

if([Балл] >= 80, "Высокий",
if([Балл] >= 50, "Средний", "Низкий"))

Логическое отрицание. Эквивалент !x.

not([Сдан в аренду]) // истина, если объект свободен
![Сдан в аренду] // то же самое

Регистр текста.

lower([Категория]) // "ЗАРПЛАТА" → "зарплата"
upper([Тикер])

Поиск подстроки без учёта регистра. Возвращает true/false.

contains([Заметки], "ипотека")
contains([Адрес], "москва") // регистр не важен

lookup(значение, [Справочник.Ключ], [Справочник.Значение]): как ВПР в Excel. Ищет значение в колонке-ключе таблицы-справочника и возвращает соседнее значение из той же строки. Русское имя ВПР.

SUM([Сделки.Количество] * LOOKUP([Сделки.Тикер], [Рыночные цены.Тикер], [Рыночные цены.Цена]))

Формула выше считает стоимость портфеля по текущим ценам: для каждой сделки находит цену бумаги в «Биржевых ценах» и умножает на количество.

  • Работает в расчёте значения виджета. Без ручной формулы то же делает шаг «Значение из справочника» в конструкторе показателя.
  • Ключ и значение должны быть из одной таблицы.
  • Если ключ не найден, результат пустой.
  • Чтобы показать значение связанной строки прямо в таблице, используйте не lookup, а «Поле из связанной таблицы».
  • Пишут тернарный ? :. Такого оператора нет. Используйте if(...).
  • Сравнивают с одним знаком =. Нужно ==.
  • Ждут, что == не учтёт регистр. == учитывает регистр: "Зарплата" == "зарплата" даёт ложь. Сравнивайте lower([Категория]) == "зарплата". Числа сравниваются как числа: "5" == 5 даёт истину.