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

Проверка показателей

Проверка формирует 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
  • Проверка показателя, не привязанного к таблице фактов, доступна из каталога показателей на странице «Модель данных»