Para comparar una métrica filtrada por varios períodos en el mismo aspecto o panel, puedes usar medidas filtradas. Las medidas filtradas te permiten aplicar un filtro codificado directamente a una medida, en lugar de aplicar un filtro a una consulta completa.
Si tienes una cantidad limitada de períodos que te interesa comparar, puedes definir algunas medidas con filtros de períodos codificados (por ejemplo, "este año" y "el año pasado") y mostrarlas en Explorar, una vista o un panel. También puedes llevar este enfoque un paso más allá para hacer que las comparaciones de períodos sean dinámicas, o bien medidas que cambian con los períodos especificados por los usuarios en Exploraciones, Looks o paneles, con el uso de filtros de plantillas en medidas filtradas.
Descripción general del patrón
En términos generales, este enfoque implica tres componentes:
-
Define un filtro de plantilla de
type: date
para cada período que aparecerá como un campo solo de filtro en tu exploración, búsqueda o panel. -
Crea una dimensión de tipo
yesno
para vincularla al filtro de plantillas de modo que, cuando un usuario seleccione un valor para el campo de solo filtro, la dimensiónyesno
devuelva "sí" para los registros que cumplan con las condiciones del filtro. -
Crea una medición filtrada que haga referencia a la dimensión
yesno
con la condiciónvalue = "yes"
. Esto garantiza que la medición solo agregue registros que cumplan con la condición del período que se especifica en el filtro que se define en el paso 1.
Esta lógica permite a los usuarios crear análisis y visualizaciones que comparan valores de diferentes períodos, como la siguiente exploración:

Los usuarios pueden cambiar los valores de los filtros Período A y Período B, y solo afectar los valores de Cantidad de pedidos A y Cantidad de pedidos B. Cantidad de pedidos A y Cantidad de pedidos B son medidas con filtros que hacen referencia a las condiciones del período en los filtros de período. El período A afecta los valores de Cantidad de pedidos A, y el período B afecta los valores de Cantidad de pedidos B.
En la siguiente sección, se proporciona el código LookML para este ejemplo.
El código LookML
En la siguiente expresión LookML, se supone que tienes un grupo de dimensiones con un período raw
llamado created_raw
:
dimension_group: created { type: time timeframes: [ raw, time, date, ] sql: ${TABLE}.created_at ;; }
El código LookML para comparar las medidas de recuento (Cantidad de pedidos A y Cantidad de pedidos B) filtradas por dos períodos dinámicos (Período A y Período B) según created_raw
se ve de la siguiente manera:
## filter determining time range for all "A" measures filter: timeframe_a { type: date_time } ## flag for "A" measures to only include appropriate time range dimension: group_a_yesno { hidden: yes type: yesno sql: {% condition timeframe_a %} ${created_raw} {% endcondition %} ;; } ## filtered measure A measure: count_a { type: count filters: [group_a_yesno: "yes"] } ## filter determining time range for all "B" measures filter: timeframe_b { type: date_time } ## flag for "B" measures to only include appropriate time range dimension: group_b_yesno { hidden: yes type: yesno sql: {% condition timeframe_b %} ${created_raw} {% endcondition %} ;; } measure: count_b { type: count filters: [group_b_yesno: "yes"] }
Puedes usar esta lógica para crear tantas comparaciones de períodos como necesites.
Cómo filtrar una consulta completa con períodos dinámicos
Las medidas filtradas no aplican una condición de filtro a los resultados generales de la consulta. Si deseas limitar los resultados generales de la consulta dentro de los períodos especificados, puedes hacer lo siguiente:
-
Crea la siguiente dimensión
yesno
- Filtra los valores de dimensión por "sí" en Exploraciones, Looks o paneles:
dimension: is_in_time_a_or_b { group_label: "Time Comparison Filters" type: yesno sql: {% condition timeframe_a %} ${created_raw} {% endcondition %} OR {% condition timeframe_b %} ${created_raw} {% endcondition %} ;; }
Esto evita que la base de datos analice más datos de los necesarios para la consulta y puede ayudar con el rendimiento y el costo de la consulta.