Синтаксис формул
Типы данных
| Тип | Формат | Примеры |
|---|---|---|
| Числовой | Целые и дробные числа | 10, 3.14, -5 |
| Строковый | В одинарных кавычках | 'Привет', 'Данные' |
| Дата | 'ГГГГ-ММ-ДД' |
'2023-11-23' |
| Дата-Время | 'ГГГГ-ММ-ДД ЧЧ:ММ:СС' |
'2023-11-23 14:30:00' |
| Логический | TRUE или FALSE |
TRUE, false |
| NULL | NULL |
NULL |
Идентификаторы
- Ссылки на поля:
[Имя поля](напр.[Продажи],[Имя клиента]) - Могут ссылаться на вычисляемые меры из других мер/измерений
Операторы
Арифметические
+, -, *, /
Сравнения
=, !=, <>, >, <, >=, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, NOT BETWEEN
Подстановочные знаки для LIKE:
- % - ноль или более символов
- _ - ровно один символ
Примеры:
[Статус] LIKE 'Актив%'
[ID] IN (1, 2, 3)
[Цена] BETWEEN (10, 100)
Проверка NULL
IS NULL, IS NOT NULL
Логические
AND, OR, NOT
Конкатенация строк
& (напр. 'Привет' & 'Мир' → 'ПриветМир')
Экранирование
\ (напр. 'О\'Рейли')
Функции
Агрегатные
| Функция | Описание | Пример |
|---|---|---|
SUM([поле]) |
Сумма значений | SUM([Доход]) |
AVG([поле]) |
Среднее значение | AVG([Температура]) |
COUNT([поле]) |
Количество не-NULL значений | COUNT([Заказы]) |
MIN([поле]) |
Минимальное значение | MIN([Цена]) |
MAX([поле]) |
Максимальное значение | MAX([Оценка]) |
COUNTDISTINCT([поле]) |
Количество уникальных значений | COUNTDISTINCT([ID_клиента]) |
Строковые
| Функция | Описание | Пример |
|---|---|---|
LEFT([поле], длина) |
Левые символы | LEFT([Имя], 3) |
RIGHT([поле], длина) |
Правые символы | RIGHT([Код], 2) |
LENGTH([поле]) |
Длина строки | LENGTH([Описание]) |
Дата/Время
| Функция | Описание | Пример |
|---|---|---|
YEAR([поле]) |
Год | YEAR([ДатаЗаказа]) |
MONTH([поле]) |
Месяц (1-12) | MONTH([ДатаРождения]) |
DAY([поле]) |
День (1-31) | DAY([Срок]) |
HOUR([поле]) |
Час (0-23) | HOUR([МеткаВремени]) |
MINUTE([поле]) |
Минуты (0-59) | MINUTE([ВремяЖурнала]) |
SECOND([поле]) |
Секунды (0-59) | SECOND([ВремяСобытия]) |
DATE(год, месяц, день) |
Создать дату | DATE(2023, 12, 25) |
DATETIME(...) |
Создать дату-время | DATETIME(2023, 12, 25, 14, 30, 0) |
DATE_TRUNC(unit, [field]) |
Округлить дату и время до указанной точности | DATE_TRUNC('month', '2023-11-23 14:30:45') |
TODAY() |
Получить текущую дату в формате 'ГГГГ-ММ-ДД' | TODAY() |
Период-функции
Период-функции применяются для показателей типа остатков. Они работают с периодом, который задаётся текущим контекстом фильтрации по измерению с датой.
| Функция | Описание | Пример |
|---|---|---|
PERIODDAYS([измерение]) |
Количество календарных дней в текущем периоде по указанному измерению с датой | PERIODDAYS([Дата]) |
ACTIVEDAYS([поле], [измерение]) |
Количество дней текущего периода, в которых поле имеет непустое значение | ACTIVEDAYS([Остаток], [Дата]) |
OPENINGVALUE([измерение]) |
Фильтр, выбирающий значение на начало периода — последнюю дату строго до начала периода | SUM({OPENINGVALUE([Дата])} [Остаток]) |
CLOSINGVALUE([измерение]) |
Фильтр, выбирающий значение на конец периода — последнюю дату внутри периода | SUM({CLOSINGVALUE([Дата])} [Остаток]) |
Правила использования период-функций:
- Аргументы задаются только ссылками в квадратных скобках — литералы и выражения не принимаются
- Аргумент
[измерение]должен быть измерением типа Дата или Дата-Время OPENINGVALUEиCLOSINGVALUEиспользуются только внутри фильтра в фигурных скобках, перед агрегируемым полем- Если в текущем контексте границы периода не определены, редактор показывает предупреждение
- Формула может содержать не более 20 период-функций
- В конструкторе формул
PERIODDAYSиACTIVEDAYSнаходятся в разделе Дата и время панели элементов, аOPENINGVALUEиCLOSINGVALUE— в разделе Диапазон
Условные
| Функция | Описание | Пример |
|---|---|---|
IF(условие, да, нет) |
Условная логика | IF([Кол-во] > 10, 'Опт', 'Розница') |
Работа с NULL
| Функция | Описание | Пример |
|---|---|---|
ISNULL([поле]) |
Проверка на NULL | ISNULL([Отчество]) |
NULLIF([поле], значение) |
Возвращает NULL если равно | NULLIF([Статус], 'Ожидание') |
Анализ наборов (Фильтрация)
В фигурных скобках {}:
Базовый синтаксис:
{[Регион] = 'Север'}
{[Статус] IN ('Активен', 'Ожидание')}
{[Возраст] BETWEEN (18, 65)}
Поиск с подстановочными знаками:
{[Продукт] LIKE 'Про%'}
Комбинация с полями/агрегацией:
({[Регион] = 'Север'} [Продажи])
SUM({[Год] = 2023} [Доход])
Границы периода:
SUM({OPENINGVALUE([Дата])} [Остаток])
SUM({CLOSINGVALUE([Дата])} [Остаток])
Сложные условия:
{[Отдел] = 'Продажи' AND ([Статус] = 'Активен' OR [ДатаНайма] > '2020-01-01')}
Выражения
- Используйте круглые скобки
()для группировки - Функции можно вкладывать
- Примеры:
sql SUM([Продажи]) / COUNTDISTINCT([ID_клиента]) IF([Оценка] > 90, 'A', IF([Оценка] > 80, 'B', 'C')) LEFT([Имя], 1) & '. ' & [Фамилия]
Примечания
- Имена полей чувствительны к регистру
- Строковые сравнения чувствительны к регистру по умолчанию
- Литералы даты/времени должны использовать точный указанный формат
- NULL значения должны сравниваться через
IS NULL/IS NOT NULL - Экранируйте специальные символы в строках через обратный слеш (
\)