Dynamic Default Date Ranges In Metabase¶
Эта страница описывает, как настроить dashboard в Metabase так, чтобы app-metabase-embedding
автоматически подставлял стартовый период в editable date filters.
Что делает backend¶
Для dashboard сервис:
- читает
descriptionчерезGET /api/dashboard/{id}; - ищет в нём блок
@config: {...}; - парсит
period; - вычисляет даты относительно
LocalDate.now(); - возвращает:
initialParams— plain имена параметров для UI и отладки;embedParams— raw-ключи Metabase, готовые для сборки embed URL.
Важно:
- в JWT editable date defaults не кладутся;
- locked embedding params по-прежнему кладутся в JWT
params; - фронт должен использовать именно
embedParams.
Когда это работает¶
Динамические периоды работают только если одновременно выполняются все условия:
- ресурс — строго
dashboard; - в
descriptionесть блок@config: {...}; - JSON внутри
@configвалиден; periodстрого соответствует шаблонуlast_<N>_<unit>;N > 0;- в dashboard удалось найти хотя бы один параметр начала периода или хотя бы один параметр конца периода;
- если параметр уже присутствует в ранее собранных params, backend его не перезаписывает.
Как настроить dashboard¶
1. Добавьте date filters в Metabase¶
В dashboard должны быть date-параметры, которые пользователь может менять вручную.
Backend ищет date-параметры в таком порядке.
Точное сопоставление для начала периода:
date_fromstartfrom
Точное сопоставление для конца периода:
date_toendto
Сначала backend проверяет:
- уже собранные params;
- затем
availableParamNamesиз metadata dashboard.
Если точного совпадения нет, backend переходит к semantic matching по parameterSearchTexts.
parameterSearchTexts строится из нижнего регистра и decode значений полей:
slugnamedisplay-nameid
Точные semantic hints для начала периода:
date_fromstartfromначал
Точные semantic hints для конца периода:
date_toendtoконецокончан
То есть custom slug будет работать только если его search text содержит один из этих фрагментов.
Примеры, которые backend сможет распознать:
начало_периодаконец_периодаperiod_startperiod_endокончание_периода
Примеры, которые backend не обязан распознать:
left_borderright_borderp1p2
2. Убедитесь, что параметры editable¶
Если параметр locked, backend не должен использовать его как editable default.
Нужный сценарий:
- параметр объявлен в dashboard;
- пользователь видит его в embed;
- пользователь может изменить значение вручную.
3. Добавьте config в description¶
В описание dashboard добавьте строку такого вида:
@config: {"period":"last_1_month"}
Допустимо, если в description есть и другой текст. Главное, чтобы внутри был один валидный блок @config:.
Примеры:
@config: {"period":"last_2_weeks"}
Дашборд для ЛК УК
@config: {"period":"last_7_days"}
Поддерживаемый формат периода¶
Шаблон:
last_<N>_<unit>
Где:
N— положительное целое число;unit—day,days,week,weeks,month,months,year,years.
Примеры валидных значений:
last_7_dayslast_2_weekslast_1_monthlast_3_monthslast_1_year
Как считаются даты¶
Backend использует:
date_to = LocalDate.now()
date_from = date_to.minusXxx(N)
Примеры:
last_7_days->date_from = today.minusDays(7)last_2_weeks->date_from = today.minusWeeks(2)last_1_month->date_from = today.minusMonths(1)
Примеры настройки¶
Вариант 1. Стандартные параметры start / end¶
Dashboard metadata:
description = @config: {"period":"last_1_month"}
parameters = start, end
Ответ backend:
{
"initialParams": {
"start": "2026-03-15",
"end": "2026-04-15"
},
"embedParams": {
"start": "2026-03-15",
"end": "2026-04-15"
}
}
Вариант 2. Стандартные параметры date_from / date_to¶
Dashboard metadata:
description = @config: {"period":"last_2_weeks"}
parameters = date_from, date_to
Ответ backend:
{
"initialParams": {
"date_from": "2026-04-01",
"date_to": "2026-04-15"
},
"embedParams": {
"date_from": "2026-04-01",
"date_to": "2026-04-15"
}
}
Вариант 3. Кириллические slug'и¶
Dashboard metadata:
description = @config: {"period":"last_2_weeks"}
parameters = начало_периода, конец_периода
Если Metabase хранит raw slug в URL-encoded виде, backend вернёт:
{
"initialParams": {
"начало_периода": "2026-04-01",
"конец_периода": "2026-04-15"
},
"embedParams": {
"%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%B0": "2026-04-01",
"%D0%BA%D0%BE%D0%BD%D0%B5%D1%86_%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%B0": "2026-04-15"
}
}
Для embed URL фронт должен использовать embedParams, а не initialParams.
Как фронт должен использовать ответ¶
Правильный путь:
- брать
tokenкак чистый JWT; - брать
embedParams; - собирать fragment/query для Metabase из
embedParamsбез дополнительного workaround для кириллицы.
Что не делать¶
- не класть editable date defaults в JWT;
- не использовать
initialParamsкак источник raw-ключей для Metabase URL; - не ожидать, что backend угадает произвольные slug'и без признаков начала/конца периода;
- не писать невалидный JSON в
description.
Диагностика¶
Если период не подставился, проверьте:
- Dashboard, а не card.
- В
descriptionесть@config: {...}. - JSON валидный.
periodсоответствует шаблонуlast_<N>_<unit>.- В dashboard есть date-параметры.
- Параметры editable.
- Backend действительно вернул
embedParams. - Фронт использует
embedParams, а не старый workaround.
Быстрый чеклист для нового dashboard¶
- Создан dashboard.
- Добавлены editable date filters.
- Имена фильтров понятны backend (
start/end,date_from/date_toили осмысленные custom slug'и). - В
descriptionдобавлен@config. - Проверен ответ
/api/metabase/widgets/{id}. - Во frontend для embed используются
embedParams.