Перейти к содержанию

Синтаксис формул

Типы данных

Тип Формат Примеры
Числовой Целые и дробные числа 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
  • Экранируйте специальные символы в строках через обратный слеш (\)