Volver al inicio

Filtros de fecha en Superset: eludiendo el envoltorio

El artículo describe un truco para eludir el envoltorio automático de filtros de fecha en conjuntos de datos virtuales de Apache Superset. Se utiliza una columna dummy DATETIME para interceptar from_dttm/to_dttm vía Jinja2. El enfoque asegura personalización correcta de fechas sin conflictos.

Truco de filtros de fecha en Superset: +3 días sin errores
Advertisement 728x90

Bypassing Date Filters in Apache Superset Virtual Datasets

En Apache Superset, los conjuntos de datos virtuales a menudo requieren manipulaciones personalizadas de fechas desde los filtros del panel. Los filtros envuelven automáticamente las consultas SQL con condiciones adicionales, rompiendo tu lógica prevista. Aunque el macro remove_filter existía en versiones anteriores a la 5, ya no está disponible. Vamos a ver un caso común: sumar 3 días al valor del filtro from_dttm.

Crea un conjunto de datos virtual con esta consulta:

select *   from messages   where 1=1   and ts > (TIMESTAMP '{{ from_dttm | default("1970-01-01", true) }}' + INTERVAL '3 days')

Agrega un gráfico "Tabla" al panel con el filtro "Última semana". Superset envuelve la consulta con condiciones como ts >= '...' AND ts < '...', ignorando tu ajuste de +3 días. El filtrado funciona incorrectamente.

Google AdInline article slot

Entendiendo el Comportamiento de los Macros de Filtro

Los macros from_dttm y to_dttm devuelven:

  • None (Python None) si el filtro está vacío.
  • Una cadena de fecha/hora (por ejemplo, '2026-03-23 00:00:00') cuando se establece un valor.

Prueba esto simplificando temporalmente la consulta:

select {{from_dttm}} as res

Sin filtro: None. Con filtro: '2026-03-23 00:00:00'. Este es el punto clave: usa default para manejar valores None.

Google AdInline article slot

Solución Universal: Enfoque con Columna Falsa

Captura los valores de filtro en variables de Jinja2 con un valor predeterminado, crea una columna falsa de tipo DATETIME. Esta columna se sincroniza con el conjunto de datos y se convierte en base para el filtrado de fechas en el panel.

Consulta base:

{% set from_dttm_fv = from_dttm | default("1970-01-01 00:00:00", true) %}   SELECT *, '{{ from_dttm_fv }}'::TIMESTAMP as fict_column   FROM messages

Después de guardar:

Google AdInline article slot
  • Sincroniza los metadatos del conjunto de datos.
  • Verifica que fict_column sea de tipo DATETIME.
  • En el panel, configura fict_column como la Columna de Tiempo en el filtro de fechas.

Las condiciones externas de Superset (fict_column >= from_dttm AND fict_column < to_dttm) siempre evaluarán como verdaderas porque from_dttm_fv se extrae directamente del filtro.

Ampliación a to_dttm y Lógica Personalizada

Captura ambos valores de filtro:

{% set from_dttm_fv = from_dttm | default("1970-01-01 00:00:00", true) %}   {% set to_dttm_fv = to_dttm | default("1970-01-01 00:00:00", true) %}   SELECT *   , '{{ from_dttm_fv }}'::TIMESTAMP as fict_column   FROM messages   WHERE ts > (TIMESTAMP '{{ from_dttm_fv }}' + INTERVAL '3 days')   and ts < (TIMESTAMP '{{ to_dttm_fv }}' + INTERVAL '3 days')

Ahora:

  • Las condiciones externas sobre fict_column siempre son verdaderas.
  • La lógica interna aplica el desplazamiento de +3 días a ts.
  • El filtrado del panel funciona correctamente.

Flujo de Trabajo Estándar

  • Define la modificación de fecha necesaria (desplazamiento, redondeo).
  • Prueba los macros: confirma el comportamiento con None y valores reales.
  • Crea una columna falsa usando default.
  • Sincroniza el conjunto de datos y verifica que el tipo sea DATETIME.
  • Configura el filtro del panel para usar fict_column.
  • Aplica la lógica personalizada en la cláusula WHERE.
  • Valida los resultados en el panel.

Conclusiones Clave

  • La columna falsa es obligatoria: asegura que las condiciones externas de Superset sigan siendo verdaderas.
  • El default para None es crítico: 1970-01-01 00:00:00 evita errores en tiempo de ejecución.
  • Usa el casting ::TIMESTAMP: garantiza el tipo DATETIME correcto en los metadatos.
  • Sincroniza los metadatos: sin esto, la columna no aparecerá en los filtros.
  • Solución universal: funciona para cualquier manipulación de fechas en from_dttm o to_dttm.

Este método te da control total sobre el manejo de fechas en conjuntos de datos virtuales sin conflictos con los filtros del panel.

— Editorial Team

Advertisement 728x90

Leer después