Skip to content

Поддержка функций источниками ​

В режиме извлечения формулы считает витрина платформы, и там работает почти всё, что описано в справочнике — кроме десятка функций, которые платформа не исполняет ни в одном режиме (см. ниже). В режиме прямого запроса формула переводится в 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

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

Где источники расходятся ​

ФункцияPostgreSQLClickHouseMySQLMariaDBH2VerticaCockroachDBMS 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 платформа не исполняет ни в одном режиме — ограничения языка формул.

Что дальше ​