Introducción
El diagrama de Pareto, también conocido como curva cerrada o distribución A-B-C, es un gráfico combinado de columnas y líneas en el que los valores individuales se representan en orden descendente por columnas, y el total acumulado se representa a través de la línea. El nombre del gráfico proviene del principio de Pareto, llamado así en honor a Vilfredo Pareto, un destacado economista italiano. Dicho principio describe el fenómeno estadístico por el cual en cualquier población que contribuye a un efecto común, es una proporción pequeña la que contribuye a la mayor parte del efecto.
Este gráfico permite asignar un orden de prioridades, al mostrar gráficamente el principio de Pareto y posibilitar distinguir los factores más importantes entre un conjunto, generalmente amplio, de ellos. Es una de las herramientas más utilizadas en el control de calidad, donde a menudo se utiliza para identificar las fuentes más comunes de defectos, la tipología de defecto que más se produce o los motivos más frecuentes de las quejas de los clientes.
En este tipo de gráfico, el eje vertical izquierdo representa normalmente la frecuencia de ocurrencia, pero puede representar alternativamente el coste u otra unidad de medida importante. El eje vertical derecho es el porcentaje acumulativo del número total de ocurrencias, el coste total o el total de la unidad de medida utilizada. Debido a que los valores están en orden decreciente, la función acumulativa es una función cóncava.
Gráfico de Pareto dinámico con DAX
Existen diversas formas de solucionar este escenario. Probablemente las más comunes se basan en materializar en el modelo de datos una tabla agregada, que podemos generar tanto durante el proceso de ETL como utilizando funciones tabulares de DAX. En este artículo, por el contrario, vamos a optar por un enfoque dinámico, con el fin de que nuestro diagrama de Pareto responda correctamente a cualquier filtro aplicado en el modelo, y en el que utilicemos únicamente una medida, agregando las ventas por producto en una tabla virtual que formará parte de la misma.
En primer lugar, vamos a crear dos variables. La primera de ellas, _VentasTotales
, nos dará el valor total de las ventas, eliminando el filtro que proviene del eje de la visualización, en nuestro caso el nombre del producto, pero manteniendo todos los filtros aplicados al modelo fuera de la propia visualización, es decir, mantendremos los filtros aplicados mediante slicers, otras visualizaciones o el panel de filtros. La segunda, _VentasProductoActual
, almacenara simplemente el valor de las ventas visibles en el contexto de filtro actual:
VAR_VentasTotales =
CALCULATE ( [Ventas]; ALLSELECTED ( Ventas ))
VAR_VentasProductoActual = [Ventas]
A continuación, crearemos y guardaremos en la variable _TablaSummarized
, una tabla virtual que agrupará las ventas por producto:
VAR_TablaSummarized =
SUMMARIZE (ALLSELECTED ( Ventas ); Productos[Nombre]; «Ventas»; [Ventas] )
Posteriormente, calcularemos la suma de las ventas de todos los productos con ventas superiores o iguales a las del producto actual:
VAR_VentasAcumuladas =
SUMX (
FILTER (_TablaSummarized; [Ventas] >= _VentasProductoActual);
[Ventas]
)
Y para finalizar, solo nos quedaría dividir nuestras _VentasAcumuladas
entre las _VentasTotales
, quedando el código completo de nuestra medida de la siguiente manera:
ParetoProductos =
VAR_VentasTotales =
CALCULATE ( [Ventas]; ALLSELECTED ( Ventas ))
VAR_VentasProductoActual = [Ventas]
VAR_TablaSummarized =
SUMMARIZE (ALLSELECTED ( Ventas ); Productos[Nombre]; «Ventas»; [Ventas] )
VAR_VentasAcumuladas =
SUMX (
FILTER (_TablaSummarized; [Ventas] >= _VentasProductoActual);
[Ventas]
)
VAR_Resultado =
DIVIDE (_VentasAcumuladas; _VentasTotales)
RETURN
_Resultado
Ahora podemos utilizar una visualización nativa de Power BI, el gráfico combinado de columnas y líneas, para crear un diagrama de Pareto totalmente dinámico:
Si queremos destacar en la visualización, por ejemplo, los productos cuyas ventas suman el 70% de las ventas totales de la empresa (en el contexto formado por todos los filtros aplicados fuera de la visualización), con el objetivo de que el usuario pueda identificar con facilidad dichos productos, podemos utilizar la funcionalidad de formato condicional en el color de las columnas con la siguiente regla:
Y de esta forma, obtendríamos nuestro resultado deseado:
Todo el código DAX de este artículo ha sido formateado con «DAX Formatter»
Deja un comentario