4–6 minutos

– Todo el mundo habla de TMDL, ¿por qué?
+ Porque es la magia de Power BI

Desde hace poco se habilitó una nueva ventanita en Power BI Desktop, la de TMDL view, que esto ha sido una revolución en tareas de automatización y manipulación de modelos semánticos. A resumidas cuentas, en el ultimo año ha habido muchos cambios en la manera de interactuar con la estructura interna de Power BI (DAX query view, grupos de calculo, la vista de modelo…) que nos van permitiendo tener un enfoque más accesible como desarrolladores a modificar y crear características internas de los informes, y TMDL view es una nueva herramienta que tenemos que sumar al arsenal.

Podría seguir con mis cábalas sobre que es TMDL, y hacer una entrada larguísima, pero justo ahora, mi colega Monica Mesa tiene unos artículos excelentes donde os hace un viaje de introducción completísimo: TMDL en Power BI, os animo a que les dais un ojo, y luego volvéis aquí (por favor).

Un ejemplo de las tareas que me estoy ahorrando cada día es replicar una tabla de calendario en un modelo nuevo.

Vamos al trapo, las tablas calendario

Las tablas calendario son, sin duda, uno de los elementos más fundamentales en cualquier informe de Power BI. Y existen de muchos tipos diferentes, según la lógica de negocio con la que trabajéis, dependiendo si necesitáis años fiscales, calendarios ISO, semanas, offsets… Uno de los grandes que toca mucho del tema es Rick De Groot, que tiene un articulo que la verdad, es un must leer: Create Date Table or Calendar in Power Query M.

Ejemplos de calendarios exóticos: para informes financieros y de stocks, que me pidieron crear unos periodos exclusivos para la Apertura y Cierre del año como si fueran dos meses más, vamos un año con 14 meses.

A demás, también tenemos dos maneras de trabajar con estas, cargar la tabla calendario como una tabla calculada usando DAX, o la manera que yo personalmente uso, creando la tabla en Power Query como una tabla más. De echo, todos los que nos hemos tenido que enfrentar repetidamente a esto tenemos un script ahí bien guardadito, el GOD SCRIPT, que reutilizamos en cada informe que tenemos.

Yo tengo uno bastante básico con semanas ISO que modifiqué ligeramente a partir del que proporciona Rick de Groot en la entrada que mencioné. Así que, si quieres realizar las mismas tareas que describiré a continuación, aquí tienes el script:

Si… aquí irán guardadas las cosas molonas.

Bueno vale. ¿Y TMDL?

Ahora que tienes tu tabla de calendario para todos los informes, el verdadero dolor de cabeza viene cuando cargas la tabla en Power BI. Porque me ha pasado y te ha pasado, con las ansias dices: ya tengo el calendario voy a montar la tabla, arrastras el campo Nombre del mes y el año empieza en Abril.

La maldita ordenación de las columnas. Cada vez que creas una tabla calendario, los meses y días, se ordenan alfabéticamente, porque son campos de tipo texto, y cada vez que haces esto tienes que irte al modelo, y poner que se ordene esa columna por una columna de índice que te diga que ordenación tienen. Normalmente esto es la columna que identifica numéricamente los meses del año, que van de 1-12. Ídem para los días de la semana, y prácticamente cualquier periodo de fechas textual que quieras definir dentro del calendario.

Marcar la tabla como tabla de fechas que aunque todos sabemos que esto es una buena practica, ¿Sabe alguien mas, aparte de los dioses de DAX decirme porqué?

Knowing the why is always better than blindly following a rule.

La fecha expresada como miércoles 2 de enero de 2025. Otra cosa que me da TOC, no sé porqué, es que el formato por defecto para las fechas es el long date. Y esta es una propiedad del modelo semántico que no se puede cambiar en ningún otro lado.

Otra cosa que echo de menos, es que para el primer informe que hice, generé algunas medidas contextuales para hacer gráficas con títulos dinámicos, entre otras cosas como grupos de cálculo, y jerarquías. Y yo odio tener que rehacer cosas, soy un loco de la reutilización.

Esta imagen refleja una faceta mia.

La alternativa que había, era la magia oscura de los scripts de C# meter en un script la creación de la tabla en DAX, las medidas extras que querías agregar, y sinceramente quiero imaginar que si se podia, pero deberíamos añadir en el script las propiedades del modelo semántico que quisiéramos cambiar como la ordenación, formato de datos… Un fregado, donde no me da la vida meterme.

Y aquí es donde aterriza la TMDL view. Porque simplemente, con que hagamos una vez la faena podremos reutilizar un elemento de nuestro modelaje en otros informes. Y no hace falta que seamos unos gurús del lenguaje TMDL, podemos hacer la modelización en Power BI (aunque en TMDL view hay propiedades que no son editables en la UI), coger el script de TMDL, pegarlo en qualquier informe de Power BI, y voila, un elemento idéntico al que tenemos en primer lugar.

Aquí os dejo un fragmento del script de TMDL en el que he cogido mi tabla calendario y retocado muchas cosas, os las listo:

  • Añadido un folder para guardar medidas.
  • Creado jerarquías
  • Ordenado columnas en función de otras
  • Marcado la tabla como tabla de fechas
  • Ocultado algunas columnas
  • Indicado algún que otro formato de datos exótico, como los inicios y fin de mes con formato yyyy-mm para «simular» un periodo continuo y poder usar líneas de referencia,

Como veis, un poco de todo, para que veáis muchas de las propiedades posibles de editar. Os animo a que probéis de cargar primero la tabla calendario sin nada, y que pongáis el script de TMDL y luego comparar las diferencias entre los dos scripts de TMDL.

Toca entonces archivar ese script de M… Larga vida TMDL

Deja un comentario