martes, 10 de enero de 2017

Modelado de datos en Power BI

En anteriores post vimos como Power BI nos podía ayudar a analizar la información de nuestra cadena de bocadillos. Pero ¿Cómo llegamos a visualizar la información? Y lo más importante de todo: ¿Cómo hacemos que esta información sea manejable por el usuario? La respuesta siempre reside en la potencia de nuestro modelo.
Teniendo en cuenta el mismo modelo de negocio, nuestra cadena de bocadillos ha crecido y gracias a la ayuda de nuestros nuevos socios franquiciados, se ha expandido por algunas provincias de la península. Estos franquiciados funcionan de diferente manera que las tiendas propias y generan un beneficio a la matriz menor que las tiendas propias. ¿Quién será mejor vendiendo bocadillos, las franquicias o las tiendas propias? Veamos cómo montar el modelo para obtener respuestas.
Para poder realizar este ejemplo, contamos con tres tablas: La primera de ellas es un maestro de artículos; la segunda es maestro de tiendas; la tercera contiene los tickets de las tiendas.
En primer lugar lo que vamos a hacer es importar estas tablas a nuestro Power BI desktop. Recordemos que estás tablas pueden residir en multitud de orígenes de datos. En este caso, todos nuestros datos serán obtenidos desde un Excel.
Lo primero que debemos de hacer es presionar el botón “Get Data” y a continuación seleccionaremos el apartado File > Excel:


Seleccionamos nuestro fichero Excel y a continuación detectará las tablas que tengamos en nuestro Excel. Si los rangos de datos se han formateado como tablas, además de las hojas nos mostrará estas.



Seleccionaremos las tres tablas. Cuando seleccionamos alguna de ellas, en el panel de la derecha, se mostrará una vista previa. Hacemos click en “Load” y cargaremos nuestras tablas al modelo.


A continuación, haremos click en la parte de la izquierda, en el icono de tabla. Allí se mostrarán las tablas que hemos cargado.


A continuación, vamos a establecer las relaciones entre las tablas. Si PowerBI detecta nombres de columnas iguales, establece las relaciones entre las tablas. Para ver esta relación vamos al botón de relaciones:


Como vemos, ha relacionado la tabla Ventas con Articulos y con Tiendas. A continuación podemos empezar a establecer cuáles son los tipos de datos para las columnas.
Comenzamos con Ventas:
En las ventas, vemos que ha detectado IDVenta, Ticket y Cantidad como una métrica. Al ser un tipo númerico, PowerBI toma la columna como medible. En este caso, no nos va dar ninguna información sumar el identificador de la venta ni el identificador del ticket. Convertiremos dichas columnas en tipo texto para que no las tome como métrica.
Para hacer este paso, volvemos a la vista de tabla, seleccionamos la columna IDVenta y cambiamos el tipo a “Text”:


Repetimos el mismo paso para Ticket. Además, podemos apreciar que no tenemos precios de venta en la tabla de ventas. Vamos a utilizar formulas DAX para obtener el dato (que reside en la tabla Articulos). DAX es un lenguaje de expresiones que nos va a permitir realizar diferentes cálculos. Este lenguaje, aunque tiene una sintaxis parecida al lenguaje de formulas de Excel, es mucho más complejo y está orientado a la realización de cálculos complejos. Hablaremos de él en próximos posts.
Para recuperar los precios, realizaremos lo siguiente. Crearemos una nueva columna en la que pondremos las siguiente fórmula.


RELATED (Articulos[PVP)
Related busca una columna en otra tabla relacionada. Al haber una relación puede traer la columna como lo podríamos hacer con un BUSCARV en Excel.
Repetimos la misma operación para las columnas Articulos[PVP Franquiciado] y Tiendas[Es Franquicia]. Renombramos las columnas haciendo click derecho sobre ellas > Rename y les ponemos nombre que los identifique correctamente.
El resultado es el siguiente:


A continuación, vamos a definir el PVP que tenemos que utilizar. Si la tienda es Franquicia, utilizaremos PVP franquicia y si no, utilizaremos PVP. Introducimos una nueva columna con la siguiente fórmula:
PVP Final = IF(Ventas[Es Franquicia]=”Si”;Ventas[PVP Franquicia];Ventas[PVP])
Crearemos otra columna con la venta, que será el PVP Final * Cantidad:
Venta = Ventas[PVP Final]*Ventas[Cantidad]
Una columna, que si es pago con tarjeta, perderemos un 0,01% de la venta en concepto de comisiones:
Comision Tarjeta = Ventas[Venta]*0,01
Obtendremos también los beneficios que se obtienen por producto y, como hemos hecho en con los PVP, obtendremos cual obtener.
Beneficio = RELATED(Articulos[Beneficio])-Ventas[Comision Tarjeta]
Beneficio a matriz = IF(Ventas[Es Franquicia]=”Si”;RELATED(Articulos[Beneficio Franquiciado])*Ventas[Venta];0)
Beneficio Tienda Final = IF(Ventas[Es Franquicia]=”Si”;Ventas[Beneficio]-Ventas[Beneficio a matriz];Ventas[Beneficio])
A continuación, esconderemos las columnas que no necesite el usuario. Estás serían los identificadores que tenemos en la tabla de Ventas y las columnas auxiliares que hemos recuperado. Para esconder una columnas, hacemos click en la cabecera > Hide in Report View. El resultado obtenido es el siguiente (en gris las columnas escondidas):


Por último crearemos las métricas.
Para crear una métrica, tenemos que hacer click en el botón “Create Measure” y escribir la fórmula de la nueva métrica.


Crearemos las siguientes métricas:
Numero de Tickets = DISTINCTCOUNT([Ticket])
Total de Ventas = SUM(Ventas[Venta])
Beneficio Matriz = SUM(Ventas[Beneficio a matriz])
Beneficio Tienda = SUM([Beneficio Tienda Final])
Creadas las métricas, vamos a la vista de Reporte. En la parte de la derecha podemos ver los campos disponibles para el usuario. Hay que hacer notar que es importante eliminar aquellos campos que no nos van a aportar o que son repetitivos.


Ahora jugando un poco con los campos podemos hacer cosas como estas:

En este post hemos visto como:
  • Es importante trabajar el modelo. No nos debemos de limitar a tener una sola tabla con todo junto. Separemos las diferentes entidades y apoyémonos en ellas para obtener los datos que necesitamos para el análisis.
  • Establezcamos los tipos de datos correctos. Nunca sumariamos dos números de teléfono, al igual que la suma de dos identificadores no nos aporta nada.
  • Dejemos disponibles solo aquellos datos que son relevantes para el análisis. Escondamos identificadores o columnas recurrentes
  • Convirtamos aquellas columnas de datos en métricas. Ayudará al usuario a saber qué columnas se pueden medir.