Cuándo usar date_range_preset
Usá date_range_preset cuando el usuario elige un date range desde un set chico de presets nombrados — last 30 days, this month, this quarter, year-to-date, etc. Este es el default correcto para la mayoría de los dashboards operacionales: le da al usuario un click para cambiar período sin tipear fechas.
Usá date_range cuando el usuario tiene que elegir extremos arbitrarios. Usá cutoff_date cuando el input es una sola fecha en vez de un rango.
Campos requeridos
id— único dentro del bloque filters del dashboard.type: date_range_preset
Campos opcionales
label— display label arriba del picker.default— objeto seleccionando el preset a aplicar en first load:{ preset: <id> }. Tiene que referenciar un id depresets(o uno de los built-ins sipresetsse omite).presets— array de objetos{ id }en el orden en el que deberían aparecer en el picker. El id tiene que ser uno de los preset ids built-in de abajo; el schema rechaza ids desconocidos en tiempo delooky validate.bindings— objeto overrideando los nombres de parámetro:{ date_from: <param-name>, date_to: <param-name> }. Usalo cuando el model espera nombres de parámetro distintos a los defaultsdate_from/date_to.
Preset ids built-in
Todos los preset ids se computan en el runtime del picker. Los autores no declaran tokens from/to — el picker resuelve el id a un {date_from, date_to} concreto en cada run, usando la timezone del workspace.
today— un solo día: la fecha de hoy.yesterday— un solo día: hoy menos uno.last_7_days,last_30_days,last_90_days— ventanas rolling de N días terminando hoy (inclusive).this_week,last_week— semana ISO (lunes a domingo).this_month,last_month— calendar month.this_quarter,last_quarter— calendar quarter (Ene-Mar, Abr-Jun, Jul-Sep, Oct-Dic).this_year,last_year— calendar year.
Escribir cualquier otro id se rechaza con looky validate con un schema error apuntando al presets[i].id ofensor. Si un preset que necesitás no está en la lista, eso es un request para un nuevo built-in — no algo que los autores parcheen en YAML.
Cómo llega el valor a la query Malloy
- El picker resuelve el preset id seleccionado a un par
{date_from, date_to}usando la timezone del workspace. - Esos valores fluyen como los parámetros
date_fromydate_toa cada viz del dashboard. - Si
bindingsestá seteado, los mismos valores también se bindean a los nombres de parámetro listados ahí.
El model Malloy declara los parámetros y los usa en cláusulas where:, exactamente como con los otros filtros de fecha.
Diferencias entre adapters
Misma caveat de date / timestamp que cutoff_date — mirá la comparación de adapters de source para el patrón de Postgres / MySQL.
Ejemplos trabajados
Default a this year, con cinco presets en el picker:
filters:
- id: period
type: date_range_preset
label: Period
default:
preset: this_year
presets:
- id: last_30_days
- id: this_month
- id: this_quarter
- id: this_year
- id: last_year
Bind a un par de parámetro custom (el model usa start_date / end_date):
filters:
- id: period
type: date_range_preset
label: Period
default:
preset: this_month
bindings:
date_from: start_date
date_to: end_date
Dos rangos independientes en el mismo dashboard, cada uno en sus propios parámetros:
filters:
- id: current_period
type: date_range_preset
label: Current
default:
preset: this_month
bindings:
date_from: current_from
date_to: current_to
- id: comparison_period
type: date_range_preset
label: Compare to
default:
preset: last_month
bindings:
date_from: compare_from
date_to: compare_to
Errores comunes
looky validaterechaza un preset id. El id tiene que ser uno de los built-ins. Typos comolast_7_dyso ids inventados comofiscal_q1se rechazan en tiempo de push para que el dashboard nunca aterrice en prod con un preset silenciosamente roto.- El default no aplica en first load.
default.presettiene que matchear exacto un id depresets(o, sipresetsse omite, uno de los built-ins). - La query no toma el date range. El model Malloy tiene que declarar los parámetros a los que el picker bindea — por default
date_from/date_to, o los nombres enbindingssi los setás. - Dos filtros de fecha pelean por
date_from/date_to. Si tenés múltiples filtros date_range_preset en el mismo dashboard, seteábindingsen cada uno para bindear a nombres de parámetro distintos.