Saltar a contenido

Filtros y filtros cruzados

Ejercicio filters-and-cross-filters-annex.pdf · PDF

Abres la tienda de Steam y buscas un juego. Junto a los resultados hay un panel: acotar por precio, acotar por etiqueta. Marcas una casilla y cambia toda la lista. No un juego. Toda.

Tu cuadro de mando (dashboard) Steam market dice que el precio mediano es 4.99. Pero nuestro estudio indie espera conseguir un éxito. ¿Es 4.99 el precio mediano de los éxitos? Nadie lo sabe: el cuadro de mando solo responde por todo el mercado. ¿Construyes un segundo cuadro de mando para los éxitos? ¿Un tercero para 2018? No. Mantienes un solo cuadro de mando y dejas que el lector elija el corte.

Qué aprenderás

  • Añadir a un cuadro de mando un filtro Value y un filtro Time range, y aplicarlos
  • Explicar un filtro como un WHERE que Superset escribe en cada gráfico de su ámbito
  • Cambiar el ámbito de un filtro para que un gráfico lo ignore, y decir por qué
  • Hacer que un filtro dependa de otro
  • Usar el filtrado cruzado haciendo clic en un gráfico, y distinguirlo de un filtro de la barra
  • Evitar la trampa: por qué un KPI filtrado puede ser un número verdadero con una historia falsa

Un control, todos los gráficos reaccionan

Un filtro (Superset lo llama native filter) es un control del cuadro de mando que deja al lector quedarse solo con algunas de las filas. Cada gráfico al que llega se dibuja de nuevo solo con esas filas.

Es el panel de la tienda. Un control a un lado, y todo lo de la página le obedece.

Los filtros viven en la barra de filtros (filter bar), la franja a la izquierda del cuadro de mando. Añade el primero:

Paso Haz esto Deberías ver
1 Abre la barra de filtros: la flecha en lo alto de la franja estrecha de la izquierda La barra se abre
2 Haz clic en el icono del engranaje → Add or edit filters El diálogo de filtros
3 Filter name: Owners tier. Filter Type: Value. Dataset: games_clean. Column: owners_tier. Save Un control llamado Owners tier en la barra
4 En la barra, elige Hit y pulsa Apply filters Cambia toda la fila de KPI

Mira la fila superior antes y después:

KPI Todo el mercado Con Owners tier = Hit
Games 26,685 623
Free share 11.6% 29.2%
Median price 4.99 9.99
Hits 623 623

Ahí está la respuesta para el estudio. Entre los éxitos, el precio mediano es 9.99: el doble de la mediana del mercado. Y casi un tercio de los éxitos son gratis.

Ojo: elegir no es aplicar

Eliges un valor y no pasa nada. Es normal: los gráficos esperan a que pulses Apply filters al final de la barra. Lo mismo ocurre con Clear all. Vacía los controles, pero los gráficos conservan el filtro antiguo hasta que vuelves a aplicar.

El WHERE escondido

¿Cómo saltó la mediana de 4.99 a 9.99? Abre los tres puntos del KPI Games → View query. Superset muestra el SQL que hay detrás del gráfico, y tiene una línea nueva:

WHERE owners_tier IN ('Hit')

Esa cláusula la escribes a mano desde la Unidad 1 (SQL Lab: filtros). Un filtro de cuadro de mando no es más que un WHERE que Superset escribe por el lector, en la consulta de cada gráfico al que llega.

flowchart LR
    R["<b>Lector</b><br>elige Hit,<br>pulsa Apply filters"] --> F["<b>Filtro</b><br>Owners tier"]
    F -- "añade WHERE owners_tier IN ('Hit')" --> Q1["<b>Consulta</b> del KPI Games"]
    F -- "añade el mismo WHERE" --> Q2["<b>Consulta</b> del KPI Median price"]
    F -- "añade el mismo WHERE" --> Q3["<b>Consulta</b> del gráfico de líneas"]
    Q1 --> D[("<b>Base de datos</b><br>games_clean")]
    Q2 --> D
    Q3 --> D

Puedes demostrarlo sin el cuadro de mando. Ejecuta tú mismo los cuatro KPI en SQL Lab con ese WHERE:

SELECT COUNT(*) AS games,
       ROUND(100 * AVG(is_free::int), 1) AS free_pct,
       PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY price) AS median_price,
       COUNT(*) FILTER (WHERE owners_tier = 'Hit') AS hits
FROM games_clean
WHERE owners_tier IN ('Hit');
games free_pct median_price hits
623 29.2 9.99 623

Los mismos números que el cuadro de mando. Sin magia: una consulta.

Ojo: un filtro no esconde, recalcula

"El filtro esconde parte de los datos en pantalla." Hace más que eso. Cada gráfico ejecuta de nuevo su consulta con un WHERE más. Una mediana no se puede "esconder": hay que calcularla otra vez sobre las 623 filas que quedan. Por eso cambia.

Dos tipos de filtro: Value y Time range

Tipo de filtro El lector elige Bueno para Nuestro ejemplo
Value Uno o más valores de una columna, de una lista Categorías owners_tier = Hit, price_band = Free
Time range Una fecha de inicio y una de fin Cualquier cosa con fecha Juegos publicados en 2018

Un filtro Time range requiere más cuidado, por cómo funciona el final. Para quedarte con los juegos de 2018:

Paso Haz esto Deberías ver
1 Add or edit filters → Add filter. Filter Type: Time range. Nombre: Release date. Save Un control que dice No filter
2 Haz clic en él. Range type: Custom Las cajas de fecha
3 Cambia Start (inclusive) a Specific Date/Time y escribe 2018-01-01. En End (exclusive) escribe 2019-01-01 Las dos fechas puestas
4 Pulsa APPLY, y luego Apply filters Games marca 8,845 y Hits marca 37

Lee otra vez las dos etiquetas: el inicio es inclusivo (inclusive), el final es exclusivo (exclusive). La fecha de inicio entra. La fecha de fin queda fuera. Así que "todo 2018" termina en 2019-01-01, no en 2018-12-31. En SQL es la pareja que ya conoces:

WHERE release_date >= '2018-01-01' AND release_date < '2019-01-01'

Si tu KPI Games se acerca a 8,845 pero no es igual, tus fechas fallan por un día.

Ámbito: quién obedece al filtro

Con 2018 aplicado, mira el gráfico de líneas de juegos por año. Ahora tiene un único punto. Un gráfico de historia con un año de historia es inútil.

¿Debería cada gráfico obedecer a cada filtro? No.

El ámbito (scope) de un filtro es el conjunto de gráficos a los que llega. Un gráfico fuera del ámbito ignora el filtro por completo.

En la tienda, el panel de precios cambia la lista de resultados, pero no el banner de la parte de arriba de la página. El banner está fuera del ámbito.

Paso Haz esto Deberías ver
1 Add or edit filters → selecciona Release date → Scoping Un árbol de gráficos bajo All panels
2 Desmarca el gráfico de líneas. Save El diálogo se cierra
3 Si al guardar Release date volvió a No filter, pon otra vez 2018 y pulsa Apply filters Los KPI dicen 8,845, y la línea sigue yendo de 2004 a 2018
flowchart LR
    F["<b>Filtro</b><br>Release date = 2018"]
    subgraph IN ["<b>Dentro del ámbito</b>: recalculado para 2018"]
        K["Los cuatro KPI"]
        P["Gráfico de tramos de precio"]
    end
    subgraph OUT ["<b>Fuera del ámbito</b>: sin cambios"]
        L["Gráfico de líneas<br>juegos por año, de 2004 a 2018"]
    end
    F -- "añade su WHERE" --> IN
    F -. "ignorado" .-> OUT

Ojo: un filtro no siempre toca todo el cuadro de mando

Como lector, nunca des por hecho que todos los gráficos de la pantalla muestran el mismo corte. Como autor, si sacas un gráfico del ámbito, hazlo evidente: un encabezado como The whole period, 2004–2018 sobre el gráfico de líneas le ahorra al lector una conclusión equivocada.

Filtros dependientes: una lista que se encoge

Añade un filtro Value llamado Publisher sobre la columna publisher. Ábrelo y haz scroll. La lista no se acaba nunca: la tabla tiene 13,951 editores distintos.

SELECT COUNT(DISTINCT publisher) AS publishers,
       COUNT(DISTINCT publisher) FILTER (WHERE owners_tier = 'Hit') AS with_a_hit
FROM games_clean;
publishers with_a_hit
13951 336

Solo 336 de ellos han publicado alguna vez un éxito. Si el lector ya ha elegido Hit, ¿por qué mostrar los otros trece mil?

Un filtro dependiente es un filtro cuya lista de valores se recorta según la elección hecha en otro filtro.

Imagina que el panel de la tienda hiciera lo mismo: en cuanto marcas un género, la lista de editores solo ofrece los que tienen un juego en ese género.

Paso Haz esto Deberías ver
1 Añade un filtro Value llamado Publisher sobre la columna publisher Un control nuevo
2 En su configuración, marca Values are dependent on other filters y elige Owners tier. Save El diálogo se cierra
3 Clear all, Apply filters. Abre Publisher 1000 options
4 Elige Owners tier = Hit. Abre Publisher otra vez 336 options: solo los editores que tienen un éxito
5 Elige Valve y pulsa Apply filters Games marca 22

Dos detalles. Primero, la opción Values are dependent on other filters solo aparece cuando el cuadro de mando ya tiene otro filtro. Segundo, ¿por qué 1000 options y no 13,951? Un filtro carga como máximo 1,000 valores, en orden alfabético. Sin la dependencia, Valve ni siquiera está en la lista. Con Hit elegido, sí. Valve es el editor con más éxitos: 22.

Filtrado cruzado: el gráfico es el control

Hasta ahora, tú, el autor, decidías qué preguntas podía hacer el lector. Pero un lector que mira el gráfico de sectores de tramos de precio puede preguntarse: ¿y solo los juegos gratis? No hay un filtro para eso. ¿Tiene que pedírtelo a ti?

El filtrado cruzado (cross-filtering) consiste en hacer clic en una parte de un gráfico (un sector, una barra) para filtrar los demás gráficos del cuadro de mando por ese valor.

En la tienda es hacer clic en una etiqueta en la página de un juego: sin panel, simplemente haces clic en lo que estás mirando.

Paso Haz esto Deberías ver
1 Clear all, Apply filters. En el menú del engranaje, comprueba que Enable cross-filtering está marcado Está marcado por defecto
2 Haz clic en el sector Free de tu gráfico de sectores de tramos de precio Los otros gráficos reaccionan. La barra muestra la selección bajo Cross-filters
3 Lee los KPI. Luego haz clic otra vez en el sector Games 3,094 y Hits 182, y luego de vuelta a todo el mercado

No todos los gráficos admiten clics

Un Bar Chart con los tramos de precio en el eje X no reacciona a los clics. Si es lo que tienes: tres puntos → Edit chart, cambia el tipo de gráfico a Pie Chart con Dimensions price_band, y guárdalo como un gráfico nuevo llamado UT4 · Price band pie. Luego añádelo a Steam market.

Por debajo, un filtro cruzado hace lo mismo que un filtro: añade un WHERE a los demás gráficos. La diferencia es quién manda.

Filtro de la barra Filtro cruzado
Quién lo prepara El autor, por adelantado Nadie: el lector hace clic en un gráfico
Bueno para Las preguntas que esperas (nivel, año) La pregunta que surge mientras se mira
Se ve como Un control con nombre, siempre ahí Una etiqueta bajo Cross-filters, que desaparece con un clic

Ojo: más filtros no es un mejor cuadro de mando

Cada filtro es una pregunta que esperas que haga el lector. Diez controles que nadie usa son ruido, igual que diez gráficos que nadie lee. Dos o tres buenos filtros valen más que una pared de desplegables.

La trampa de 2018: un número verdadero, una historia falsa

Pon los cuatro cortes uno al lado del otro:

KPI Todo Hit 2018 Free
Games 26,685 623 8,845 3,094
Free share 11.6% 29.2% 12.1% 100.0%
Median price 4.99 9.99 3.99 0.00
Hits 623 623 37 182

Mira la columna de 2018. Ese año tiene un tercio de todos los juegos de la tabla (8,845 de 26,685) pero solo 37 de los 623 éxitos. ¿Eran peores los juegos de 2018?

No. Eran más jóvenes. Un juego publicado en diciembre de 2018 solo tuvo unas semanas para encontrar propietarios cuando se recogieron los datos. Uno de 2012 tuvo seis años. El filtro cambió el año, y con él cambió otra cosa sin avisarte: el tiempo que tuvo cada juego para venderse.

El número 37 es verdadero. La historia "los juegos de 2018 son peores" es falsa. El filtro te dio las dos.

Dos hábitos te protegen:

  • Di qué se filtró antes de citar el número. No "el precio mediano es 9.99", sino "entre los 623 juegos con al menos un millón de propietarios, la mitad cuesta 9.99 o menos, el doble de la mediana de todo el mercado".
  • Pregúntate qué más cambió con el filtro. Un corte rara vez es distinto en una sola cosa.

Si los KPI parecen atascados en números viejos

Sigue activo un filtro o un filtro cruzado. Pulsa Clear all, luego Apply filters, y busca bajo Cross-filters una selección olvidada.

Ideas clave

  • Un filtro es un control de la barra de filtros que deja al lector elegir un corte. Nada cambia hasta que se pulsa Apply filters.
  • Un filtro es un WHERE escondido: cada gráfico de su ámbito ejecuta de nuevo su consulta. Compruébalo con View query.
  • Los filtros Value eligen categorías; los filtros Time range eligen fechas, con un inicio inclusivo y un final exclusivo.
  • El ámbito decide qué gráficos obedecen. Saca un gráfico cuando el filtro lo dejaría inútil, como la línea de historia.
  • Un filtro dependiente encoge su lista según otro filtro. El filtrado cruzado deja al lector filtrar haciendo clic en un gráfico.
  • Un KPI filtrado puede ser un número verdadero con una historia falsa: di qué se filtró y pregúntate qué más cambió con él.

Comprobación rápida

1. ¿Qué hace Superset con los gráficos cuando el lector aplica un filtro?
  • Esconde parte de cada gráfico en pantalla sin tocar los datos
  • Añade un WHERE a la consulta de cada gráfico del ámbito del filtro y ejecuta las consultas de nuevo
  • Borra de la tabla las filas que no coinciden
  • Crea una copia del cuadro de mando para ese corte

Un filtro es un WHERE escondido. Cada gráfico del ámbito consulta de nuevo la base de datos, por eso una mediana puede cambiar de 4.99 a 9.99. La tabla en sí nunca se modifica.

2. Eliges Hit en el filtro Owners tier y los KPI no se mueven. ¿Cuál es el motivo más probable?
  • El filtro solo funciona con gráficos de sectores
  • El cuadro de mando está en modo de visualización
  • No has pulsado Apply filters
  • Los filtros Value necesitan un segundo filtro para funcionar

Elegir un valor solo rellena el control. Los gráficos esperan a Apply filters. Lo mismo ocurre tras Clear all.

3. Quieres exactamente los juegos publicados en 2018 con un filtro Time range. ¿Qué fechas escribes?
  • Inicio 2018-01-01, fin 2018-12-31
  • Inicio 2018-01-01, fin 2019-01-01
  • Inicio 2017-12-31, fin 2018-12-31
  • Inicio 2018-01-01, fin 2018-01-01

El inicio es inclusivo y el final es exclusivo: la propia fecha de fin se deja fuera. Terminar en 2018-12-31 descartaría los juegos publicados el último día del año.

4. Con el filtro de 2018 activado, tu gráfico de líneas de juegos por año muestra un único punto. ¿Cuál es la solución correcta?
  • Borrar el gráfico de líneas del cuadro de mando
  • Borrar el filtro Release date
  • Cambiar el ámbito del filtro para que el gráfico de líneas lo ignore
  • Convertir el gráfico de líneas en un Big Number

El ámbito es el conjunto de gráficos a los que llega un filtro. Desmarca el gráfico de líneas en Scoping y seguirá mostrando de 2004 a 2018 mientras los KPI siguen al filtro.

5. El filtro Publisher dice '1000 options'. Tras elegir Owners tier = Hit dice '336 options'. ¿Por qué?
  • Superset quitó los editores con nombres largos
  • Los demás editores se borraron de games_clean
  • Publisher es un filtro dependiente: su lista se recorta a los editores que tienen al menos un éxito
  • Un filtro nunca puede mostrar más de 336 valores cuando hay otro filtro activo

Un filtro dependiente toma su lista de las filas que deja otro filtro. Solo 336 de los 13,951 editores tienen un éxito, así que la lista se encoge y Valve se encuentra fácil.

6. ¿Cuál es la principal diferencia entre un filtro de la barra y un filtro cruzado?
  • Un filtro cambia las consultas; un filtro cruzado solo cambia colores
  • Un filtro cruzado es permanente; un filtro desaparece al hacer clic
  • Un filtro funciona solo con fechas; un filtro cruzado solo con números
  • Un filtro lo prepara el autor por adelantado; un filtro cruzado lo improvisa el lector haciendo clic en un gráfico

Ambos añaden un WHERE a los demás gráficos. La diferencia es el responsable: el autor diseña filtros para las preguntas que espera, y el filtrado cruzado atiende la pregunta que surge mientras se mira.

7. Un cuadro de mando de notas del instituto tiene aplicado el filtro 'Group = 2nd DAM' y muestra 'Average mark: 7.8'. Elige las dos cosas que debes hacer antes de repetir ese número.
  • Decir qué se filtró: es la media de 2.º DAM, no del instituto
  • Nada: un número de un cuadro de mando siempre habla de todos los datos
  • Preguntarte qué más cambia con el filtro, por ejemplo cuántos estudiantes o qué asignaturas hay detrás de esa media
  • Quitar la barra de filtros para que nadie pueda cambiar el número

Esta es la trampa de 2018 con otro disfraz. Un KPI filtrado es verdadero solo para su corte, y un corte suele diferir en más de una cosa. Di qué se filtró y pregúntate qué más cambió.

Tu cuadro de mando ya responde a muchas preguntas en vez de a una. Pero hasta ahora solo lo ves tú. A continuación: Publicación y permisos, o quién puede abrir tu trabajo.