Необязательные переменные¶
Вы можете сделать часть запроса необязательной. Например, можно создать опциональное выражение WHERE, которое содержит SQL‑переменную, так что если переменной не передали значение (через фильтр или через URL), запрос всё равно выполнится — как будто WHERE отсутствует.
Чтобы сделать переменную опциональной в прямом запросе, "оберните" в [[ .. ]] весь фрагмент, который содержит {{variable}}. Если пользователь введёт значение в виджете фильтра для variable, Glarus BI подставит этот фрагмент кода в шаблон. Еслм не введёт — Glarus BI проигнорирует его и выполнит запрос так, будто этого фрагмента кода не было.
В примере ниже если для cat не задано значение, запрос просто выберет все строки из таблицы products. Но если у cat есть значение, например "Widget", запрос выберет только товары с категорией Widget:
SQL должен корректно выполняться без опционального фрагмента¶
Убедитесь, что ваш SQL остаётся валидным, когда переменной в опциональном фрагменте в [[ ]] не передали значение.
Например, если вынести слово WHERE из фрагмента в [[ ]], вы получите ошибку, когда для cat не задано значение:
Это происходит потому, что когда для cat не задано значение, Glarus BI попытается выполнить SQL так, будто фрагмента в [[ ]] не существовало:
Это невалидный SQL. Вместо этого поместите весь WHERE в [[ ]]:
Когда для cat нет значения, Glarus BI всё равно выполнит валидный запрос:
При нескольких опциональных фрагментах нужен хотя бы один WHERE¶
Чтобы использовать несколько опциональных фрагментов, нужно добавить хотя бы один обычный WHERE, а затем опциональные фрагменты, каждый из которых начинается с AND:
Последний фрагмент использует фильтр поля (обратите внимание: в AND нет указания столбца). При использовании фильтра поля столбец в запросе указывать нельзя — переменную нужно сопоставить полю в боковой панели.
Опциональные переменные в MongoDB¶
Если вы используете MongoDB, вы можете сделать часть запроса опциональной так:
Или с несколькими опциональными фильтрами:
[
[[{ $match: {{cat}} },]]
[[{ $match: { price: { "$gt": {{minprice}} } } },]]
{
$count: "Total"
}
]
Задание сложных значений по умолчанию прямо в запросе¶
Вы можете задавать значения по умолчанию прямо в запросе, если поместить синтаксис комментария внутрь закрывающих скобок опционального параметра.
Комментарий будет «активироваться» каждый раз, когда вы передаёте значение в your_parameter.
Это полезно, когда значение по умолчанию сложное (например, если это функция вроде CURRENT_DATE). Ниже пример PostgreSQL, который задаёт значение по умолчанию для фильтра даты как текущую дату с помощью CURRENT_DATE:
Если вы передадите значение переменной, выполнится WHERE, включая синтаксис комментария, который «закомментирует» функцию CURRENT_DATE по умолчанию.
Обратите внимание: маркер комментария (--) может отличаться в зависимости от вашей базы данных — используйте синтаксис комментариев, который поддерживает ваша СУБД.