Проверка показателей
Проверка формирует SQL-запрос по формуле показателя и позволяет выполнить его в подключённой базе данных, чтобы убедиться, что формула транслируется и возвращает ожидаемые данные. Проверка запускается действием «Проверить» в разделе «Показатели» таблицы фактов и в каталоге показателей на странице «Модель данных».
Когда действие «Проверить» доступно
- Действие отображается только для показателей, у которых задана формула
- Действие недоступно, если подключение, указанное как источник показателя, неактивно
- Действие заблокировано, если у показателя или у любого элемента, на который ссылается его формула, есть критическая ошибка. В этом случае подсказка сообщает: «Для расчета этого показателя используются недопустимые показатели/измерения»
- Циклическая ссылка в формуле заранее не блокируется — о ней сообщается ошибкой при формировании запроса
Параметры проверки
Действие «Проверить» открывает окно «Проверить показатель» с двумя параметрами:
| Параметр | Описание |
|---|---|
| Фильтр для проверки | Один из сохранённых фильтров для проверки, ограничивающий выборку. По умолчанию — «Без фильтра». Фильтры с ошибкой настройки выбрать нельзя: они отображаются неактивными с предупреждающим значком и подсказкой «Ошибка настройки фильтра» либо «Измерение было удалено», если фильтр ссылается на удалённый элемент |
| Ограничение результата | Максимальное количество строк в результате: «Без ограничений», 10, 50, 200 или 500 строк. По умолчанию — 10 строк. Для агрегированных показателей параметр скрыт, поскольку агрегат всегда возвращает одну строку |
Для показателя, привязанного к таблице фактов, в списке предлагаются фильтры этой таблицы фактов. Для показателя, не привязанного ни к одной таблице фактов, предлагаются глобальные фильтры версии проекта. Фильтры описаны на странице «Фильтры для проверки».
Подтвердите выбор кнопкой «Проверить». Система формирует SQL-запрос и открывает панель результата; сам запрос при этом не выполняется.
Как формируется SQL-запрос
Запрос собирается из определения показателя в РПИ и из сопоставления с физическими таблицами, настроенного на слое «Подключения» таблицы фактов.
- Раскрытие формулы. Все ссылки на другие показатели, факты и измерения разрешаются рекурсивно. Производные элементы заменяются собственными формулами — вплоть до базовых элементов, то есть первичных показателей и первичных фактов, сопоставленных напрямую с колонкой базы данных
- Сопоставление источников. Для каждого базового элемента определяется его подключённый источник — подключение, схема, таблица и колонка. Все участвующие элементы должны относиться к одному подключению; запросы, охватывающие две базы данных, отклоняются
- Анализ таблиц. Если все элементы относятся к одной таблице, выборка выполняется из неё. Если задействовано несколько таблиц, они соединяются по ключам справочников: внешний ключ на стороне таблицы фактов и первичный ключ на стороне справочника. Соединения формируются как
LEFT JOIN - Базовая таблица. В секцию
FROMпомещается таблица, содержащая показатели факта; при её отсутствии используется таблица, на которую ссылается внешний ключ - Фильтры. Условия выбранного фильтра для проверки объединяются в секции
WHEREс условиями, содержащимися в самой формуле. Одинаковые условия не дублируются. Если фильтр использует измерение из справочника, для доступа к таблице с нужной колонкой применяется ключевая связь справочника, и в запрос добавляется соответствующее соединение - Диалект. Имена таблиц и колонок, псевдонимы, кавычки, схема по умолчанию и синтаксис соединений формируются под СУБД подключения: PostgreSQL, MySQL, MS SQL Server или ClickHouse
Трансляция функций. Функции формулы заменяются эквивалентными конструкциями целевой СУБД. Например, извлечение года формируется так:
| СУБД | Результат |
|---|---|
| PostgreSQL | EXTRACT(YEAR FROM column) |
| ClickHouse | toYear(column) |
| MS SQL Server | YEAR(column) |
| MySQL | YEAR(column) |
Агрегаты с условиями. Если условие применяется к агрегатной функции (SUM, AVG, COUNT, MIN, MAX, COUNTDISTINCT), оно формируется как выражение CASE WHEN внутри агрегата. Значение, используемое при несовпадении условия, равно 0 для SUM и NULL для остальных агрегатов. Результат COUNT приводится к числовому типу.
Ограничение строк. Для неагрегатных запросов ограничение применяется синтаксисом целевой СУБД: LIMIT … OFFSET … для PostgreSQL, MySQL и ClickHouse и OFFSET … ROWS FETCH NEXT … ROWS ONLY для MS SQL Server, который дополнительно требует секцию ORDER BY — она добавляется автоматически, если в запросе её нет.
Чтение сформированного SQL
Панель результата открывается в нижней части экрана и показывает сформированный запрос в блоке кода только для чтения — с отступами, переносами строк и нумерацией строк. Над ним доступны два действия:
- «Копировать» — копирует форматированный запрос в буфер обмена
- «Экспортировать код в текстовый файл» — сохраняет запрос в файл
.sql
Выполнение запроса и чтение результата
Кнопка «Выполнить SQL-скрипт» запускает сформированный запрос в подключённой базе данных.
- Кнопка доступна ролям Суперадминистратор, Администратор компании, Разработчик и Аналитик и требует действующей лицензии. Наблюдатель видит сформированный SQL, но не может его выполнить
- Результат отображается под заголовком «Результат скрипта» в виде таблицы. Агрегированный показатель даёт одну строку с одним значением; неагрегатный показатель — колонку с результатом расчёта и колонки полей, использованных в запросе
- Действие «Сохранить текущую страницу в файл» экспортирует загруженные в таблицу строки в файл CSV
- Если запрос ничего не вернул, панель сообщает: «Результаты выполнения скрипта не найдены»
Постраничный вывод зависит от выбранного перед проверкой ограничения: при выборе 10, 50, 200 или 500 строк весь ограниченный набор возвращается сразу и элементов постраничного вывода нет. При выборе «Без ограничений» (а также для агрегированного показателя) результат разбивается на страницы, и каждая страница запрашивается из базы данных.
Ошибки
Об ошибках сообщают уведомления. Наиболее частые сообщения и их значение:
| Сообщение | Значение |
|---|---|
| «Расчетный показатель {название} создает цикл в формуле», «Обнаружена циклическая зависимость» | Формула ссылается на себя напрямую или через другой показатель. Исправьте ссылки перед проверкой |
| «Источник не найден для показателя: {название}», «Источник не найден для факта: {название}» | У базового элемента не настроен подключённый источник. Сопоставьте его на слое «Подключения» |
| «Не удалось разобрать источник для показателя: {название}» | Сохранённый подключённый источник элемента имеет непригодный формат |
| «Множественные RDB не поддерживаются» | Формула смешивает элементы из разных подключений |
| «Показатели ссылаются на несколько таблиц», «Измерения ссылаются на несколько таблиц фактов» | Участвующие элементы нельзя свести к одному согласованному запросу |
| «Не найдены внешние ключи для измерений», «Невозможно построить соединение (join)», «Некорректные ключи измерений» | Требуется соединение, но ключевая связь отсутствует или неполна. Проверьте внешний ключ в таблице фактов и первичный ключ в справочнике |
| «Невозможно определить базовую таблицу» | В запросе нет таблицы, которую можно поместить в секцию FROM |
| «Агрегатные функции не поддерживаются в фильтрах» | Условие фильтра содержит агрегатную функцию |
| «Фильтр не найден», «Не все фильтры найдены» | Выбранный фильтр для проверки больше не существует |
| «Соединение неактивно», «SQL запрос не может быть выполнен, так как соединение с базой данных недоступно или было удалено» | Подключение нельзя использовать. Проверьте его в разделе «Подключения» |
| «Произошла ошибка при выполнении запроса к базе данных» | База данных отклонила запрос. Вместе с сообщением выводится текст ошибки СУБД |
| «Попытка соединения с базой данных истекла. Пожалуйста, попробуйте снова» | База данных не ответила за отведённое время |
Примечания:
- Проверка не изменяет показатель, таблицу фактов и данные в подключённой базе данных — выполняется только чтение
- Запрос формируется для СУБД того подключения, на которое указывает источник показателя, поэтому одна и та же формула в разных проектах может давать разный SQL
- Проверка показателя, не привязанного к таблице фактов, доступна из каталога показателей на странице «Модель данных»