Создание дашборда с динамическими столбцами в таблице¶
В данном подразделе показан пример настройки дашборда, содержащего виджет таблицы с динамическими столбцами.
Допустим:
- на вашем дашборде уже размещена прямая или сводная таблица;
- в таблице есть столбцы со значениями с разбивкой по годам;
- вы хотите с помощью фильтра дашборда, вводя интервал, динамически изменять набор столбцов.

- Вы задаёте интервал в фильтре.
- Введённые значения передаются в виджет «Число».
- В виджете «Число» формируется регулярное выражение для таблицы.
- Регулярное выражение через специальный фильтр подставляется в запрос таблицы как переменная.
- Таблица получает значение переменной и обновляется.

Результат: набор столбцов динамически изменяется в соответствии с заданными значениями.
Описанный здесь принцип подходит для решения более сложных задач. Пример с датами взят для удобства.
Вам понадобится:
- промежуточный технический виджет «Число» (и соответствующий запрос). Он будет хранить переменную для подстановки;
- два поля ввода (текстовых фильтра) для задания границ интервала: левая граница входит в интервал, правая — не входит;
- дополнительный технический фильтр. Он примет значение из «Числа» и применит его к таблице;
- переменная в запросе таблицы.

Создайте запрос для регулярного выражения¶
Используйте следующий код:
SELECT concat(
'^(',
arrayStringConcat(
arrayMap(x -> concat('__', toString(x)),
range(toUInt32({{start}}), toUInt32({{end}}))
),
'|'
),
')$'
) AS regexp
Псевдоним после AS может отличаться от regexp, это некритично для получения результата.
В данном запросе используются переменные start и end. Чтобы проверить его работу, введите начало и конец интервала в поля ввода над запросом. В блоке результата вы должны увидеть регулярное выражение с перечислением лет. Правая граница не входит в интервал.
Двойное нижнее подчёркивание присоединяется к году как приставка и нужно, чтобы система отличала динамический столбец от обычного. Это позволяет автоматически располагать столбцы при выводе в порядке возрастания.
Если возникают проблемы с применением введённых значений, используйте Ctrl + Enter.

Выберите визуализацию «Число». Затем сохраните запрос в вашу коллекцию и добавьте на дашборд с таблицей.
Добавьте на дашборд текстовые фильтры¶
На предыдущем шаге вы вводили значения в поля ввода запроса. Теперь нужно обеспечить их инициализацию на дашборде. Для этого будут использоваться текстовые фильтры.
Также понадобится техническое поле, которое будет хранить значение регулярного выражения.
Добавьте на дашборд 3 текстовых фильтра:
- поля ввода «с» и «по»;
- список значений «regexp» (технический фильтр).
Названия ваших виджетов фильтра могут отличаться.
Задайте значения по умолчанию для «с» и «по», чтобы не получать ошибку при открытии дашборда.
Свяжите:
- первое поле ввода «с» >
startвиджета «Число»; - второе поле вводе «по» >
endвиджета «Число».
Сохраните изменения.
Добавьте интерактивность для «Числа»¶
Необходимо обеспечить передачу регулярного выражения из «Числа» в поле технического фильтра.

Перейдите к редактированию дашборда. Наведите курсор на «Число», выберите «Поведение при нажатии». На появившейся панели справа выберите:
- Обновить фильтр дашборда;
- свяжите фильтр «regexp» со столбцом
regexp; - активируйте «Применять по событию изменения значения»;
- нажмите «Готово».
Сохраните дашборд.
Преобразуйте запрос таблицы в прямой¶
Из настроек виджета таблицы перейдите к запросу. Если он был составлен в конструкторе, потребуется преобразовать его в прямой запрос для возможности подстановки переменной в блок SELECT.
Далее вставьте в SELECT строку:
COLUMNS({{regexp}})
Ниже приведён пример запроса с подстановкой значения переменной. Вы можете использовать этот код, если у вас ещё нет таблицы для экспериментов.
WITH dataset AS (
SELECT 'Отрасль A' AS "отрасль", 'Эмитент 1' AS "эмитент", 'Выручка' AS "показатель", 100 AS "значение_показателя", 2020 AS "год"
UNION ALL SELECT 'Отрасль A','Эмитент 1','Выручка',120,2021
UNION ALL SELECT 'Отрасль A','Эмитент 1','Выручка',150,2022
UNION ALL SELECT 'Отрасль A','Эмитент 1','Выручка',170,2023
UNION ALL SELECT 'Отрасль A','Эмитент 1','Выручка',200,2024
UNION ALL SELECT 'Отрасль A','Эмитент 2','Выручка',80,2020
UNION ALL SELECT 'Отрасль A','Эмитент 2','Выручка',90,2021
UNION ALL SELECT 'Отрасль A','Эмитент 2','Выручка',110,2022
UNION ALL SELECT 'Отрасль A','Эмитент 2','Выручка',130,2023
UNION ALL SELECT 'Отрасль A','Эмитент 2','Выручка',140,2024
UNION ALL SELECT 'Отрасль B','Эмитент 3','EBITDA',50,2021
UNION ALL SELECT 'Отрасль B','Эмитент 3','EBITDA',60,2022
UNION ALL SELECT 'Отрасль B','Эмитент 3','EBITDA',65,2023
UNION ALL SELECT 'Отрасль B','Эмитент 3','EBITDA',70,2024
)
SELECT
src."показатель",
src."эмитент",
COLUMNS({{regexp}}) -- расширяем только по годам, "г." не выводим
FROM (
SELECT
"показатель",
"эмитент",
maxIf("значение_показателя", "год" = 2020) AS "__2020",
maxIf("значение_показателя", "год" = 2021) AS "__2021",
maxIf("значение_показателя", "год" = 2022) AS "__2022",
maxIf("значение_показателя", "год" = 2023) AS "__2023",
maxIf("значение_показателя", "год" = 2024) AS "__2024",
maxIf("значение_показателя", "год" = 2025) AS "__2025"
FROM dataset
GROUP BY "показатель","эмитент"
) AS src
ORDER BY src."показатель", src."эмитент";
В предварительном просмотре такого запроса будет ошибка до того момента, пока вы не введёте значение переменной. Чтобы увидеть все столбцы в предварительном просмотре, подставьте в поле ввода regexp: «.+».
AS "__2025": как уже отмечалось выше, двойные нижние подчёркивания являются признаком динамических столбцов таблицы.
Сохраните изменённый запрос. Вернитесь на дашборд.
Свяжите технический фильтр с таблицей¶

Перейдите к редактированию дашборда. Щёлкните по техническому фильтру regexp и свяжите его с вашей таблицей — столбцом regexp.
Сохраните дашборд.
Проверьте работу связки¶
Измените значения в полях виджета фильтра «с» и «по». Убедитесь в обновлении таблицы.
Вы можете щёлкнуть по «Числу» — первый щелчок применяет технический фильтр, второй — отменяет. Виджет таблицы может не отображаться, когда фильтр отменён, это не является ошибкой.
Скройте лишнее¶
Вы можете скрыть технический виджет «Число» и технический фильтр regexp в настройках дашборда.

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