Dibujando Letras en Tableau

Equations to draw letters

Dibujando Letras en Tableau - Drawing Letters in Tableau

English version is here

Poco a poco sigo avanzando en mi empeño por entender las posibilidades que ofrece Tableau más allá del “Show me”. Inspirado por la serie de Ken Flerlage de “la X y la Y“―pero no todavía al nivel de las ecuaciones paramétricas―  me lanzo aquí a diseñar una aplicación para usar Tableau como lienzo en el que escribir sin las restricciones de tamaño de los cuadros de texto.

Objetivo:
  • Introducir un texto (o, mejor dicho, una palabra de nueve letras o menos) y dibujarla, letra a letra, como una combinación de fórmulas de Tableau.

Proceso:

  1. Obtener las ecuaciones para dibujar las distintas letras en una única posición teórica―plantilla usando Excel.
  2. Transportar las ecuaciones a las distintas posiciones usando Alteryx.
  3. Crear un libro de trabajo de Tableau que sirva de plantilla.
  4. Generar las distintas fórmulas en el libro de Tableau usando Alteryx.

Busando Ecuaciones para Dibujar Letras

  1. Obtener las ecuaciones para dibujar las distintas letras en una única posición teórica―plantilla usando Excel.
    1. Obtener un modelo de ecuaciones.
    2. Descomponerlo en los trazos necesarios y compatibles con Tableau.
    3. Reconvertir las ecuaciones necesarias.

La página de “Alphabet” de Desmos fue la solución a mis plegarias.


Equations to draw letters
Ecuaciones de https://www.desmos.com/calculator/l8u2vigxyb

Algunas de las ecuaciones presentes en la página de Alphabet  no son compatibles con la manera de dibujar las marcas de Tableau.


Ecuación para dibujar la letra “C” – incompatible con la manera en que Tableau dibuja las marcas.

La ecuación original: \[\left(x-1\right)^2+\left(y-1\right)^2=1\left\{x\le1.75\right\}\]
se puede descomponer en dos trazos para y: \[ y = 1+\sqrt{1 – \left(x-1\right)^2} \left\{x\le1.75\right\}\]\[ y = 1-\sqrt{1 – \left(x-1\right)^2} \left\{x\le1.75\right\}\]
en los que ese “1.75” hace referencia a la posición de X -que habrá de variar según la posición de cada letra.

En Excel (y con la ayuda de papel y lápiz para despejar la x y la y), con un poco de paciencia, reconvirtiendo todas las ecuaciones en función de la posición de x:
Muestra de las ecuaciones de los distintos trazos — click para descargar todas.

Primera Incursión en Alteryx - preparación.

  1. Transportar las ecuaciones a las distintas posiciones usando Alteryx.
    1. Decidir el número de letras con el que trabajar.
    2. Procesar la plantilla de trazos y convertirla en fórmulas para Tableau.
    3. Repetir el proceso para cada una de las letras del punto (1).
Restringiendo el  número de letras a 9, con estas características (start y end definidos en función de las ecuaciones originales, con un ancho máximo de letra de dos unidades, y de la posición en las que aparecerán en el lienzo de Tableau).
Tabla con la posición de las distintas letras.
Posiciones de las letras
A partir de la plantilla obtenida anteriormente (paso 1.3), y usando Alteryx para automatizar el proceso.
Procesando la plantilla para obtener las fórmulas para Tableau.
De modo que, para cada letra, se obtiene una colección de cinco fórmulas, una por segmento necesario (algunas letras se pueden dibujar con un único trazo “i”, mientras que otras, como la “b” requieren hasta 5).
Resultado de aplicar el proceso a la plantilla original.
Combinando el número total de letras junto con la posición inicial y final (2.1) y el proceso desarrollado en Alteryx (2.2) para obtener el texto de 45 fórmulas, 5 por letra:
Combinando las posiciones originales de las letras con la plantilla de trazos.
Y el resultado:
Resultado de aplicar el proceso a la plantilla original con todas las letras — click para descargar el archivo de Excel.

Plantilla en Tableau

  1. Crear un libro de trabajo de Tableau que sirva de plantilla.
    1. Diseñar la fuente de datos.
    2. Bosquejo de la vista para dibujar las letras: fórmulas y cómputo de las mismas usando las agrupaciones generadas en el punto (1) como eje de las x .
    3.  Cálculo de las distintas letras (¿qué letras? ¿dónde?).

Mi objetivo es simplificar la fuente de datos original al máximo y manipular el número de puntos del trazado (y del eje de las x) empleando la capcacidad de Tableau de completar los datos.

La fuente de datos original:


Tabla con la posición de las distintas letras.
Fuente de datos inicial. Una única fila.

Tras una unión consigo misma:


Unión para generar dos filas.

Filas resultantes tras la unión.

Creando una fórmula cuyo valor varíe en función de la tabla (se podría parametrizar, pero por el momento voy a asignar un valor estático de 100):

Fórmula para generar valor mínimo y máximo.

y


Bins que van a determinar la posición de las letras.
En una hoja nueva:
  1. La agrupación generada anteriormente (padded) en detalle, para proporcionar la dimensión en la que generer los distintos cálculos de tabla.
  2. El campo calculado “t” que va a ser el “eje de las x” para la posición adecuada de las letras en las columnas. En este caso, ajustado con los valores 100 y 200 basados en la agrupación generada anteriormente (padded).
“t”~ Index & Size para posicionar las letras, calculada usando “padded”.
  1. Con “t” y “padded” ya en posición, no queda sino traer los campos calculados para los distintos trazos de las distintas letras. En este caso, uso como muestra los fragmentos de la primera letra. Todos los demás, los traeré posteriormente usando Alteryx.
  2. Cada uno de los trazos tiene que ser computado usando padded –tanto para t como para letter.
Preparando la hoja de trabajo – Click para ampliar.
Con esto estamos (casi) listos para automatizar el proceso.
Para el cálculo de las letras, se pueden combinar unos campos calculados:
  1. El primero, que he llamado “Name_letters“, se basa en un parámetro (en este ejemplo, puede ser un campo calculado que varíe en función de otras medidas como las ventas —ejemplo).
    Obtención del texto para dibujar basado en un parámetro. Se puede sustituir por un campo calculado variable en función de otras medidas, como por ejemplo aquí.
  2. A continuación, un campo calculado por cada letra. Como los distintos puntos no existen en la fuente de datos, sino que son generados al realizar las agrupaciones, para poder acceder a los distintos valores es necesario recurrir, de nuevo, a cálculos de tabla:
    Obtención de la primera letra–es necesario recurrir a cálculos de tabla.
    Variando la posición inicial del cálculo de tabla se pueden obtener las distintas letras.
  3. Por último, un campo calculado en función de la posición en el eje de las x para decidir qué letra dibujar en cada posición.
    Qué letra dibujar se decide en función de la posición en el eje de las x. Hardcoded.

Segunda Incursión en Alteryx y Últimos Toques en Tableau

  1. Generar las distintas fórmulas en el libro de Tableau usando Alteryx.
    1. Entendiendo los cambios entre las fórmulas obtenidas de Alteryx y la estructura de las fórmulas necesarias en Tableau.
    2. Transformando el texto en HTML y creando las fórmulas en el formato de Tableau.
    3. Actualizar la hoja de trabajo para que use todos los campos calculados creados, computados correctamente (usando padded).
    4. Workflow de Alteryx explicando los distintos pasos esbozados en 4.3.
La fórmula obtenida hasta ahora en Alteryx está en “texto” (plain text). Esto es útil únicamente para copiarla en una instancia abierta de Tableau al crear un campo calculado, pero no va a ser útil para generar programáticamente todas las fórmulas necesarias.
Fórmula en texto plano tal cual aparece en el flujo de Alteryx ahora mismo.
Útil únicamente para “cortar-pegar” en campos calculados de Tableau.
Fórmula como aparece en el XML del libro de trabajo.
En el XML del libro de trabajo, la fórmula está “traducida” a HTML (“>” se convierte en “>”). Además, este texto es únicamente la parte de la “formula”. Tableau necesita complementar esa información con el nombre del campo calculado, el alias (caption), el tipo,… y, al ser un cálculo de tabla, requiere instrucciones acerca de cómo calcularlos por defecto. Afortunadamente, todo esto se puede automatizar en Alteryx, usando una fórmula como plantilla.
Partiendo de la plantilla generada anteriormente (paso 2.3), y usando una tabla de referencia con los códigos HTML, es fácil reemplazar los valores que requieren transformación usando Alteryx y la herramienta “Find and replace”.
Convirtiendo a código HTML los caracteres necesarios.
Una vez obtenida la fórmula en HTML, es necesaria transponerla al libro de trabajo. Lo que se llama “XML hacking” puesto que trabajamos directamente con el XML del .twb en lugar de editarlo con la interfaz “drag&drop” de Tableau. Para facilitarlo, he edito primero el libro en un editor de textos, en el que creo una fórmula como plantilla basandome en los campos calculados en el punto 4.1.
Fórmula modelo.
Esta fórmula la podemos usar ahora como plantilla en Alteryx para ir actualizando y creando los “N” campos calculados (45 en este caso).
Extrayendo la fórmula modelo del libro de trabajo.
Y podemos ahora usar esta fórmula modelo para crear todas las fórmulas necesarias:
Generando el libro de trabajo con todas las fórmulas a partir del modelo. Descarga aquí el archivo de Alteryx.
Vuelta a examinar el XML del libro de trabajo. En este caso, la estructura de la hoja de trabajo:
La hoja en Tableau.
Al examinar la estructura en XML se encuentran tres secciones que tendremos que editar para incorporar todos los campos calculados:
Estructura de la hoja de trabajo en XML.
  1. Parece claro que, para incorporar más campos calculados, habrá que editar el “categorical filter”. En concreto, añadir tantas secciones “Groupfilter” como campos tengamos.
  2. En las filas (rows) tenemos los valores de medidas y en las columnas el campo “t” creado anteriormente.
  3. Para computar el rango entero de padded, hay que seleccionar la opción de “Mostrar filas vacías” del menú de Análisis > Diseño de Tabla.
Pero… ¡eso no es todo! Al desplegar el apartado de “Datasource dependencies” descubriremos que hacen falta dos entradas por cada una de los campos calculados que vamos a poner en la vista.
  1. El primero es idéntico al que ya hemos empleado en el apartado anterior y que contiene el nombre, alias, fórmula, etc.
    Definición del campo calculado, idéntico al ya calculado.
  2. El segundo, “column-instance“, contiene la definición específica, incluyendo cómo computar respecto a los distintos campos, para esta vista específica.
    Estructura específica para la vista actual, con el cómputo detallado.
Veamos cómo realizar todas las transformaciones necesarias en Alteryx: Primero, a partir del .twb (leído como .csv, sin delimitadores y concatenado en un único registro), extraemos la hoja de trabajo de ejemplo (llamada TEST en este caso).
Obtener la hoja de trabajo.
A continuación, actualizamos el filtro de “Nombre de medidas” para que contenga todas las deseadas:
Obtención del “groupfilter” actualizado.
En el apartado anterior se obtuvo la definición de los distintos campos calculados (con el nombre, alias, fórmula, etc) que es necesario traer de nuevo al libro de trabajo, pero esta vez a la hoja seleccionada:
Actualización de las definiciones de los campos calculados.
Estas definiciones no incluyen el cómputo de los cálculos de tabla con cada una de las dimensiones nuevas incorporadas en la vista actual. Esto aparece en el apartado de “column-instance”, que podemos actualizar:
Definición específica con el cómputo de los cálculos de tabla.
Por último, sólo queda restaurar los valores “placeholder” del libro de trabajo:
Restaurando el libro de trabajo.
y…. voilá, pasamos de tener una hoja de muestra con un cálculo a la hoja con todos los segmentos de todas las letras. Ya sólo falta cambiar el tipo de gráfico a línea y añadir “nombres de medidas” al color:
Voilá…ya sólo falta formatear un poco la hoja y…¡listo!
El workflow completo de Alteryx:
El workflow de Alteryx completo — click aquí para descargarlo.

Resumen

En este post he hecho mis primeros pinitos dibujando letras en Tableau; analizado un poco más la relación X-Y y las posibilidades que ofrece en Tableau; explorado los entresijos de los cálculos de tabla en una fuente de datos con dos únicos registros, al tiempo que comprobaba cómo Tableau entiende que deberían existir toda esa serie de puntos intermedios inexistentes tras establecer las agrupaciones (el “gap awareness” de Tableau).

Además, he introducido un par de apartados de la estructura del XML del archivo .twb y he creado, de manera programática, cerca de 50 cálculos (¡y mostrado cómo ponerlos en una hoja de trabajo!).

Algunos enlaces:

  1. La página de “Alphabet” de Desmos.
  2. Hoja de Excel con la plantilla de las fórmulas .
  3. Hoja de Excel con las múltiples letras.
  4. Archivo de Alteryx para combinar la plantilla con el listado de letras y posiciones.
  5. Archivo de Alteryx para procesar las fórmulas en texto plano a HTML.
  6. Archivo de Alteryx para combinar los distintos campos en una hoja de trabajo.
Espero que la lectura haya sido interesante. Cualquier comentario será bienvenido: