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

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

Скалярные функции работают строго в пределах одной строки. Не требуют контекста датасета.

abs(x)

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

abs(-5) // → 5
abs(amount - reference_amount)

round(x, digits=0)

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

round(3.7) // → 4
round(3.14159, 2) // → 3.14
round(amount / 12, 2) // месячная средняя, две цифры

floor(x), ceil(x)

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

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

min(a, b, …), max(a, b, …)

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

min(monthly_rent, 50000)
max(0, profit) // отрицательное → 0

coalesce(a, b, …)

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

coalesce(notes, "—") // если notes пусто, покажем «—»
coalesce(actual_amount, planned_amount, 0)

if(cond, then, else)

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

if(amount > 100000, "Большая", "Малая")
if(is_rented, monthly_rent, 0)
if(category == "Зарплата", amount, 0)

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

if(score >= 80, "Высокий",
if(score >= 50, "Средний", "Низкий"))

not(x)

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

not(is_rented) // строки только со «Свободно»
!is_archived // то же

lower(s), upper(s)

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

lower(category) // "ЗАРПЛАТА" → "зарплата"
upper(ticker)

contains(haystack, needle)

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

contains(notes, "ипотека")
contains(lower(address), "москва")

Частые ошибки

  • Используют тернарный ? :. Нет такого оператора. Пишите if(...).
  • Ожидают, что min(...) сравнит даты. Сравнение дат через арифметику в текущей версии не гарантировано — лучше пользуйтесь date_diff и сравнениями.
  • Сравнивают строки регистрозависимо. == чувствительно к регистру. Используйте lower(a) == lower(b).

Что дальше