# Функции формул Baserow - справочник синтаксиса и примеров

> Полный разбор функций формул Baserow: работа с текстом и датами, связанные таблицы, агрегация массивов и готовые примеры расчётов без кода.

Source: https://opennix.org/docs/baserow/formula/understanding-formulas/


Baserow предлагает встроенный редактор формул с автодополнением и десятками функций для расчётов, работы с текстом, датами и связанными таблицами. Статья собирает синтаксис для сложных типов полей, набор готовых шаблонов формул на все случаи и ответы на частые вопросы о массивах, длительностях и пустых значениях.

## Обзор

Формулы Baserow работают с большинством типов полей, включая поля [длительности](/docs/baserow/field-types/duration-field/) и [множественного выбора](/docs/baserow/field-types/multiple-select-field/). Внутри одного выражения можно выполнять математические операции, обрабатывать текст, считать даты и строить логические сравнения.

Если нужно, чтобы записи получали имя автоматически (например, `Invoice-001` или `Sprint-Dec`), превратите [первичное поле](/docs/baserow/fields/primary-field/) в поле формулы - тогда имя строки будет пересчитываться по заданному правилу при каждом изменении исходных данных.

### Поиск функций

Редактор формул в Baserow показывает автодополнение и подсказки по функциям прямо во время ввода. Рядом с каждой подсказкой видны синтаксис и пример использования.

Чтобы найти нужную функцию:

1. Создайте или откройте на редактирование поле формулы;
2. Начните печатать в редакторе формул;
3. Просмотрите список предложенных функций с описаниями;
4. Кликните по функции, чтобы увидеть её синтаксис и пример.

## Работа со сложными типами полей

Формулы по-разному обращаются к простым и составным типам полей. Ниже - три случая, которые чаще всего вызывают вопросы.

### Множественный выбор

Формулы умеют работать с полями [множественного выбора](/docs/baserow/field-types/multiple-select-field/): проверять, какие варианты отмечены в строке, и выполнять операции над этим набором значений.

![Поддержка множественного выбора в поле формулы](/images/baserow/formula/understanding-formulas-multiple-select-support.png)

### Связь с таблицей

Для полей [связи с таблицей](/docs/baserow/field-types/link-to-table-field/) используйте функцию `lookup()`, чтобы получить значения полей из связанных строк, а затем примените агрегирующую функцию вроде `sum()`, `count()` или `join()`.

### Подстановка и свод

Поля [подстановки](/docs/baserow/field-types/lookup-field/) и [свода](/docs/baserow/field-types/rollup-field/) возвращают массивы значений, а не одно число или строку. Прежде чем использовать их в условиях или сравнениях, преобразуйте массив в одно значение через агрегирующую функцию.

## Типовые формулы

Ниже - шаблоны формул, которые закрывают большинство повседневных задач. Замените названия полей в примерах на поля своей таблицы.

### Вычисления

Рассчитать итоговую сумму:

```
[Quantity] * [Unit Price]
```

Применить процентную скидку:

```
[Price] * (1 - [Discount Percent] / 100)
```

Округлить до двух знаков после запятой:

```
round([Amount], 2)
```

Найти большее из двух значений:

```
greatest([Value A], [Value B])
```

### Работа с текстом

Объединить имя и фамилию:

```
concat([First Name], ' ', [Last Name])
```

Привести текст к верхнему регистру:

```
upper([Product Code])
```

Извлечь первые 10 символов:

```
left([Description], 10)
```

Проверить, содержит ли текст слово:

```
contains([Notes], 'urgent')
```

### Дата и время

Посчитать разницу в днях между датами:

```
date_diff('day', [Start Date], [End Date])
```

Отформатировать дату в текст:

```
datetime_format([Created], 'YYYY-MM-DD')
```

Проверить, что дата уже прошла:

```
[Due Date] < today()
```

Получить год из даты:

```
year([Date Field])
```

### Условная логика

Показать разный текст в зависимости от статуса:

```
if([Status] = 'Complete', 'Done', 'Pending')
```

Подставить значение по умолчанию, если поле пустое:

```
when_empty([Notes], 'No notes added')
```

Объединить несколько условий:

```
if(and([Quantity] > 0, [Price] > 100), 'In Stock - Premium', 'Standard')
```

### Работа со связанными таблицами

Просуммировать значения из связанных строк:

```
sum(lookup('Orders', 'Total'))
```

Посчитать количество связанных элементов:

```
count([Related Items])
```

Объединить текст из нескольких строк:

```
join(lookup('Projects', 'Name'), ', ')
```

Отфильтровать и просуммировать:

```
sum(filter(lookup('Items', 'Price'), lookup('Items', 'Status') = 'Active'))
```

### Интерактивные кнопки

Создать кликабельную кнопку:

```
button('https://example.com/' + [ID], 'View Details')
```

Сделать ссылку на email:

```
link('mailto:' + [Email])
```

![Кнопки на основе формул в Baserow](/images/baserow/formula/understanding-formulas-formula-buttons.png)

## Часто задаваемые вопросы

**Почему формула не работает с полем подстановки или связи с таблицей?** Поля подстановки и связи с таблицей содержат массивы (несколько значений), а не одно значение. Большинство функций ожидают на входе одно значение. Используйте агрегирующие функции вроде `sum()`, `join()`, `count()` или `avg()`, чтобы превратить массив в одно значение. Пример проблемы: `isblank([Organization])` не сработает, если Organization - поле связи. Решение: `isblank(join([Organization], ''))` сначала превращает массив в текст.

**Можно ли использовать формулы с полями длительности?** Да. Поля [длительности](/docs/baserow/field-types/duration-field/) поддерживают математические операции напрямую - их можно складывать, вычитать, умножать и делить так же, как обычные числа.

**Как проверить, что дата приходится на конкретный день недели?** Используйте `datetime_format()` с кодом формата `D`, где воскресенье = 1, понедельник = 2 и так далее: `datetime_format([Date Field], 'D') = '1'` вернёт истину для воскресенья. Дополнительные коды форматирования дат смотрите в [документации PostgreSQL по форматированию](https://www.postgresql.org/docs/current/functions-formatting.html).

**Обновляются ли функции today() и now() автоматически?** Да, обе функции обновляются примерно раз в 10 минут. Используйте `today()`, если нужна только дата, и `now()`, когда важны и дата, и время. Обратите внимание: интервал в 10 минут - ориентировочный, а не гарантированный; если рабочее пространство долго не открывали, обновление может произойти раз в 60 минут.

**Как обработать пустые или null-значения в формулах?** Используйте `when_empty()`, чтобы задать резервное значение, или `isblank()`, чтобы проверить, что поле пустое: `when_empty([Optional Field], 'Default Value')` или `if(isblank([Name]), 'No name provided', [Name])`.

**Можно ли использовать регулярные выражения в формулах?** Да, функция `regex_replace()` находит и заменяет текст по шаблону: `regex_replace([Phone], '[^0-9]', '')` удаляет все нецифровые символы из номера телефона.

## Что дальше

Если вы ещё не читали общее введение в формулы, начните с [«Обзора поля формулы»](/docs/baserow/formula/formula-field-overview/). Чтобы глубже разобраться со связанными типами полей, которые часто применяются вместе с формулами, изучите [«Связь с таблицей»](/docs/baserow/field-types/link-to-table-field/), [«Подстановку»](/docs/baserow/field-types/lookup-field/), [«Свод»](/docs/baserow/field-types/rollup-field/) и [«Часовые пояса»](/docs/baserow/fields/working-with-timezones/) для дат в разных часовых поясах. Затем переходите к разделу [«Представления»](/docs/baserow/views/), чтобы увидеть, как вычисляемые формулой значения используются в фильтрах и сортировке.

