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

Ссылки на модели и сохранённые запросы

В Glarus BI при работе с источниками данных с поддержкой SQL можно использовать модель или существующий запрос как основу для нового запроса, либо как общее табличное выражение CTE (документация Metabase, англ.).

Допустим, данные распределены по нескольким таблицам, пользователей интересует только их часть. Вы можете один раз составить сложный запрос, сохранить его как модель, и затем пользователи смогут ссылаться на эту модель в своих запросах так же, как и на любую таблицу.

Поиск моделей и запросов по мере ввода

Сначала создайте и сохраните запрос или модель, который возвращает набор данных, доступный для последующих запросов.

Чтобы сослаться на этот запрос или модель в SQL‑запросе, используйте автодополнение в переменной с префиксом #.

Введите {{#ваш поисковый запрос}}, и Glarus BI покажет список моделей и запросов, соответствующих вашему поисковому запросу.

Выпадающий список автодополнения для ссылок на запросы и модели в SQL-запросах

Вы также можете узнать ID запроса или модели, открыв в Glarus BI модель или запрос, на который вы хотите сослаться. ID находится в URL в адресной строке браузера — это число после /model/ или /question/. Например, для https://glarus-bi.example.com/model/12345-example-name ID модели будет 12345.

Для ссылки достаточно только # и ID. Glarus BI просто отображает название модели или запроса, чтобы запрос было проще читать.

Модель, таблица или сохранённый запрос в виде общего табличного выражения (CTE)

Тот же синтаксис можно использовать в общих табличных выражениях CTE (документация Metabase, англ.) (для SQL‑баз данных, которые поддерживают CTE):

WITH gizmo_orders AS {{#5-gizmo-orders-in-2019}}
SELECT count(*)
FROM gizmo_orders

При выполнении этого запроса тег {{#5-gizmo-orders-in-2019}} будет заменён SQL‑запросом из выбранного запроса (или модели) и окружён скобками. «Под капотом» это будет выглядеть так:

WITH
  gizmo_orders AS (
    SELECT
      *
    FROM
      orders AS o
      INNER JOIN products AS p ON o.product_id = p.id
    WHERE
      p.category = 'Gizmo'
      AND o.created_at BETWEEN '2019-01-01' AND '2019-12-31'
  )
SELECT
  count(*)
FROM
  gizmo_orders

Ограничения и компромиссы

  • На модель или сохранённый запрос можно ссылаться только при работе с SQL‑базой данных (например, PostgreSQL, MySQL, Snowflake или SQL Server).
  • Выбранная модель или сохранённый запрос должны быть основаны на той же базе данных, что и та, которую вы выбрали в редакторе прямых запросов.
  • На переменные в подзапросах ссылаться нельзя. У вас есть доступ только к результатам модели или сохранённого запроса, но не к самому SQL‑коду модели (или запроса). Например, если у вас есть сохранённый запрос, который использует фильтр поля (документация Metabase, англ.), вы не сможете сослаться на эту переменную. Если вам нужно изменить фильтрацию результатов сохранённого запроса, обновите (или продублируйте) этот запрос и примените новый фильтр.

Дополнительная информация