Фильтры полей¶
Фильтры полей — это специальные переменные, которые можно напрямую связать с полями базы данных.
Когда использовать фильтр поля, а когда — основную переменную¶
В общем случае лучше использовать переменные типа "фильтр поля": они дают «умные» виджеты фильтров с выпадающими списками и динамическими календарями.
Если в запросе нет поля базы данных, с которым можно связать фильтр, тогда вместо этого нужно использовать простую переменную. Например, если вы хотите фильтровать по пользовательскому столбцу, который вы создали, вам понадобится простая переменная.
Переменные типа "фильтр поля"¶
Чтобы добавить фильтр поля:
- Добавьте переменную в выражение
WHERE. - Свяжите field filter с полем базы данных.
- Настройте ваш виджет фильтра.
Синтаксис фильтра поля¶
Предположим, вы хотите создать переменную "фильтр поля", которая фильтрует таблицу People по полю state.
Вот синтаксис фильтра поля:
Обратите внимание: здесь нет указания столбца и оператора (то есть это не WHERE state = {{state}}, а просто WHERE {{state}}). Такой формат нужен, чтобы обрабатывать случаи, когда Glarus BI генерирует код за вас. Например, когда человек выбирает несколько значений в виджете фильтра или диапазон дат, Glarus BI должен будет интерполировать SQL так, чтобы корректно обработать эти входные данные в переменной.
В прямом запросе MongoDB фильтр поля нужно поместить в выражение $match.
Привязка фильтра к полю базы данных¶
Чтобы переменная фильтра поля работала, нужно связать переменную с полем базы данных.
- Откройте боковую панель "Переменные".
- В разделе Тип переменной выберите "Фильтр поля".
- Выберите, к какому связующему полю привязать переменную (в этом примере мы привяжем поле
Categoryв таблице products).
Фильтр поля можно связать только с полем базы данных. Если вы не можете использовать фильтр поля, можно вернуться к простой переменной.
Указание псевдонима таблицы и поля¶
Если вы привязываете фильтр к полю из таблицы с псевдонимом (alias), нужно сообщить Glarus BI об этом псевдониме, иначе фильтр не будет работать.
Например, вы хотите привязать фильтр к полю category из таблицы products, но в запросе используете псевдоним p для таблицы products:
Если вы привязали фильтр к полю category таблицы products, вам также нужно заполнить поле Псевдоним таблицы и поля, чтобы Glarus BI знал про псевдоним. В этом случае укажите p.category.
Задавать Псевдоним таблицы и поля нужно только если в запросе используется псевдоним для ссылки на таблицу, которая содержит поле, к которому вы привязываете фильтр.
Вот ещё пример — с использованием CTE:
WITH
expensive_products AS (
SELECT
*
FROM
products
WHERE
price > 50
)
SELECT
*
FROM
expensive_products
WHERE
{{category_filter}}
Здесь мы снова привязываем фильтр к полю category в таблице products. Но поскольку мы используем CTE с псевдонимом expensive_products, нужно указать expensive_products.category в поле Псевдоним таблицы и поля, чтобы сопоставление работало.
Фильтры полей должны быть связаны с полями баз данных, которые участвуют в запросе¶
Основной запрос должен «знать» обо всех таблицах, на которые указывает переменная "фильтр поля", иначе вы получите синтаксическую ошибку SQL. Например, основной запрос выглядит так:
Предположим, переменная {{ product_category }} ссылается на другой запрос, который использует таблицу Products. Чтобы фильтр поля работал, вам нужно добавить join к Products в основной запрос:
Если вы не можете использовать фильтр поля, можно вернуться к простой переменной.
Фильтры полей в BigQuery и Oracle¶
Убедитесь, что SQL‑диалект соответствует выбранной базе данных. Частые проблемы связаны с тем, как в запросе экранируются схемы и таблицы:
| База данных | Особенность диалекта | Пример |
|---|---|---|
| BigQuery | Схемы и таблицы должны быть заключены в обратные кавычки. | FROM `dataset.table` |
| Oracle | Схемы и таблицы должны быть заключены в двойные кавычки. | FROM "schema.table" |
Если нужна помощь, см. "Устранение неполадок по сообщениям об ошибках".