Docs / Build Workflow

Filtro — date_range_preset

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 de presets (o uno de los built-ins si presets se 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 de looky 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 defaults date_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

  1. El picker resuelve el preset id seleccionado a un par {date_from, date_to} usando la timezone del workspace.
  2. Esos valores fluyen como los parámetros date_from y date_to a cada viz del dashboard.
  3. Si bindings está 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 validate rechaza un preset id. El id tiene que ser uno de los built-ins. Typos como last_7_dys o ids inventados como fiscal_q1 se 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.preset tiene que matchear exacto un id de presets (o, si presets se 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 en bindings si 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á bindings en cada uno para bindear a nombres de parámetro distintos.