Синтаксис формул
Формула состоит из одного выражения, которое возвращает значение. Ниже всё, что понимает редактор формул.
Ссылки на поля
Заголовок раздела «Ссылки на поля»- Поле текущей строки: название в квадратных скобках:
[Сумма],[Дата покупки]. - Поле таблицы в формуле виджета: таблица и поле через точку:
[Расходы.Сумма]. - Скобки обязательны. Если написать русское слово без них, редактор подскажет: «Сумма — колонку пишите в квадратных скобках: [Сумма]».
- Внутри формулы поля хранятся по ключу, поэтому переименование поля формулу не ломает.
Старые формулы могли быть записаны ключами латиницей:
monthly_rent * 12. Они продолжают работать.
Числа, текст, да/нет
Заголовок раздела «Числа, текст, да/нет»- Числа:
42,3.14,-7. Дробную часть отделяйте точкой, не запятой. - Текст:
"Зарплата"или'Зарплата'. - Да/нет:
trueиfalse(илиИСТИНАиЛОЖЬ). Внутри это 1 и 0. - Пусто:
null.
Операторы
Заголовок раздела «Операторы»| Группа | Операторы | Замечания |
|---|---|---|
| Арифметика | +, -, *, /, % |
+ для текста склеивает строки. Деление на 0 даёт пустое значение. |
| Сравнение | ==, !=, <, >, <=, >= |
Для равенства нужны два знака ==. Одиночный = не работает. |
| Логика | && (и), || (или), ! (не) |
Можно и функциями: not(...), вложенные if(...). |
Порядок вычисления (от последнего к первому)
Заголовок раздела «Порядок вычисления (от последнего к первому)»||&&==,!=<,>,<=,>=+,-*,/,%- Унарные
-,+,! - Скобки и вызовы функций
Примеры: 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»Тернарного оператора ? : нет. Условие пишется функцией 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 и т. п. |
Больше случаев в разделе «Решение проблем».