Power BI - Formato de Texto con DAX
Javier Ríos

Javier Ríos

Business Intelligence Consultant | Marketing Expert | Data Specialist

Otros Artículos:

Formato de Texto con DAX

Compartir en linkedin
LinkedIn
Compartir en facebook
Facebook
Compartir en twitter
Twitter
Compartir en whatsapp
WhatsApp

Power BI es una gran herramienta para la visualización de los datos. Dispone de muchas y diversas visualizaciones que se adaptan prácticamente a cualquier necesidad y, periódicamente, va introduciendo mejoras para implementar nuevas características muchas veces requeridas por la inmensa comunidad de usuarios.

No obstante, en ocasiones nos encontramos con alguna característica necesaria para nuestros diseños que no ha sido todavía implementada para la cual no hay aparentemente solución a corto plazo. Es en esos momentos en donde la creatividad y el conocimiento de la herramienta y de DAX pueden ayudarnos a sortear estos obstáculos.

Hoy os presento un caso particular en donde un cliente necesitaba un formato específico para parte del texto de una tabla. Entre las opciones de formato que nos ofrece Power BI para esta visualización no tenemos la de establecer un formato específico a parte del texto de ciertas casillas. Tampoco existe un DAX para dar formato. Entonces… ¿se puede realizar? ¡Ahora lo veremos!

Entender la necesidad

Primero, vamos a ver la necesidad. El cliente necesita que realicemos una visualización donde poder ver la planificación semanal de su plantilla de profesores. Necesita obtener algo así:

Power BI DAX Formato Texto Objetivo

Como se puede observar, tenemos 2 temas que, de entrada, no parecen factibles de realizar en Power BI:

  • La casilla tiene parte del texto en negrita y parte del texto normal
  • La casilla distribuye el texto en 2 líneas separadas (horario arriba, materia debajo)
 

Si rebuscamos entre las posibilidades de formateo del visual, obviamente no encontraremos nada por el estilo. 

La primera posible solución que me vino a la cabeza fue insertar códigos HTML como <b>, <i>, <p>, <br /> en el texto de la casilla pero no funcionó ya que Power BI no los interpreta como código sino como texto. 

Después intenté también utilizar códigos de caracteres especiales de lenguaje web dentro del texto como &nbsp; o &#224; pero tampoco funcionaba. Fue en este momento en donde me acordé de una función de DAX capaz de traerme prácticamente cualquier caracter Unicode lo que, virtualmente, me abriría la puerta a una solución: UNICHAR()

¿Qué es Unicode?

Unicode es un estándar de codificación de caracteres universal que define cada carácter o símbolo de casi cualquier alfabeto mediante un identificador numérico único. Por lo tanto, el caracter «A» en Unicode sería «41». Unicode recoge además un código específico para todos los Emojis, símbolos estadísticos, símbolos matemáticos… y es justo aquí donde llega a nuestro rescate.

Entre los símbolos codificados existen unas series matemáticas que simulan las letras y números en negrita o cursiva en los estilos serif y sans serif… ¡y eso es todo lo que necesitamos!

¿En qué consiste la solución?

Lo que vamos a hacer es sustituir cada caracter «normal» que deseemos por su equivalente Unicode Negrita, que es el formato que necesita el cliente. Para ello utilizaremos la función SUBSTITUTE() y UNICHAR() juntas. Es decir, vamos a realizar un formato de texto con DAX.

Pero algo que será fundamental es sabar qué carácteres queremos sustituir y su equivalente Unicode. Para ello, existen páginas como https://yaytext.com/es/ que permiten introducir un texto y ver las posibles variantes del mismo:

Power BI DAX Formato Texto Yaytext

En este caso, el estilo que me interesa es el «Negrita (serif)». Para saber qué código Unicode corresponde a cada letra, copiaremos cada letra del resultado y lo pegaremos en un buscador de códigos Unicode como https://unicodelookup.com/, donde el código que nos interesa es el «Dec» (de decimal):

Power BI DAX Formato Texto Unicode-Lookup

Implementación práctica

Ahora es el momento de entender la solución propuesta para realizar el formato de texto con DAX. La siguiente es la tabla de los datos que tenemos originalmente:

Power BI DAX Formato Texto Tabla Inicial

Existen muchas formas de abordar la solución pero, en mi caso, como únicamente necesito sustituir los números del 0 al 9 he optado por crear una columna y utilizar un simple código que, de forma iterativa, busca uno a uno los diferentes caracteres que queremos sustituir y los va cambiando por sus equivalentes en negrita mediante código Unicode:

				
					SUSTITUIR = 
VAR S0 = SUBSTITUTE(Principal[HORARIO],"0",UNICHAR(120812))
VAR S1 = SUBSTITUTE(S0,"1",UNICHAR(120813))
VAR S2 = SUBSTITUTE(S1,"2",UNICHAR(120814))
VAR S3 = SUBSTITUTE(S2,"3",UNICHAR(120815))
VAR S4 = SUBSTITUTE(S3,"4",UNICHAR(120816))
VAR S5 = SUBSTITUTE(S4,"5",UNICHAR(120817))
VAR S6 = SUBSTITUTE(S5,"6",UNICHAR(120818))
VAR S7 = SUBSTITUTE(S6,"7",UNICHAR(120819))
VAR S8 = SUBSTITUTE(S7,"8",UNICHAR(120820))
VAR S9 = SUBSTITUTE(S8,"9",UNICHAR(120821))
RETURN
S9
				
			

Nuestra tabla ahora queda así:

Power BI DAX Formato Texto Formateado

Obviamente, si necesitáramos modificar muchos más caracteres, el enfoque sería otro para simplificar el código en la medida de lo posible. 

Ahora que ya tenemos el horario en negrita, queremos tener en un solo campo tanto el horario en negrita como la materia, en este caso sin negrita y en una línea distinta. Para ello creamos una nueva columna donde uniremos ambas columnas y utilizaremos entre ellas el caracter UNICHAR(10), que genera un salto de línea:

				
					Texto-Formateado = Principal[SUSTITUIR] & UNICHAR(10) & Principal[CONCEPTO]
				
			
Power BI DAX Formato Resultado

Vemos que en el resultado nos aparece todo en la misma línea pero, una vez llevemos este campo a la tabla o matriz mostrará la información tal y como la necesitamos.

Power BI DAX Formato Situación General

Conclusión

Como indicaba anteriormente, UNICHAR() no sólo puede utilizarse para insertar caracteres especiales, también Emojis entre otros. Es decir, podríamos utilizar listados como los que encontramos aquí para obtener el código de banderas de cualquier país, flechas, señalética, caras… las posibilidades son casi infinitas y permiten dar un toque original muy visual a cualquier diseño sin necesidad de preparar y cargar cada una de las imágenes. Si se utiliza este recurso, es importante recordar que los códigos que utilizamos en UNICHAR() deben ser decimales, así que en caso de códigos Hexadecimales es necesario realizar su conversión.

UNICHAR() y un poco de imaginación sin duda pueden abrir las puertas a soluciones de diseño más avanzadas y completas para nuestros desarrollos. ¿Qué uso se te ocurre a ti?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Business Data Master Logo

No te pierdas el

WEBINAR
Gratuito

Explicaremos en detalle los contenidos y objetivos del Business Data Master

29/11/2021

18:30 (GTM+1)

Online

BUSINESS DATA MASTER

* Tu información será utilizada exclusivamente para contactarte en relación al Business Data Master. No hacemos spam ni compartimos datos con terceros.