Cuándo usar date_range
Usa date_range para un picker abierto de from / to. El usuario elige los dos extremos libremente; los valores se mandan verbatim como parámetros.
Usa cutoff_date cuando el lower bound siempre es el comienzo del mes de la fecha elegida. Usa 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
id— identifier interno del filtro.label— display label arriba del picker.default— objeto con keysfromyto. Cada uno acepta un token de fecha (mira abajo) o un string ISO de fecha. Uno o los dos pueden omitirse.bindings— objeto con keysdate_fromydate_to, que overridean los nombres de parámetro a los que el picker se bindea. Usalo cuando un dashboard necesita dos date ranges bindeados a parámetros de model distintos.
Tokens de fecha para defaults
El mismo set de tokens funciona en las sub-keys from y to (resuelven contra la timezone del workspace — ui.timezone en workspace.yml — cayendo al default de la instancia):
{{today}}{{yesterday}}{{start_of_week}}/{{end_of_week}}{{start_of_month}}/{{end_of_month}}
Cualquier cosa que no esté en la lista se trata como un string ISO de fecha literal. Cuando setees los dos defaults, mantén from en o antes de to.
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.
El picker manda fechas enteras, sin hora del día — cuando la columna es un timestamp, compara contra su parte de fecha (ej. created_at::date).
Diferencias entre adapters
Misma caveat de date / timestamp que cutoff_date — mira 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: "{{start_of_month}}"
to: "{{today}}"
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: "{{today}}"