Решение проблем с формулами
Если формула возвращает не то, что вы ожидали, — посмотрите ниже. Случаи отсортированы по частоте.
Формула показывает «—» (пусто)
Самая частая причина — null в выражении.
- Любое поле, которое не заполнено в строке →
null. - Любая арифметика с
null→null. - Деление на
0→null.
Что делать. Защититесь через coalesce и if:
coalesce(amount, 0) * 12 // null → 0if(price > 0, profit / price, 0) // защита от деления на 0«Unknown function foo()»
Имя функции написано неправильно или такой функции нет.
- Проверьте, что функция есть в списке.
- Регистр имени неважен, но опечатки — да.
- Своих функций добавить нельзя.
«Aggregate sum() can’t be used in a per-row formula»
Использовали sum / avg / count в формуле-поле там, где система не подаёт контекст датасета.
- Не работает в режиме «считать построчно» (например, в drill-down preview).
- Решение. Перенесите вычисление в виджет на дашборде. KPI с
sum(amount)всегда работает.
«Unexpected character “X”»
Парсер споткнулся на символе. Чаще всего:
- Использовали кириллицу в имени поля. Ключ должен быть на латинице.
- Поставили точку в имени связи:
object.price. Точечной нотации нет, см. «Связи в формулах». - Использовали
?для тернарного оператора. Замените наif(cond, then, else).
«Unterminated string»
Забыли закрывающую кавычку:
if(category == "Зарплата, amount, 0) // ← нет закрывающей "Исправление:
if(category == "Зарплата", amount, 0)Циклическая зависимость
Формула A ссылается на формулу B, которая ссылается на A (прямо или через цепочку). Обе ячейки будут пустыми.
- Найдите цикл вручную: посмотрите, какие поля используются в каждой формуле.
- Разорвите цикл: одну из формул переведите в обычное вычисляемое поле виджета (не датасета).
Странные результаты у lag / running_sum / rank
Кросс-строчные функции зависят от порядка строк в таблице. Если строки не отсортированы:
lag(price)возьмёт «предыдущую по id», а не «предыдущую по дате».running_sum(amount)будет накапливать в случайном порядке.
Решение. Отсортируйте таблицу по дате до использования. Сортировка применяется на уровне виджета или табличного вида.
roi(x, 0) → null
Деление на нулевую стоимость не имеет смысла. Защитите формулу:
if(purchase_price > 0, roi(profit, purchase_price), null)cagr(0, ..., ...) → null
cagr требует start > 0. Если стартовая стоимость 0 — доходность не определена. Защитите аналогично.
irr вернул null
Возможные причины:
- Меньше двух cashflows. Дайте минимум
cf0иcf1. - Нет смены знака.
irr(100, 200, 300)— нет действительного решения. Хотя бы один отрицательный поток должен быть. - Не сошлось за 100 итераций. Экзотика — возникает, если поток сильно асимметричный.
Чего пока нет в Invest
Несколько частых запросов, которые не получится реализовать на текущем парсере без обходных путей:
- Точечная нотация для связей (
relation.field). - Тернарный оператор
? :. - Регулярные выражения (есть только
contains). - Своих функций — расширить набор нельзя.
- Чтение строк из другого датасета внутри формулы — только через дашборд-агрегацию.
- Циклы / накопление переменной во времени — частично решается
running_sum, но не любой кейс.
Если такой возможности не хватает — отметьте в тикете поддержки: продукт развивается, частые запросы попадают в roadmap.