Lección 15 de 16 · Nivel 4: Experto
Análisis ABC (Pareto) y segmentación RFM de clientes en Power BI
- ⏱ 11 min de lectura
- ❓ 3 preguntas de repaso
- ✍️ Ejercicio con solución
- 📥 Plantilla descargable
En esta lección
- Calcular el porcentaje acumulado de ventas y construir un gráfico de Pareto.
- Clasificar productos en A, B y C con DAX, como medida y como columna.
- Segmentar clientes con el modelo RFM: recencia, frecuencia y monto.
- Convertir estos análisis en decisiones comerciales concretas.
Los resultados de la lección corresponden a todo el periodo del archivo (2025 y 2026), sin filtros.
- andina-power-bi.xlsx · el modelo de Distribuidora Andina
Un gerente comercial no tiene tiempo para mirar 12 productos y 40 clientes uno por uno. Necesita saber dónde concentrar la atención: qué productos nunca pueden faltar, qué clientes son los más valiosos y cuáles están a punto de irse. Dos análisis clásicos responden esas preguntas, y con el DAX que ya sabes (lecciones 7 y 11) los puedes construir en una tarde.
El principio de Pareto
En casi todos los negocios, una minoría de productos o clientes genera la mayor parte de las ventas: la regla del 80/20. No es una ley exacta, pero el patrón aparece una y otra vez. La clasificación ABC lo convierte en una herramienta:
| Clase | Criterio habitual | Qué hacer |
|---|---|---|
| A | Productos que suman hasta el 80% de las ventas | Nunca deben faltar: stock de seguridad, mejores condiciones con proveedores, seguimiento semanal |
| B | Del 80% al 95% | Gestión normal, revisión mensual |
| C | El 5% restante | Revisar si vale la pena mantenerlos, reducir stock, venderlos en combos |
El porcentaje acumulado en DAX
Para cada producto, sumamos sus ventas y las de todos los productos que venden más que él, y lo dividimos por el total:
% Acumulado Ventas =
VAR VentasProducto = [Ventas Totales]
VAR Total =
CALCULATE ( [Ventas Totales], ALLSELECTED ( Productos[Producto] ) )
VAR Acumulado =
SUMX (
FILTER (
ALLSELECTED ( Productos[Producto] ),
[Ventas Totales] >= VentasProducto
),
[Ventas Totales]
)
RETURN
IF ( NOT ISBLANK ( VentasProducto ), DIVIDE ( Acumulado, Total ) )
ALLSELECTEDquita el filtro del producto de la fila, pero respeta los segmentadores de la página: si filtras por la zona Sur, el Pareto se calcula solo con el Sur.- Dentro de
FILTER,[Ventas Totales]se evalúa para cada producto gracias a la transición de contexto (lección 7).
Clase ABC =
VAR p = [% Acumulado Ventas]
RETURN
SWITCH ( TRUE (), ISBLANK ( p ), BLANK (), p <= 0.80, "A", p <= 0.95, "B", "C" )
En una tabla con el producto, las ventas, el porcentaje acumulado y la clase, ordenada por ventas de mayor a menor:
| Producto | Ventas | % acumulado | Clase |
|---|---|---|---|
| Arroz extra 5 kg | 121.027 | 17,6% | A |
| Leche evaporada x6 | 108.942 | 33,4% | A |
| Café instantáneo 200 g | 98.192 | 47,7% | A |
| Queso fresco 500 g | 78.320 | 59,1% | A |
| Aceite vegetal 1 L | 53.309 | 66,9% | A |
| Gaseosa 3 L | 50.678 | 74,2% | A |
| Mantequilla 200 g | 44.579 | 80,7% | B |
| Yogur 1 L | 39.743 | 86,5% | B |
| Jugo de naranja 1 L | 34.489 | 91,5% | B |
| Azúcar rubia 1 kg | 23.216 | 94,9% | B |
| Agua mineral 2.5 L | 20.255 | 97,8% | C |
| Fideos spaghetti 500 g | 14.296 | 99,9% | C |
| (En blanco) | 677 | 100,0% | C |
Lectura: la mitad del catálogo (6 de 12 productos) genera el 74% de las ventas. El arroz, la leche y el café, solos, casi la mitad. Y la fila "(En blanco)" son las 3 ventas con el código P99 que encontraste en la lección 5: un recordatorio de que los datos sin limpiar aparecen en todos los análisis.
El gráfico de Pareto
Usa un gráfico de columnas y líneas: eje X, Producto; columnas, Ventas Totales (ordenado de mayor a menor); línea, % Acumulado Ventas en el eje secundario. Agrega una línea constante en 80% con el panel de análisis. Es uno de los gráficos más reconocidos en las reuniones de gerencia.
1. ¿Por qué se usa ALLSELECTED y no ALL en el cálculo del total?
Con ALL, el total sería siempre el de toda la empresa aunque filtres una zona, y los porcentajes no sumarían 100%.
Medida o columna
Una medida no se puede usar como eje de un gráfico ni en un segmentador. Si quieres contar "cuántos productos hay en cada clase" o filtrar por "solo productos A", crea la clasificación como columna calculada en la tabla Productos:
Clase ABC Fija =
VAR VentasProducto = [Ventas Totales]
VAR Total = CALCULATE ( [Ventas Totales], ALL ( Productos ) )
VAR Acumulado =
SUMX ( FILTER ( ALL ( Productos ), [Ventas Totales] >= VentasProducto ), [Ventas Totales] )
VAR p = DIVIDE ( Acumulado, Total )
RETURN
SWITCH ( TRUE (), p <= 0.80, "A", p <= 0.95, "B", "C" )
La diferencia: la columna se calcula una sola vez al actualizar los datos, con todo el periodo, y no cambia con los filtros. La medida es dinámica. Usa la columna para segmentar y la medida para analizar periodos o zonas.
Segmentación de clientes con RFM
El modelo RFM clasifica a los clientes con tres preguntas:
- Recencia: ¿cuántos días pasaron desde su última compra?
- Frecuencia: ¿cuántos pedidos hizo?
- Monto: ¿cuánto compró en total?
Crea estas columnas calculadas en la tabla Clientes:
Última Compra = CALCULATE ( MAX ( Ventas[Fecha] ) )
Recencia (días) =
DATEDIFF ( Clientes[Última Compra], MAX ( Ventas[Fecha] ), DAY )
Frecuencia = CALCULATE ( DISTINCTCOUNT ( Ventas[NumPedido] ) )
Monto = [Ventas Totales]
Segmento RFM =
SWITCH (
TRUE (),
Clientes[Recencia (días)] > 30, "En riesgo",
Clientes[Frecuencia] >= 60 && Clientes[Monto] >= 19000, "Campeón",
"Regular"
)
CALCULATE ( MAX ( Ventas[Fecha] ) )en una columna calculada aplica la transición de contexto: devuelve la última compra de ese cliente.MAX ( Ventas[Fecha] )sin CALCULATE, en cambio, devuelve la última fecha de toda la tabla: es la fecha de referencia (31/12/2026 en el archivo). En un modelo con datos al día podrías usarTODAY ().- Los umbrales (30 días, 60 pedidos, 19.000) salen de mirar la distribución de los datos: la mediana de pedidos por cliente es 54 y la del monto, unos 16.800.
| Segmento | Clientes | Acción comercial |
|---|---|---|
| Campeón | 8 | Cuidarlos: atención prioritaria, condiciones preferentes, pedirles referidos |
| Regular | 29 | Crecer: ofrecer productos A que todavía no compran, aumentar la frecuencia |
| En riesgo | 3 | Recuperar: llamada del vendedor esta semana |
Los tres clientes en riesgo son Minimarket La Esquina 23 (72 días sin comprar), Minimarket La Familia 8 (58 días) y Bodega La Familia 38 (41 días). Esta última es la alerta más grave: hizo 68 pedidos y más de 22.000 en compras, y fue el mayor cliente de 2025. Un informe que la muestra en rojo vale más que diez gráficos de ventas totales: le da al vendedor una llamada concreta que hacer hoy.
2. En la columna Última Compra, ¿qué pasaría si escribieras MAX ( Ventas[Fecha] ) sin CALCULATE?
En una columna calculada, el contexto de fila no filtra otras tablas. CALCULATE lo convierte en contexto de filtro y entonces Ventas se filtra por ese cliente.
La segmentación RFM se recalcula solo al actualizar los datos. Está bien para un informe diario, pero no responde a los segmentadores. Si necesitas que cambie con un filtro de fechas, tendrías que hacerla con medidas y una tabla de segmentos desconectada, una técnica más avanzada.
3. Un producto clase A tiene quiebres de stock frecuentes. ¿Qué indica el análisis ABC?
La clase A existe justamente para saber qué no puede faltar. Un quiebre en un producto A pierde muchas más ventas que en uno C.
Ejercicio práctico: ABC de clientes y panel de alertas
- Adapta la medida de porcentaje acumulado para clientes (usa
Clientes[Cliente]) y la clase ABC. - Crea una página "Alertas comerciales" con una tabla de clientes en riesgo (segmento, recencia, frecuencia, monto) y formato condicional rojo en la recencia.
- Agrega una tarjeta con el monto histórico de los clientes en riesgo.
Ver solución
% Acumulado Clientes =
VAR VentasCliente = [Ventas Totales]
VAR Total = CALCULATE ( [Ventas Totales], ALLSELECTED ( Clientes[Cliente] ) )
VAR Acumulado =
SUMX (
FILTER ( ALLSELECTED ( Clientes[Cliente] ), [Ventas Totales] >= VentasCliente ),
[Ventas Totales]
)
RETURN IF ( NOT ISBLANK ( VentasCliente ), DIVIDE ( Acumulado, Total ) )
Clase ABC Cliente =
VAR p = [% Acumulado Clientes]
RETURN SWITCH ( TRUE (), ISBLANK ( p ), BLANK (), p <= 0.80, "A", p <= 0.95, "B", "C" )
Monto en Riesgo =
CALCULATE ( [Ventas Totales], Clientes[Segmento RFM] = "En riesgo" )
→ 46.332,38 (22.100,10 + 14.554,85 + 9.677,43)
Fíjate en que los clientes están mucho menos concentrados que los productos: con 40 clientes de tamaño parecido, hacen falta 29 para llegar al 80% (29 en A, 8 en B y 3 en C). El análisis ABC te dice en qué se parece (o no) tu negocio a la regla 80/20.
Resumen
- El porcentaje acumulado ordena productos o clientes por su contribución; con 80% y 95% se obtienen las clases A, B y C.
- ALLSELECTED hace que el Pareto respete los segmentadores; la transición de contexto evalúa cada elemento.
- Medida para análisis dinámico; columna calculada para segmentar y contar.
- RFM combina recencia, frecuencia y monto para encontrar campeones y clientes en riesgo.
- Un buen análisis termina en una acción concreta: stock para los A, una llamada para los clientes en riesgo.
En la próxima lección, la última del curso, prepararás la certificación oficial de Microsoft para analistas de datos de Power BI (PL-300) y armarás tu portafolio para conseguir trabajo.
Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.