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
  1. El principio de Pareto
  2. El porcentaje acumulado en DAX
  3. Segmentación de clientes con RFM
  4. Resumen
Lo que lograrás 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.
📥 Practica esta lección

Los resultados de la lección corresponden a todo el periodo del archivo (2025 y 2026), sin filtros.

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:

ClaseCriterio habitualQué hacer
AProductos que suman hasta el 80% de las ventasNunca deben faltar: stock de seguridad, mejores condiciones con proveedores, seguimiento semanal
BDel 80% al 95%Gestión normal, revisión mensual
CEl 5% restanteRevisar 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 ) )
  • ALLSELECTED quita 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:

ProductoVentas% acumuladoClase
Arroz extra 5 kg121.02717,6%A
Leche evaporada x6108.94233,4%A
Café instantáneo 200 g98.19247,7%A
Queso fresco 500 g78.32059,1%A
Aceite vegetal 1 L53.30966,9%A
Gaseosa 3 L50.67874,2%A
Mantequilla 200 g44.57980,7%B
Yogur 1 L39.74386,5%B
Jugo de naranja 1 L34.48991,5%B
Azúcar rubia 1 kg23.21694,9%B
Agua mineral 2.5 L20.25597,8%C
Fideos spaghetti 500 g14.29699,9%C
(En blanco)677100,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?

  • Porque ALL no existe en DAX.
  • Para que el Pareto respete los segmentadores de la página (por ejemplo, una zona o un año) y se recalcule dentro de esa selección.
  • Porque ALLSELECTED es más rápido.

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 usar TODAY ().
  • 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.
SegmentoClientesAcción comercial
Campeón8Cuidarlos: atención prioritaria, condiciones preferentes, pedirles referidos
Regular29Crecer: ofrecer productos A que todavía no compran, aumentar la frecuencia
En riesgo3Recuperar: 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?

  • Daría la última compra de cada cliente igualmente.
  • Daría la misma fecha para todos los clientes: la última de toda la tabla, porque no hay transición de contexto.
  • Daría un error de sintaxis.

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.

Columnas calculadas: estáticas

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?

  • Que no importa, porque es un solo producto.
  • Que es prioritario: los productos A concentran las ventas y un quiebre de stock tiene un costo alto.
  • Que hay que pasarlo a clase C.

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

  1. Adapta la medida de porcentaje acumulado para clientes (usa Clientes[Cliente]) y la clase ABC.
  2. Crea una página "Alertas comerciales" con una tabla de clientes en riesgo (segmento, recencia, frecuencia, monto) y formato condicional rojo en la recencia.
  3. 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.

🎓 Guarda tu avance y obtén tu certificado gratis

Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.

Inscribirme gratis