Medidas Rotativas en DAX: Cuando tus datos no se están quietos

· 4 min de lectura
Compartir:

TL;DR

  • Productos que cambian de categoría con el tiempo → problema de “medidas rotativas”
  • El cliente quiere ver todo reclasificado según el último período
  • Patrón: capturar clasificación del último período y aplicarla hacia atrás
  • Usa REMOVEFILTERS + tabla temporal con la clasificación actual

El marrón

Te cuento un escenario que me ha tocado más de una vez: tienes productos (o clientes, o lo que sea) que cambian de categoría con el tiempo. Un producto que en Q1 era “Premium”, en Q2 lo bajan a “Estándar” porque no ha vendido lo esperado.

El usuario abre Power BI, selecciona Q1 y Q2 en el filtro, y pregunta:

¿Cuánto vendimos en Premium?

Y aquí viene el momento incómodo: ¿le sumas lo que ERA Premium en Q1, o lo que ES Premium según la clasificación actual?

El 90% de las veces, el cliente quiere lo segundo. Quiere ver todo reclasificado según el último período. Pero DAX, bless his heart, por defecto te va a sumar cada cosa según cómo estaba clasificada en su momento.

La solución: Medidas Rotativas

El patrón tiene truco, pero una vez lo pillas es pan comido:

  1. Pillar el último período del contexto de filtro
  2. Buscar cómo están clasificados los productos EN ESE período
  3. Aplicar esa clasificación hacia atrás a TODOS los períodos
Ventas Rotativas = 
VAR UltimoPeriodo = 
    MAXX(
        VALUES(Calendario[Periodo]), 
        Calendario[Periodo]
    )
VAR ProductosClasificados = 
    CALCULATETABLE(
        SUMMARIZE(
            Productos, 
            Productos[ID], 
            Productos[Categoria]
        ),
        Productos[Periodo] = UltimoPeriodo
    )
RETURN 
CALCULATE(
    [Ventas],
    REMOVEFILTERS(Productos[Categoria]),
    ProductosClasificados
)

Por qué funciona

  • MAXX + VALUES: Coge el período más reciente de los que el usuario ha seleccionado
  • CALCULATETABLE + SUMMARIZE: Crea una tablita temporal con la foto de clasificación de ese período
  • REMOVEFILTERS: Borra los filtros originales de categoría (si no, se pisan)
  • ProductosClasificados: Reaplica la clasificación del último período a toda la consulta

Básicamente estás diciendo: “ignora cómo estaban clasificados antes, usa SOLO la clasificación actual”.

Bonus: mostrar la categoría actual en texto

Si además quieres una columna que muestre la categoría vigente (no sumar, solo mostrar el texto), el truco es SELECTEDVALUE:

Categoria Actual = 
VAR UltimoPeriodo = 
    MAXX(
        VALUES(Calendario[Periodo]), 
        Calendario[Periodo]
    )
RETURN
CALCULATE(
    SELECTEDVALUE(Productos[Categoria]),
    Productos[Periodo] = UltimoPeriodo
)

En los totales devolverá BLANK, que es correcto. No tiene sentido mostrar una categoría cuando hay múltiples productos mezclados.

Dónde lo vas a necesitar

Cualquier negocio donde las cosas cambien de caja:

  • Retail con productos que cambian de temporada o sección
  • Servicios con clientes que suben/bajan de tier
  • Equipos comerciales donde los vendedores cambian de zona
  • Inventario con productos que se reclasifican

Si tienes una dimensión que no es estática en el tiempo, tarde o temprano te va a tocar esto.


¿Te ha servido? Tengo más patrones DAX oscuros en el cajón, como Rolling 12 meses con dos calendarios.

¿Empezando con DAX? Lee primero Qué es DAX en Power BI: Guía para principiantes.

¿Te ha sido útil? Compártelo

Compartir:

También te puede interesar