Cuándo usar date_range
Usá date_range para un picker abierto de from / to. El usuario elige los dos extremos libremente; los valores se mandan verbatim como parámetros.
Usá cutoff_date cuando el lower bound siempre es el comienzo del mes de la fecha elegida. Usá date_range_preset cuando el usuario elige entre presets con nombre (last 30 days, this month, etc.) — preferido para la mayoría de dashboards operacionales.
Campos requeridos
type: date_range
Campos opcionales
label— display label arriba del picker.default— objeto con keysfromyto. Cada uno acepta un token de fecha (mirá abajo) o un string ISO de fecha. Uno o los dos pueden omitirse.
Tokens de fecha para defaults
El mismo set de tokens funciona en las sub-keys from y to (resuelven contra la timezone actual del usuario en page load):
//
Cualquier cosa que no esté en la lista se trata como un string ISO de fecha literal.
Cómo llega el valor a la query Malloy
El picker emite un par {from, to} al submit. Looky setea dos parámetros en cada query a la que aplica el filtro:
date_from— la fecha "from" elegida.date_to— la fecha "to" elegida.
El model Malloy declara esos parámetros y los usa en cláusulas where:, exactamente como con cutoff_date.
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 month-to-date:
filters:
- type: date_range
label: Period
default:
from: ""
to: ""
Default a un período histórico fijo (para un reporte congelado):
filters:
- type: date_range
label: Period
default:
from: "2024-01-01"
to: "2024-12-31"
Default abierto al día actual, sin lower bound (el default del parámetro del model entra en juego):
filters:
- type: date_range
label: Period
default:
to: ""
Errores comunes
- La query falla en Postgres o MySQL con un error de date-binding. Agregá el patrón de placeholder
@paramen el SQL del model — mirá la comparación de adapters de source. - "From" es posterior a "to". El picker previene al usuario de elegir un rango invertido, pero un default con
fromposterior atorenderiza una selección vacía. Usá un default razonable y dejá que el usuario ajuste. - La precisión time-of-day importa pero el picker es solo date. El picker solo manda fechas. Codificá el time-of-day en la query Malloy (ej. comparar contra
created_at::date) o usá otro patrón de parámetro. - Múltiples filtros date_range en una viz. Todos bindean a
date_from/date_to— solo uno gana. O mantenés un filtro date_range, o usás date_range_preset con bindings customdate_from_param/date_to_parampara usar nombres de parámetro distintos. - Los tokens default no se reconocen. Solo los tokens listados son válidos; cualquier otra cosa se toma como un string de fecha literal.