¡Hola de nuevo! Ya que mi lesión en el hombro no me deja descansar y dormir, aquí seguimos explorando las diferentes posibilidades que nos aporta la nueva vista TMDL de Power BI.


Si te perdiste las entregas anteriores, te recomiendo que les eches un vistazo antes de continuar para que no te pierdas nada de nada.

Vista TMDL I

Vista TMDL 2

Vista TMDL 3

Vista TMDL 4

Si en las entradas anteriores vimos como modificar, añadir y documentar nuestro modelo semántico, en este post vamos a ver cómo podemos “limpiar” nuestro modelo de elementos innecesarios que lo único que nos hacen es ocupar espacio y quizás nos pueden llegar a obligar a realizar un upgrade de licenciamiento, lo que significa un coste mayor que vamos a tener que pagar nosotros y no nuestro querido vecino.

Bien, dicho esto, vamos a usar la vista TMDL y la herramienta externa Measure Killer creada por Gregor Brunner y su equipo, que podéis descargar desde la página oficial la aplicación que mejor os venga, ya que hay una gratuita y otra de pago con más funcionalidades. En mi caso, estoy para esta demo con la gratuita. Os dejo el enlace aquí (https://en.brunner.bi/)

Una vez descargada la aplicación e instalada en nuestro equipo, abrimos Microsoft Power BI Desktop con el modelo semántico que deseemos optimizar. Una vez abierto, vamos a la opción “Herramientas Externas” en la cinta de opciones:

 

 

Y se nos abre la siguiente ventana:

 

 

A continuación, hacemos clic en el primer icono que nos dice “Single model and report”: 


 

 

Y como tenemos el desktop abierto, automáticamente nos reconoce el modelo semántico. Si tuviésemos varios modelos abiertos, tendríamos que seleccionar el modelo deseado.

 

 

Una vez seleccionado el modelo semántico, hacemos clic en “Next” y se nos abre la aplicación.

 

 

Como podemos ver, no vemos nada 😊. Para que analice nuestro modelo semántico, hacemos clic sobre el botón “Run” de la parte superior izquierda:

  

 

Y nos arroja la siguiente pantalla:

 

 

Vamos a ir analizándola por partes. En la parte superior izquierda, nos muestra un pequeño resumen con el log desde a qué modelo estamos conectados como el tiempo que ha tardado.

 

 

 

Justo en la parte inferior, vemos otra ventana que nos da un pequeño resumen sobre nuestro modelo justo debajo de la frase

“No soy malo. Estoy aquí para matar esas 129 columnas”

 

 

Vemos que nos dice que el 84% del tamaño del modelo no se está utilizando. Entonces, como digo siempre, ¿para qué nos lo estamos trayendo? También nos dice que 4 de las métricas del informe tampoco las estamos utilizando. También podemos ver que las relaciones del modelo y el grado de cumplimiento de las mejores prácticas. Todas las opciones contienen su propio árbol que podemos desplegar y analizar, pero no es el caso de este post.

En la parte central, vemos todas las columnas del modelo con su estado de uso.

  • Las columnas en rojo tienen un estado de Unused (No utilizadas), lo que indica que están ocupando espacio sin aportar valor al modelo.

  • Las columnas en blanco tienen un estado de Used (Usadas), lo que indica que están siendo referenciadas.

 

 

 

Una vez visto muy por encima la información que nos ha devuelto, vamos a filtrar única y exclusivamente las columnas que no están siendo utilizadas. Para ello hacemos clic sobre el botón de filtrar “Unused”:

 

Y vemos que las columnas que visualizamos ahora mismo son únicamente las columnas que no se están usando en el modelo:

 

Ahora, en las opciones superiores, vemos la pestaña denominada “Export clean TMDL”:

 

 

Y se nos abre la siguiente ventana en la cual tenemos 3 acciones diferentes como son:

  1. Copiar al portapapeles

  2. Exportar a un .zip

  3. Exportar a una carpeta

 

 

Vamos a seleccionar en este caso copiar al portapapeles y nos vamos a ir a la vista TMDL de Power BI Desktop y pegamos el código TMDL que nos ha generado la aplicación “Measure Killer”:

 

 

 

Si nos fijamos bien en la parte de la derecha, es decir, la vista de tipo “pergamino” donde visualizamos todo el código, vemos que es kilométrica. No os asustéis, vamos a centrarnos en una única tabla y vamos a ver qué es lo que está ocurriendo. Subimos el scroll hasta arriba del todo y lo primero que vemos es lo siguiente:

createOrReplace

 

    model Model

        culture: es-ES

        defaultPowerBIDataSourceVersion: powerBI_V3

        sourceQueryCulture: es-ES

        dataAccessOptions

            legacyRedirects

            returnErrorValuesAsNull

   

 

createOrReplace: como ya hemos visto, indica que el código creará un nuevo modelo o reemplazará uno existente.

model Model: Aquí se está declarando un modelo tabular llamado Model.

culture: es-ES: Define la cultura del modelo, en este caso, español de España. Esta configuración afecta al formato de los números y fechas.

defaultPowerBIDataSourceVersion: powerBI_V3: Define la versión de la fuente de datos predeterminada para el modelo en Power BI. powerBI_V3 es la tercera versión del conector de Power BI.

 

sourceQueryCulture: es-ES: Establece la cultura para las consultas de datos dentro del modelo.

 

dataAccessOptions: Esta sección define opciones avanzadas de acceso a datos.

 

legacyRedirects: Habilita el soporte para redirecciones de datos heredadas.

 

returnErrorValuesAsNull: Cuando una consulta de datos devuelve un error, esta opción hace que el modelo lo interprete como NULL en lugar de lanzar una excepción.

 



Antes de seguir explorando el código, vamos a sacar a otro script TMDL la tabla DimProduct para ir comparando.



Script de Measure Killer:

 

 

 



Script de la tabla DimProduct:

 




Bien, vamos a mirar la primera columna en ambos scripts:

 

 



Si comparamos los datos de ambos scripts, vemos que son exactamente iguales, es decir, no hace nada nuevo. Seguimos con la siguiente columna:

  




Como podemos ver, la segunda columna no es la misma en ambos scripts. ¿Por qué? ¿Qué está ocurriendo? Lo que está pasando es que la columna “ProductLabel” no está siendo usada en el modelo, lo cual ha detectado la aplicación “Measure Killer” y por tanto en el script no la incluye y cuando apliquemos los cambios en el modelo, la columna “ProductLabel” dejará de existir liberando el espacio correspondiente. ¿Qué os parece? A mí una auténtica maravilla.


Ahora, vamos a aplicar los cambios en el modelo con el script de la aplicación y esperamos a que termine la ejecución:

  



Ahora abrimos una nueva ventana de TMDL y arrastramos la tabla DimProduct:

 

 

 



Y vemos que la segunda columna ya no es “ProductLabel” sino “ProductSubcategoryKey” igual que en el script que nos ha arrojado Measure Killer.


Si ahora volvemos a “Measure Killer” y volvemos a darle a “Run”.

  



Ahora ya no nos devuelve ninguna línea en rojo, el tamaño del modelo está siendo usado al 100% y no tenemos nada que no se esté usando, es decir, es un modelo optimizado:

 


 
¿Qué os parece esta nueva aplicación de las vistas TMDL junto con Measure Killer? Es un triple en toda regla en la optimización de los modelos, que nos agiliza mucho y nos ahorra muchísimo tiempo en eliminar elementos innecesarios.

¡Gracias Gregor Brunner!

¡Nos vemos en los datos!