Агрегатные функции
Агрегатные функции применяются ко всем строкам датасета, а не к одной строке. Результат — одно число.
sum(expr)
Заголовок раздела «sum(expr)»Сумма выражения по всем строкам датасета.
sum(amount)sum(amount * (1 - tax_rate))- Если все значения пусты —
0. - Null и пустые значения игнорируются (не считаются как 0; они просто не входят в сумму).
avg(expr)
Заголовок раздела «avg(expr)»Среднее арифметическое значений выражения. Null’ы игнорируются.
avg(monthly_rent)avg(roi(sale_price, purchase_price))- Если все значения пусты —
null.
count(expr)
Заголовок раздела «count(expr)»Количество строк, в которых выражение возвращает непустое (не null, не пустую строку) значение.
count(payment_date) // количество строк с заполненной датойcount(1) // итого строк (1 всегда непусто)sumpos(expr)
Заголовок раздела «sumpos(expr)»Сумма только положительных значений выражения — «приток». Отрицательные и нулевые значения игнорируются.
sumpos(amount) // все поступления- Если положительных значений нет —
0.
sumneg(expr)
Заголовок раздела «sumneg(expr)»Сумма отрицательных значений по модулю — «отток». Возвращается положительным числом, чтобы виджет мог показать «Расход: 12 345 ₽» без игр со знаком.
sumneg(amount) // все списания, по модулю- Если отрицательных значений нет —
0. sumpos(amount) - sumneg(amount)= обычныйsum(amount)(сальдо).
Когда использовать в формуле-поле
Заголовок раздела «Когда использовать в формуле-поле»⚠️ Уточнить: агрегаты работают только когда есть контекст «весь датасет». В виджетах на дашборде такой контекст есть всегда. В формуле-поле — не везде: ошибка
Aggregate sum() can't be used in a per-row formulaпоявится, если контекст пуст. Если столкнулись — либо считайте на дашборде через KPI, либо проверьте, не используете ли вы формулу в drill-down вне обычного экрана таблицы.
Конкретный пример, где точно работает: KPI на дашборде:
- Источник: «Транзакции».
- Значение:
sum(amount). - Итог — одна цифра.
Граничные случаи
Заголовок раздела «Граничные случаи»- Пустой датасет:
sum/sumpos/sumneg→0,avg→null,count→0. - Все null: то же.
- Текстовые значения, которые не парсятся как число — игнорируются в
sum/avg.
Частые ошибки
Заголовок раздела «Частые ошибки»sum(amount where category == "X"). В формулах нет фильтрации внутри функции. Фильтруйте на уровне виджета.- Используют агрегат для строкового значения.
sum("Зарплата")бессмысленен; используйтеcountдля подсчёта.