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

Синтаксис формул

Формула состоит из одного выражения, которое возвращает значение. Ниже всё, что понимает редактор формул.

  • Поле текущей строки: название в квадратных скобках: [Сумма], [Дата покупки].
  • Поле таблицы в формуле виджета: таблица и поле через точку: [Расходы.Сумма].
  • Скобки обязательны. Если написать русское слово без них, редактор подскажет: «Сумма — колонку пишите в квадратных скобках: [Сумма]».
  • Внутри формулы поля хранятся по ключу, поэтому переименование поля формулу не ломает.

Старые формулы могли быть записаны ключами латиницей: monthly_rent * 12. Они продолжают работать.

  • Числа: 42, 3.14, -7. Дробную часть отделяйте точкой, не запятой.
  • Текст: "Зарплата" или 'Зарплата'.
  • Да/нет: true и false (или ИСТИНА и ЛОЖЬ). Внутри это 1 и 0.
  • Пусто: null.
Группа Операторы Замечания
Арифметика +, -, *, /, % + для текста склеивает строки. Деление на 0 даёт пустое значение.
Сравнение ==, !=, <, >, <=, >= Для равенства нужны два знака ==. Одиночный = не работает.
Логика && (и), || (или), ! (не) Можно и функциями: not(...), вложенные if(...).

Порядок вычисления (от последнего к первому)

Заголовок раздела «Порядок вычисления (от последнего к первому)»
  1. ||
  2. &&
  3. ==, !=
  4. <, >, <=, >=
  5. +, -
  6. *, /, %
  7. Унарные -, +, !
  8. Скобки и вызовы функций

Примеры: a + b * c считается как a + (b * c). !a == b считается как (!a) == b. Если нужно «не равно», пишите !(a == b) или a != b.

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

round([Сумма] * 1.2, 2)
  • Аргументы разделяются запятой или точкой с запятой: round([Сумма]; 2) тоже работает.
  • Регистр имени не важен: ROUND, Round и round означают одно и то же.
  • Можно писать русские имена, как в Excel. Полный список в разделе «Функции».
ЕСЛИ([Сумма] > 100000; "Крупная"; "Обычная")
  • Неизвестную функцию редактор не примет: «Нет такого действия: …()».

Тернарного оператора ? : нет. Условие пишется функцией if (или ЕСЛИ):

if([Сдан в аренду], [Аренда в месяц], 0)

Подробнее в скалярных функциях.

  • Пустое поле в арифметике даёт пустой результат: 5 + пусто = пусто.
  • Деление на 0 даёт пустой результат, а не ошибку.
  • null == null даёт истину, null == 0 даёт ложь.
  • Чтобы подставить значение по умолчанию, используйте coalesce: coalesce([Сумма], 0).
  • Агрегаты (sum, avg, count, sumpos, sumneg) считают по многим строкам. Чаще всего они нужны в расчёте значения виджета.
  • Межстрочные (running_sum, lag, lead, window_avg, rank) считают относительно соседних строк.

В поле-формуле таблицы обе группы видят только загруженную порцию строк в порядке «новые сверху», а не всю таблицу и не вашу сортировку. Для итогов и динамики надёжнее виджеты. Подробнее в «Агрегатные» и «Межстрочные».

Сообщение Что значит
«Недопустимый символ «=»» Для сравнения нужен ==. Похожее сообщение будет на любой незнакомый символ.
«Незакрытая строка — нет закрывающей кавычки» Забыли закрыть ".
«Незакрытая ссылка на поле — нет «]»» Забыли ].
«… — колонку пишите в квадратных скобках» Название поля написано без [ ].
«Нет такого действия: …()» Опечатка в имени функции или такой функции нет.
«Поле вне агрегата — оберните в агрегат» В формуле виджета поле стоит без SUM, AVG и т. п.

Больше случаев в разделе «Решение проблем».