Tableau – ¿Cómo obtener los top N ordenados por fecha y con filtros?. Estas dos últimas semanas he estado usando Tableau para hacer análisis de datos de redes sociales y me he encontrado con algo que no está resuelto y que además no he visto solucionado en ninguna web.
¿Cómo obtener los top N ordenados por fecha y con filtros con Tableau?
Se trata de obtener los top N registros ordenados por alguna categoría (por ejemplo, por fecha) cuando además estás aplicando filtros.
Así es como se hace con Tableau.
El problema
Tengo un dataset de tweets y quiero obtener los 10 usuarios que más tweets han publicado cada día, filtrando por fechas, hashtag, etc. Y además ordenarlos por número de comentarios.
Para ello, si creamos una hoja de trabajo, con fechas, usuarios, número de comentarios y filtros, obtenemos algo así:
Al filtro de usuario le añadimos la condición de elegir los top 10 elementos por número de registros:
Y el resultado que obtenemos no es lo que esperábamos:
¿Por qué no funciona el filtro “top N” en Tableau cuando tienes otros filtros activos?
Esto es porque el filtro “top N” es lo primero que Tableau aplica de la caja de filtros, es decir, primero obtiene los 10 primeros usuarios por número de comentarios y luego ya filtra por fechas, nombre de usuario y hashtag.
Por tanto, en este caso, el resultado no es el esperado.
La solución
Respecto a obtener los top N ordenados en Tableau hay varias soluciones.
Si sólo tienes un filtro en la hoja de trabajo, lo puedes añadir al contexto y listo. Al añadirlo al contexto, lo primero que hace Tableau es aplicar el filtro y luego ya obtiene los top N.
Cuando tenemos más de un filtro la solución es diferente. La explico a continuación paso a paso:
1. En primer lugar, hay que crear un campo combinado, en este caso fecha y nombre de usuario. Como quiero obtener los top N por día, primero creo un campo calculado para obtener el día a partir de la fecha:
2. Una vez calculado el día a partir de la fecha, creamos un campo combinado de usuario y día:
3. Añadimos el nuevo campo combinado a la hoja de trabajo, porque es el que utilizaremos para ordenar (el campo al final lo ocultaremos):
4. A continuación, utilizamos la función RANK de Tableau. Con esto conseguiremos que a cada registro de la hoja de trabajo se le asignará un número secuencial en función del sumatorio de número de comentarios:
5. Antes de seguir, creamos un parámetro que vamos a llamar “top N” para poder filtrar el número de usuarios. Le ponemos un rango de 1 a 100, aunque por defecto se filtrarán los top 10 usuarios:
6. Creamos un nuevo campo calculado “top rank N“, en el que compararemos el campo “rank” que hemos calculado anteriormente con el parámetro “top N“:
7. Añadimos el nuevo campo calculado “top rank N” a la caja de filtros, y marcamos “Verdadero” para que sólo muestre los top N usuarios que nosotros definamos mediante el parámetro que hemos creado anteriormente:
Resultado final
Después de todo este rollo, lo que obtenemos es un dataset, donde tenemos para cada día los top 10 usuarios con más tweets publicados:
En lo que llevo de tiempo utilizando Tableau, me parece bastante potente para hacer cosas sencillas, pero cuando quieres complicarte la vida, creo que es más sencillo pre-procesar tu dataset y dejar los datos preparados tal y como los quieres, antes que ponerte a hacer filigranas en el propio Tableau. Y más teniendo en cuenta, que no es especialmente rápido haciendo este tipo de cálculos.