Docs / Build Workflow

Filtro — date_range

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 keys from y to. Cada uno acepta un token de fecha (mira abajo) o un string ISO de fecha. Uno o los dos pueden omitirse.
  • bindings — objeto con keys date_from y date_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}}"