Dice la teoría que un gráfico de Pareto nos permite ver que un grupo poco numeroso de elementos afectan a un mucho de los resultados.
Por ejemplo un 20 % de clientes representan un 80 % de las ventas.
Vamos a ver si esto es verdad y cómo podemos hacer un gráfico de Pareto con Power BI.
Anticipo que en Excel son mucho más fáciles de crear, y esperemos que en una próxima actualización o con un visualizador especial sean fáciles de calcular y representar.
También quiero decir que he tomado muchas ideas prestadas de diferentes web, y al final he combinado lo que me parece más interesante para obtener lo que quiero:
Preguntar al Power BI qué % de clientes representan un determinado % de ventas que debo escoger de un segmentador.
Gráfico de Pareto
Vamos a crear una nueva tabla con
Y ponemos
Clientes = SUMMARIZE(Ventas;Ventas[Cliente];»Ventas cliente»;[EUR])
Esto nos crea una tabla con el total de ventas por cliente, al que podemos dar formato con separador de miles, y ordenamos por Ventas cliente
Añadimos una columna con el total de ventas de todos los clientes.
Ventas Totales = CALCULATE( SUM( Clientes[Ventas cliente] ) ; ALLSELECTED( Clientes) )
Y otra columna con el acumulado de ventas acumuladas de cada fila
Ventas acumuladas = SUMX(FILTER(Clientes; EARLIER(Clientes[Ventas cliente];1)<=Clientes[Ventas cliente]);Clientes[Ventas cliente])
Para más información sobre la función EARLIER os remito a mi entrada Función EARLIER, o sea, esta fila
Solo nos falta añadir una columna con él % de ventas sobre el total
% Ventas s/total = Clientes[Ventas Acumuladas]/Clientes[Ventas Totales]
Y le damos formato porcentaje
Ahora ya podemos hacer el grafico de Pareto
Vamos a Informes, añadimos un gráfico de columnas agrupadas y líneas y le ponemos
Y aparece un gráfico sin orden ni concierto
Hacemos clic en los tres puntos de la parte superior derecha del grafico
Y elegimos ordenar por ventas cliente. Ahora el grafico tiene más sentido
Un primer grupo de clientes, visualmente menos de la mitad, llevan al 60% de las ventas
Porcentaje de clientes que corresponden a un determinado porcentaje de ventas
Queremos ir un poco más lejos: saber la dependencia que tenemos de un grupo de clientes
Un determinado porcentaje de ventas, qué porcentaje de clientes representa.
Añadimos una columna para numerar cada cliente sucesivamente: la posición que el cliente ocupa en la lista
Clientes posición= COUNTROWS(FILTER(Clientes; EARLIER(Clientes[Ventas cliente];1)<Clientes[Ventas cliente]))+1
Otra columna para saber cuántos clientes tenemos en total
Clientes filas = COUNTROWS(Clientes)
Y otra columna para calcular el %
% Posición = Clientes[Clientes posición]/Clientes[Clientes filas]
No olvidemos dar formato porcentaje
Tendremos una tabla con
Si lo ponemos en una visualización en modo tabla con
Y ordenamos por Ventas cliente, tendremos
Es fácil seguir esta tabla y si nos ponemos en la fila del 81 % de las ventas, a la derecha vemos que esto representa el 57 % de los clientes
Seleccionar un porcentaje de ventas y obtener el porcentaje de clientes que las representan
Ahora viene el último paso un poco más complicado. Queremos un segmentador que nos permita indicar un % de ventas y que el Power BI nos responda con él % de clientes que lo representan.
Con Inicio, Especificar datos vamos a crear una tabla como la que sigue
La nombramos a pie de pantalla como % de ventas, Aceptamos
Y cambiamos el campo a tipo de datos número decimal
Cerramos y aplicamos
Ya podemos construir el segmentador con % de ventas
Y obtenemos
Ahora solo nos falta que en la tabla clientes, conste a qué posición del rango de % está cada cliente
Esto lo haremos con una nueva MEDIDA
% Clientes = LOOKUPVALUE(Clientes[% Posición];Clientes[% Ventas s/total];MINX(FILTER(Clientes;Clientes[% Ventas s/total]*100>MAX(‘% Ventas'[% Ventas]));Clientes[% Ventas s/total]))
No olvidemos darle formato porcentaje.
Usamos la función LOOKUPVALUE que es similar al BUSCARV del Excel
Le decimos, devuelve el % de posición:
LOOKUPVALUE(Clientes[% Posición];
Buscando en la columna % ventas s/total:
LOOKUPVALUE(Clientes[% Posición];Clientes[% Ventas s/total]
El valor que este entre el mínimo y el máximo del valor seleccionado en la tabla % Ventas
MINX(FILTER(Clientes;Clientes[% Ventas s/total]*100>MAX(‘% Ventas'[% Ventas]));Clientes[% Ventas s/total]
Ahora añadimos una tarjeta de una sola fila con
Y si seleccionamos un % de ventas en el segmentador, nos responde con el % de clientes que nos llevan a esa suma
Por ejemplo en nuestro caso un 80% de las ventas es una 57,14 % de clientes
Cosa que ya vimos al observar la tabla
Mejoremos el grafico
Por último vamos a añadir Información sobre herramientas para mejorar el grafico
De modo que si nos situamos sobre un cliente vemos
En ese punto llevamos el 81,10% de las ventas lo lleva el 57,14% de los clientes
Resumiendo: en nuestro ejemplo el 80% de las ventas dependen de la mitad de los clientes (57%).
No de un 20 % de clientes….pues mucho mejor para nosotros.
En esta entrada hemos visto conceptos muy interesantes
- El total acumulado o running total
- La creación de una tabla de valores
- La función LOOKUPVALUE, equivalente al BUSCARV de Excel
Espero que os sea de utilidad y si queréis con los botones de la parte inferior podéis compartir
Hola, soy Jose.
En relación al gráfico de Pareto. ¿cómo se podría relacionar con la tabla Calendario?
Gracias.
hola, soy Víctor
Con relación como lo puedo vincular a un filtro de fecha que varié según el periodo de tiempo que elija. gracias por tu ayuda
Hola, muy interesante, por favor me puede indicar si existe alguna forma de segmentar por años, asi mismo por asesores, este analisis es muy importante para el area comercial, de antemano muchas gracias
Genial tu tutorial me fue de gran ayuda, ahora como puedo saber si la posición del 80/20 cambia mes a mes? capaz vincular a un filtro de fecha(mes).
Gracias!..
Gerardo Cáseres H. Costa Rica
Hola!!!
Como el conocimiento es de la humanidad y cuando uno tiene un aporte, creo que debe facilitarlo a los demás.
Les comento que yo resolvi el problema del pareto para el tema de la fecha así:
construi la tabla primero
PARETOARTICULOS = SUMMARIZE(FacturaDetalle, FacturaDetalle[ArticuloCodigo], FacturaDetalle[ArticuloDescripcion],FacturaDetalle[FECHA] , «Total Venta» ,CALCULATE(SUM(FacturaDetalle[PrecioLineaArticulo]),FacturaDetalle[ArticuloCodigo]))
como ven agregue una columna de fecha, la cual luego hice una relación con la tabla calendario y listo. Ojala les sirva!!!
Muchas gracias por tu aporte!