Агрегатные функции
Агрегатные функции сводят много строк к одному числу. Чаще всего они нужны в расчёте значения виджета. Там каждое поле обязано стоять внутри агрегата: SUM([Расходы.Сумма]).
Обычно агрегат выбирают не формулой, а в строке «Как» конструктора показателя: «Сложить», «Среднее», «Наибольшее», «Наименьшее», «Последнее по дате», «Посчитать записи». См. «Как виджет считает значение».
sum(expr) — СУММ
Заголовок раздела «sum(expr) — СУММ»Сумма по всем строкам. Пустые значения пропускаются.
SUM([Расходы.Сумма])СУММ([Сделки.Количество] * [Сделки.Цена])Если значений нет, вернёт 0.
avg(expr) — СРЗНАЧ
Заголовок раздела «avg(expr) — СРЗНАЧ»Среднее арифметическое. Пустые значения пропускаются. Если значений нет, результат пустой.
AVG([Объекты.Аренда в месяц])count(expr) — СЧЁТ
Заголовок раздела «count(expr) — СЧЁТ»Число строк, где выражение не пустое.
COUNT([Платежи.Дата платежа]) // сколько платежей с датойsumpos(expr)
Заголовок раздела «sumpos(expr)»Сумма только положительных значений, то есть «приход». Если таких нет, вернёт 0.
SUMPOS([Операции.Сумма])sumneg(expr)
Заголовок раздела «sumneg(expr)»Сумма отрицательных значений по модулю, то есть «расход». Возвращает положительное число, чтобы виджет мог показать «Расход: 12 345 ₽». Если таких нет, вернёт 0.
SUMNEG([Операции.Сумма])sumpos(x) - sumneg(x) равно обычному sum(x).
min и max с одной колонкой
Заголовок раздела «min и max с одной колонкой»В формуле виджета MIN([Таблица.Поле]) и MAX([Таблица.Поле]) с одним аргументом работают как агрегаты: наименьшее и наибольшее значение колонки. С несколькими аргументами (min(a, b, c)) это обычные скалярные функции.
Агрегат в поле-формуле таблицы
Заголовок раздела «Агрегат в поле-формуле таблицы»В поле-формуле агрегат считается по загруженной порции строк, а не по всей таблице. В большой таблице результат будет неполным. Итоги по всей таблице считайте в виджете.
Граничные случаи
Заголовок раздела «Граничные случаи»- Пустая таблица:
sum,sumpos,sumneg,countвернут0,avgвернёт пусто. - Агрегат внутри агрегата не работает: «Агрегат внутри агрегата не поддерживается».
- В одном агрегате можно брать поля только одной таблицы. Чтобы сложить данные двух таблиц, используйте два агрегата:
SUM([Аренда.Платёж]) - SUM([Расходы.Сумма]).
Частые ошибки
Заголовок раздела «Частые ошибки»- Фильтр внутри функции.
sum(amount where …)не бывает. Отбор строк делается условием «Какие записи» в настройке виджета или функциейifвнутри агрегата:SUM(IF([Операции.Категория] == "Аренда", [Операции.Сумма], 0)). sumпо тексту. Смысла нет. Для подсчёта строк беритеcount.