Optimización de Pasos en PowerBI

Es muy común, cuando entramos a trabajar en alguna empresa en la que todos sus reportes fueron creados por personal no relacionado a la informática, encontrar muchos puntos de oportunidad de mejora, esto se debe a que la mayoría de herramientas ofrecen cierto nivel de autoservicio (selfservice), pero esto desencadena una serie de ineficiencias en los reportes a medida que crecen los datos, ya que sin una metodología de desarrollo supone no tener un estándar y como único objetivo lograr que el reporte cumpla con lo solicitado por el negocio.

En PowerBI tenemos la opción de utilizar el motor de PowerQuery, para extraer, transformar y cargar datos de distintas fuentes, lo ideal es primero tener muy en claro cual queremos que sea el resultado final de las diferentes transformaciones que vamos aplicar a nuestra fuente de datos esto para evitar tener una lista excesiva de pasos.

Para este ejemplo tenemos una serie de datos de tipos de trabajo, ejemplo (Tipo 1, Tipo 2, Tipo 3,……Tipo N), ya que se encuentran repetidos y esto en una relación con una tablas de hecho nos daría como resultado una relación muchos a muchos, entonces la transformación es necesaria para crear una tabla catálogo y hacer una relación para normalizar el modelo.

Datos para ejemplo.

Los datos transformados quedarían de esta forma.

Notemos que para poder llegar al objetivo tuvimos que crear hasta 9 pasos, eso se puede evidenciar en el apartado de pasos aplicados, ahora imaginemos que no se acaba el asunto aquí y necesitamos seguir transformando esa fuente de datos, nos quedarían muchos pasos y si la fuente de origen crece eso aumenta el tiempo de procesamiento de los datos.

Eso lo podemos mejorar haciendo uso del editor avanzado de PowerQuery para poder englobar todos esos pasos en uno solo.

Aquí estamos haciendo uso de una función de lenguaje M, para poder pasar de 9 pasos a solo 1, nótese en la sección derecha de pasos aplicados como solo aparece un paso, ademas de usar un estándar de nombre descriptivo como buena práctica para saber que estamos haciendo.

Ahora vamos a ver la función en cuestión.

//Asignar tipos para normalización
#"Asignar Tipos" = Table.ReplaceValue(#"Tipo cambiado", each [job],
each if [job] = "housemaid" then "Tipo 1" 
else if [job] = "services"  then "Tipo 2"
else if [job] = "admin."  then "Tipo 3"
else if [job] = "technician"  then "Tipo 4"
else if [job] = "blue-collar"  then "Tipo 5"
else if [job] = "management"  then "Tipo 6"
else if [job] = "unemployed"  then "Tipo 7"
else if [job] = "retired"  then "Tipo 8"
else if [job] = "self-employed"  then "Tipo 9" 
else [job],Replacer.ReplaceValue,{"job"})

Hacemos uso de la función Table.ReplaceValue(Puntero, each [columnaObjetivo], each if [columnaObjetivo] = «valor buscado» then «resultado» else «otro valor» o el valor de la columna )

Analicemos, el primer parámetro es el puntero propio del lenguaje M, para saber después de que paso se debe aplicar esta transformación, luego el «each» hace referencia a que cada valor en la columna que vamos a procesar, luego hacemos las comparaciones, para cada si en la columna que vamos a procesar encontramos el valor buscado entonces asignamos este nuevo valor, ahora si no encontramos el valor que es el último else resaltado en negrita, tenemos dos opciones, o asignamos un valor deseado o simplemente dejamos el valor de la columna que el motor está evaluando en ese momento.

Este es solo uno de los muchos escenarios en los que podemos optimizar pasos en un reporte para optimizar sus tiempos de procesamiento, no olvides que tenemos servicios de consultorías por servicios profesionales en los cuales podemos aclararte personalmente alguna duda que tengas sobre la herramienta de PowerBI, contacta con nosotros será un gusto ayudarte.