Оформление
Строковые функции
Работа с текстом: обрезка, склейка, поиск подстроки, смена регистра. Пригодятся, когда значение из источника нужно привести к читаемому виду или собрать из нескольких полей подпись для виджета.
Примеры считаются на демо-датасете «Продажи»: заказы, товары и покупатели. Разрез — категория товара, если не сказано иное.
Не все функции доезжают до источника
В режиме прямого запроса формула переводится в SQL вашей базы, и часть функций в её диалекте отсутствует. У таких ниже стоит строка «В прямом запросе…» с перечнем баз, на которых расчёт не соберётся. Oracle, Firebird и Trino в этот перечень не входят: на них в прямом запросе не строится большинство виджетов — поддержка функций источниками.
Функции, которые считает платформа
Семь функций — CHAR, SPACE, SPLIT, REGEXP_MATCH, REGEXP_EXTRACT, REGEXP_EXTRACT_NTH, REGEXP_REPLACE — исполняет не источник, а сама платформа поверх готового результата выборки. Поэтому у них общее ограничение:
- их нельзя положить внутрь агрегата:
MAX(REGEXP_EXTRACT(…))отвечает отказом; - их нельзя использовать в фильтре, группировке и сортировке.
Иначе платформе пришлось бы забрать из источника все строки без ограничения. Применяйте такие функции к уже агрегированному значению — снаружи агрегата формула работает на любой базе.
CHAR
CHAR( code )Символ по коду Unicode.
Пример.
CHAR(MAX([orders.quantity]) + 1000)Код 1005 даёт символ ϭ. Практическое применение — собрать перевод строки (CHAR(10)) или неразрывный пробел в подписи.
Считается на стороне платформы: только снаружи агрегата — MAX(CHAR(…)) ответит отказом, CHAR(MAX(…)) сработает. Почему — функции, которые считает платформа.
CONCAT
CONCAT( a, b, … )Объединяет аргументы в одну строку.
Пример.
CONCAT([products.category], " — ", [customers.city])Результат — «Компьютеры — Новосибирск».
В прямом запросе не работает на: Vertica, MS SQL Server.
CONTAINS
CONTAINS( string, substr )Истина, если строка содержит подстроку.
Пример.
MAX(CONTAINS([products.product_name], 'Сумка'))У категории «Аксессуары» результат 1 — товар с таким словом в названии есть. Проверка чувствительна к регистру: «сумка» ничего не найдёт, для поиска без регистра берите ICONTAINS.
В прямом запросе не работает на: MS SQL Server.
ENDSWITH
ENDSWITH( string, suffix )Истина, если строка заканчивается суффиксом.
Пример.
MAX(ENDSWITH([products.category], 'ы'))1 у «Аксессуаров» и «Компьютеров», 0 у «Мобильных устройств» и «Периферии».
В прямом запросе не работает на: MS SQL Server.
FIND
FIND( string, substr [, start ] )Позиция подстроки в строке.
Пример.
MAX(FIND([products.product_name], 'а'))Позиция первой буквы «а»: у «Аксессуаров» — 7. Отсчёт с единицы; если подстроки нет, возвращается 0.
В прямом запросе не работает на: MS SQL Server.
ICONTAINS
ICONTAINS( string, substr )CONTAINS без учёта регистра.
Пример.
MAX(ICONTAINS([products.product_name], 'сумка'))1 у «Аксессуаров» — в отличие от CONTAINS, строчная «сумка» находит товар «Сумка для ноутбука».
В прямом запросе не работает на: MS SQL Server.
IENDSWITH
IENDSWITH( string, suffix )ENDSWITH без учёта регистра.
Пример.
MAX(IENDSWITH([products.category], 'Ы'))1 у «Аксессуаров» и «Компьютеров»: заглавная «Ы» в шаблоне совпадает со строчной в данных.
В прямом запросе не работает на: MS SQL Server.
ISTARTSWITH
ISTARTSWITH( string, prefix )STARTSWITH без учёта регистра.
Пример.
MAX(ISTARTSWITH([products.product_name], 'сумка'))1 у «Аксессуаров» — регистр первой буквы не важен.
В прямом запросе не работает на: MS SQL Server.
LEFT
LEFT( string, n )Первые n символов строки.
Пример.
MAX(LEFT([products.product_name], 5))Первые пять символов названия — «Сумка». Пригодится, когда в названии зашит код и нужна только его голова.
LEN
LEN( string )Длина строки в символах.
Пример.
MAX(LEN([products.product_name]))Самое длинное название в категории: 18 символов у «Аксессуаров», 21 у «Компьютеров». Считаются символы, а не байты, — кириллица не удваивается.
В прямом запросе не работает на: MS SQL Server.
LOWER
LOWER( string )Переводит в нижний регистр.
Пример.
LOWER([products.category])«Аксессуары» превращается в «аксессуары». Нужно, когда одни и те же значения приходят из источника в разном регистре и иначе попадают в разные группы.
LTRIM
LTRIM( string )Убирает пробелы слева.
Пример.
MAX(LTRIM([products.category]))На чистых демо-данных результат совпадает с исходным значением. Функция нужна для выгрузок, где значения выровнены пробелами.
REGEXP_EXTRACT
REGEXP_EXTRACT( string, pattern )Первое совпадение с регулярным выражением; без совпадения — NULL.
Пример.
REGEXP_EXTRACT(MAX([products.product_name]), '[А-Яа-я]+')Первое слово названия: «Сумка» у «Аксессуаров», «Рабочая» у «Компьютеров».
Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_EXTRACT(…)) ответит отказом, REGEXP_EXTRACT(MAX(…)) сработает. Почему — функции, которые считает платформа.
REGEXP_EXTRACT_NTH
REGEXP_EXTRACT_NTH( string, pattern, n )n-е совпадение с регулярным выражением, нумерация с единицы.
Пример.
REGEXP_EXTRACT_NTH(MAX([products.product_name]), '[А-Яа-я]+', 2)Второе слово названия: «для» у «Аксессуаров» (Сумка для ноутбука), «станция» у «Компьютеров» (Рабочая станция).
Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_EXTRACT_NTH(…)) ответит отказом, REGEXP_EXTRACT_NTH(MAX(…)) сработает. Почему — функции, которые считает платформа.
REGEXP_MATCH
REGEXP_MATCH( string, pattern )Истина, если в строке найдено совпадение с регулярным выражением.
Пример.
REGEXP_MATCH(MAX([products.product_name]), '^Сумка.*')True у «Аксессуаров», False у остальных. Обратите внимание: эта функция отвечает словами True/False, тогда как CONTAINS и STARTSWITH — числами 1/0.
Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_MATCH(…)) ответит отказом, REGEXP_MATCH(MAX(…)) сработает. Почему — функции, которые считает платформа.
REGEXP_REPLACE
REGEXP_REPLACE( string, pattern, repl )Заменяет все вхождения; ссылка на группу — \1.
Пример.
REGEXP_REPLACE(MAX([products.category]), '[аеиоуыэюя]', '.')Гласные заменяются точками: «Аксессуары» → Акс.сс..р..
Считается на стороне платформы: только снаружи агрегата — MAX(REGEXP_REPLACE(…)) ответит отказом, REGEXP_REPLACE(MAX(…)) сработает. Почему — функции, которые считает платформа.
REPLACE
REPLACE( string, from, to )Замена всех вхождений подстроки.
Пример.
MAX(REPLACE([products.category], 'ы', 'Ы'))«Аксессуары» → «АксессуарЫ». Заменяются все вхождения, а не первое.
RIGHT
RIGHT( string, n )Последние n символов строки.
Пример.
MAX(RIGHT([products.product_name], 4))Последние четыре символа названия: «дные» у «Аксессуаров». Зеркальная пара к LEFT.
В прямом запросе не работает на: MS SQL Server.
RTRIM
RTRIM( string )Убирает пробелы справа.
Пример.
MAX(RTRIM([products.category]))На демо-данных значение не меняется — пробелов по краям в них нет. Функция нужна для выгрузок из систем, где текст дополнен до фиксированной длины.
SPACE
SPACE( n )Строка из n пробелов.
Пример.
CONCAT('a', SPACE(MAX([orders.quantity])), 'b')При количестве 5 между буквами встают пять пробелов: a b. Применяется для выравнивания в выгрузках с моноширинным шрифтом.
Считается на стороне платформы: только снаружи агрегата — MAX(SPACE(…)) ответит отказом, SPACE(MAX(…)) сработает. Почему — функции, которые считает платформа.
SPLIT
SPLIT( string, delimiter, n )n-я часть строки; отрицательный номер отсчитывается с конца.
Пример.
SPLIT(MAX([products.product_name]), ' ', 2)Второе слово названия: «для» у «Аксессуаров», «станция» у «Компьютеров». Номер -1 дал бы последнее слово.
Считается на стороне платформы: только снаружи агрегата — MAX(SPLIT(…)) ответит отказом, SPLIT(MAX(…)) сработает. Почему — функции, которые считает платформа.
STARTSWITH
STARTSWITH( string, prefix )Истина, если строка начинается с префикса.
Пример.
MAX(STARTSWITH([products.product_name], 'Сумка'))1 у «Аксессуаров». Регистр учитывается — для проверки без него берите ISTARTSWITH.
В прямом запросе не работает на: MS SQL Server.
SUBSTR
SUBSTR( string, from [, len ] )Подстрока с позиции from.
Пример.
MAX(SUBSTR([products.product_name], 1, 6))Шесть символов с начала: Сумка у «Аксессуаров» — вместе с пробелом. Отсчёт позиций начинается с единицы.
TRIM
TRIM( string )Убирает пробелы по краям.
Пример.
MAX(TRIM([products.category]))Делает то же, что LTRIM и RTRIM вместе. Ставьте её перед группировкой, если источник отдаёт значения с невидимыми пробелами: иначе «Москва» и «Москва » станут двумя разными строками отчёта.
UPPER
UPPER( string )Переводит в верхний регистр.
Пример.
MAX(UPPER([products.category]))«Аксессуары» → «АКСЕССУАРЫ».
UTF8
UTF8( string )Перекодирует строку в UTF-8.
Источник пока не исполняет эту функцию
Формула сохранится, а выборка ответит отказом «Функция … пока не поддержана».
Что дальше
- Все функции списком — каталог с поиском по странице.
- Вычисляемые поля — где и как написать формулу.