Для того, чтобы применить фильтр к SQL-запросу достаточно написать таблицу, колонку и условие фильтрации. Дальше фильтр сам сформирует условие отбора данных, основываясь на связях таблиц.
Фильтры игнорируются, если нет связи между таблицами.
В версии 1.0 использовалась специальная функция filter()
, чтобы применять фильтры для вложенных запросов. В версии 2.0 для вложенных запросов в select-листе или во from
автоматически применяются все фильтры, установленные из панели фильтров отчета или из панели фильтров виджета. Фильтры, написанные в where
, применяются только в том месте, где они написаны.
Если необходимо переопределить правила применения фильтров для подзапросов, то используется настройка виджетов «Специальное применение фильтра», она указывает аналитическому сервису, по каким правилам подставлять дополнительные фильтры, которые пользователь может устанавливать из интерфейса отчета.
Настройка устанавливается в виджетах с возможностью писать SQL-запросы и применяется для всех типов фильтров:
Настройка представляет собой чекбокс в настройках SQL-виджетов.
В пользовательском интерфейсе по умолчанию всегда установлено значение false
, которое подставляет фильтры во все возможные места: к главному запросу и вложенному, при наличии. Если установлено значение true
, то фильтры будут применяться только туда, где указана функция ext_filter()
.
В настройках виджета указан запрос. Значение настройки «Специальное применение фильтра» — false
select * from event
Устанавливается дополнительный фильтр из интерфейса
match('.* -> "Обработка счета" -> .*')
Итоговый запрос, который выполнит аналитический сервис
select * from event
where match('.* -> "Обработка счета" -> .*')
В настройках виджета указан запрос. Значение настройки «Специальное применение фильтра» — true
select * from event
Устанавливается дополнительный фильтр из интерфейса
match('.* -> "Обработка счета" -> .*')
Итоговый запрос, который выполнит аналитический сервис
select * from event
В настройках виджета указан запрос. Значение настройки «Специальное применение фильтра» — false
SELECT
name AS "Событие",
ROUND(COUNT(DISTINCT processUid) / (SELECT COUNT(*) FROM process) * 100, 2) AS "% кейсов"
FROM event
WHERE supplier_type='МТО'
GROUP BY "Событие"
Устанавливается дополнительный фильтр из интерфейса
match('.* -> "Обработка счета" -> .*')
Итоговый запрос, который выполнит аналитический сервис
SELECT
name AS "Событие",
ROUND(COUNT(DISTINCT processUid) / (SELECT COUNT(*) FROM process WHERE match('.* -> "Обработка счета" -> .*')) * 100, 2) AS "% кейсов"
FROM event
WHERE supplier_type='МТО' and match('.* -> "Обработка счета" -> .*')
GROUP BY "Событие"
В настройках виджета указан запрос. Значение настройки «Специальное применение фильтра» — true
SELECT
name AS "Событие",
ROUND(COUNT(DISTINCT processUid) / (SELECT COUNT(*) FROM process) * 100, 2) AS "% кейсов"
FROM event
WHERE supplier_type='МТО' and ext_filter() GROUP BY "Событие"
Устанавливается дополнительный фильтр из интерфейса
match('.* -> "Обработка счета" -> .*')
Итоговый запрос, который выполнит аналитический сервис
SELECT
name AS "Событие",
ROUND(COUNT(DISTINCT processUid) / (SELECT COUNT(*) FROM process) * 100, 2) AS "% кейсов"
FROM event
WHERE supplier_type='МТО' and match('.* -> "Обработка счета" -> .*')
GROUP BY "Событие"
В настройках виджета указан запрос. Значение настройки «Специальное применение фильтра» — false
select
cast(round(avg(unfinishedCases),2) as text) || '%'
from(
SELECT
timeToStr(first(event.started), '%Y-%m') as "Дата",
sum(case when match('.* -> "Оплата счета"') then 1 else 0 end)/count(*) * 100 as unfinishedCases
FROM process
GROUP BY "Дата"
)
Устанавливается дополнительный фильтр из интерфейса
match('.* -> "Обработка счета" -> .*')
Итоговый запрос, который выполнит аналитический сервис
select
cast(round(avg(unfinishedCases),2) as text) || '%'
from(
SELECT
timeToStr(first(event.started), '%Y-%m') as "Дата",
sum(case when match('.* -> "Оплата счета"') then 1 else 0 end)/count(*) * 100 as unfinishedCases
FROM process
WHERE match('.* -> "Обработка счета" -> .*')
GROUP BY "Дата"
)