Оформление
Поддержка функций источниками
В режиме извлечения формулы считает витрина платформы, и там работает почти всё, что описано в справочнике — кроме десятка функций, которые платформа не исполняет ни в одном режиме (см. ниже). В режиме прямого запроса формула переводится в SQL вашей базы, и часть функций до неё не доезжает: в диалекте нет такой функции или она называется иначе.
Эта страница отвечает на вопрос «соберётся ли мой расчёт на нашей базе» до того, как вы начнёте собирать виджет.
Если сомневаетесь — переключите датасет на извлечение
Расхождения по базам ниже касаются только прямого запроса. Витрина платформы исполняет язык формул одинаково для любого источника — режимы работы с данными.
Работают на всех источниках
Ядро языка одинаково везде — 55 функций:
ABS, ANY, AVG, AVG_IF, CEILING, COUNT, COUNTD, COUNTD_APPROX, COUNTD_IF, COUNT_IF, DATE, DATEADD, EXCLUDE, FIRST, FIXED, FLOOR, IF, IFNULL, INCLUDE, INT, LAST, LEFT, LOWER, LTRIM, MAX, MAX_IF, MCOUNT, MIN, MIN_IF, MMAX, MMIN, MSUM, NOW, PI, POWER, RANK, RANK_DENSE, RANK_UNIQUE, RCOUNT, REPLACE, RMAX, RMIN, ROW_NUMBER, RSUM, RTRIM, SIGN, SQRT, SQUARE, SUBSTR, SUM, SUM_IF, TODAY, TRIM, UPPER, ZN
Сюда входят основные агрегаты, расчёты уровня детализации, ранги и накопление, базовая арифметика и работа со строками. Если расчёт собран только из них, он перенесётся на любую базу без правок.
Где источники расходятся
| Функция | PostgreSQL | ClickHouse | MySQL | MariaDB | H2 | Vertica | CockroachDB | MS SQL |
|---|---|---|---|---|---|---|---|---|
ACOS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
AMONG | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
ARG_MAX | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
ARG_MIN | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
ASIN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
ATAN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
ATAN2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
CONCAT | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
CONTAINS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
COS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
COT | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
DATEPART | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
DATETIME | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
DATETRUNC | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ |
DAY | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
DAYOFWEEK | ✓ | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ |
DEGREES | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
DIV | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ |
DIV_SAFE | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
ENDSWITH | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
EXP | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
FDIV_SAFE | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
FIND | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
FLOAT | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
GREATEST | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
ICONTAINS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
IENDSWITH | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
ISNULL | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
ISTARTSWITH | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
LAG | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
LEAD | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
LEAST | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
LEN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
LN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
LOG | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
LOG10 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
MAVG | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
MONTH | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
QUARTER | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
RADIANS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
RANK_PERCENTILE | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
RAVG | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
RIGHT | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
ROUND | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
SIN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
STARTSWITH | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
STDEV | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
STDEVP | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
STR | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
TAN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ |
TOTAL | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
VAR | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
VARP | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
WEEK | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
WITHIN | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
YEAR | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
Как читать эту таблицу
ARG_MAXиARG_MIN— функции ClickHouse. В прямом запросе к остальным базам их нет; работают они в режиме извлечения — витрина платформы стоит на ClickHouse.- MS SQL Server отказывает чаще прочих. Причина не в самой базе, а в переводе формулы: платформа отправляет ей функции стандарта SQL —
EXTRACT,CHAR_LENGTH,LN, — а T-SQL знает их под другими именами (DATEPART,LEN,LOG). Расчёты с датами, длиной строки, поиском подстроки и статистикой на нём в прямом запросе не собираются. - CockroachDB не принимает тригонометрию: синус, косинус, тангенс и переводы градусов в радианы.
- Vertica не поддерживает область окна (
TOTAL,WITHIN,AMONG), скользящее и нарастающее среднее (MAVG,RAVG) — значит, доли от целого и скользящие средние на ней в прямом запросе не построить. - ClickHouse не даёт
LAGиLEAD: смещение по ряду заменяется оконными выражениями платформы или расчётом в извлечении. - H2 и Vertica не умеют
DATETRUNCвовсе, а ClickHouse, MySQL, MariaDB и MS SQL — округление до квартала: «DATETRUNC по единице 'quarter' не поддерживается источником». Обход один — переключить датасет на извлечение.DATEPARTне заменяет округление: он возвращает номер месяца или квартала, и одинаковые месяцы разных лет сольются.
Источники, на которых виджет не строится вовсе
| Источник | Что происходит |
|---|---|
| Oracle | Виджет не строится ни с одной функцией: колонка типа NUMBER без указанной точности роняет план запроса |
| Firebird | У источника нет схемы, и таблица не попадает в план запроса — выборка отвечает ошибкой |
| Trino | Простые выборки идут, но большая часть функций отказывает: из 133 работают 37 |
Эти три источника подходят для просмотра структуры и подключения, но собирать на них отчётность в прямом запросе в текущей версии нельзя. Обход один — режим извлечения.
Что в таблицу не попало
Отдельно от источника ведут себя функции, которые платформа считает сама:
REGEXP_EXTRACT,REGEXP_MATCH,REGEXP_REPLACE,REGEXP_EXTRACT_NTH,SPLIT,CHAR,SPACE— считаются на стороне платформы и не переводятся в источник вовсе. Их нельзя положить внутрь агрегата, но снаружи они работают на любой базе — строковые функции.HOUR,MINUTE,SECONDзависят не от базы, а от типа поля: часы берутся только из «даты и времени».AGOиAT_DATEтребуют измерение даты в разрезе виджета — без него отказывают на любом источнике.MEDIAN,QUANTILE,QUANTILE_APPROX,ALL_CONCAT,TOP_CONCAT,UTF8,BOOL,DATE_PARSE,DATETIME_PARSE,DB_CASTплатформа не исполняет ни в одном режиме — ограничения языка формул.
Что дальше
- Все функции списком — каталог с синтаксисом и примерами.
- Режимы работы с данными — когда брать извлечение, а когда прямой запрос.
- Типы источников — какие базы подключаются и чем отличаются.