====== Jinja-шаблоны ====== **Jinja Templating** — это движок веб-шаблонов для Python. Он использует текстовый язык шаблонов, который можно использовать для генерации как разметки, так и исходного кода. Включение Jinja повышает гибкость функций и обеспечивает множество вариантов использования, таких как: * Реализуйте контроль доступа на основе данных пользователя, вошедшего в систему в данный момент (user_id и/или username); * Применяйте фильтры информационной панели непосредственно к внутреннему запросу набора данных; * Используйте компонент фильтра для фильтрации запроса, когда имя столбца фильтра не соответствует имени в текущем запросе; * Примените ограничения фильтра к панелям мониторинга через URL-адрес; * Динамически изменяйте определенные элементы вашего SQL-запроса (например, вычисления, агрегации и т. д.) на основе условий фильтра панели мониторинга; * Персонализированные информационные панели. В Superset вы можете использовать Jinja в Лаборатории SQL, виртуальных датасетах и Фильтре на уровне строк (Row Level Security): * Добавьте в запрос предварительно определенные макросы, чтобы возвращать динамические данные; * Выполнять логические операторы (такие как if, for и т. д.). ===== Синтаксис ===== ==== Jinja-макросы ==== ==== Логические операторы ==== ===== Использование Jinja-шаблонов для фильтрации в дашборде ===== Этот процесс состоит из 4 шагов: - Создайте виртуальный набор данных. - Измените запрос виртуального набора данных, включив в него структуру шаблонов Jinja. - Создайте диаграмму из виртуального набора данных и добавьте ее на панель мониторинга. - Настройте фильтры информационной панели. **Шаг 1. Создайте виртуальный набор данных** Рассмотрим следующий запрос: Если вы создадите виртуальный набор данных с помощью этого запроса, он будет иметь только два столбца: //count// и //window//. Как следствие, вы не сможете создать фильтр информационной панели для //type_call_name//. Вот почему мы будем использовать Jinja. WITH calculation as ( SELECT count(*), window FROM abituser.ld$telephony WHERE type_call_name in ('входящий', 'исходящий') GROUP BY window ) SELECT * FROM calculation Однако если вы выполните запрос, включающий шаблон Jinja, непосредственно в лаборатории SQL , он не вернет никаких результатов, поскольку у нас нет фильтров для передачи значений, а это означает, что выполненный запрос в конечном итоге будет иметь вид: WITH calculation as ( SELECT count(*), window FROM abituser.ld$telephony WHERE type_call_name in ('') GROUP BY window ) SELECT * FROM calculation Для начала создадим виртуальный набор данных без Jinja через Редактор SQL:\\ \\ Сохраним запрос и используем его, как датасет для графика. WITH calculation as ( SELECT count(*), window FROM abituser.ld$telephony WHERE type_call_name in ('входящий') GROUP BY window ) SELECT * FROM calculation **Шаг 2. Измените виртуальный набор данных, включив в него Jinja.**\\ В вашем браузере откроется новая вкладка с вашим новым виртуальным набором данных.\\ В разделе **Датасет** рядом с именем вашего набора данных, выберите **Редактировать датасет**.\\ В разделе **Источник**, нажмите на значок замка, который предоставит вам доступ для редактирования запроса. На панели ввода **SQL**-запроса замените type_call_name in ('входящий') на %%type_call_name in ({{ "'" + "', '".join(filter_values(‘type_call_name')) + "'" }})%% и нажмите **Сохранить**. {{:superset:work_in_superset:jinja_1.png?nolink|}} О структуре шаблонов Jinja: * Начальная ((%%{{ "'" + "', '".join() и конечная () + "'" }}%%) части отвечают за объединение – эта структура позволяет фильтровать несколько значений. * //filter_values(‘Column-Name')// – функция, которая будет учитывать значение фильтра //Column-Name//, в данном случае это //type_call_name//. **Шаг 3. Добавьте диаграмму на панель дашборда.**\\ Теперь, когда мы правильно изменили виртуальный набор данных, мы можем запустить нашу диаграмму, выбрав **Update chart**. Диаграмма не вернет никаких результатов, поскольку она еще не настроена.\\ Выберите **Сохранить** график и перейти к дашборду. {{:superset:work_in_superset:jinja_2.png?nolink&400|}} **Шаг 4. Настройте фильтр на панели дашборда.**\\ Панель управления откроется в вашем браузере. После его появления приступим к заключительному этапу настройки фильтров панели мониторинга.\\ Начните с выбора стрелки вправо, чтобы развернуть область **Фильтры**, а затем выберите **+Add/Edit filters**. {{:superset:work_in_superset:jinja_3.png?nolink|}} Появится окно Добавление и редактирование фильтров. - В поле **Значение фильтра** введите имя вашего фильтра. - В поле **Датасет** укажите датасет, который используется в самом запросе, а не тот, который создали с помощью шаблонов. В нашем примере это //abituser.ld$telephony//. - В поле **Column** мы выберем //type_call_name//, поскольку именно оно определяет имя нашего столбца в структуре Jinja. - Затем выберите вкладку **Scoping**, чтобы убедиться, что фильтр сопоставлен с вашим графиком Фильтр. - По завершении выберите **Сохранить**. Теперь, слева появится созданный фильтр, при выборе значений к области диаграммы применятся выбранные позиции. {{:superset:work_in_superset:jinja_4.png?nolink|}} {{:superset:work_in_superset:jinja_5.png?nolink|}}