Power BI: calcular valor del mes anterior

Un KPI típico en el mundo de datos es ver cómo cambia un valor a lo largo del tiempo. En nuestro ejemplo, lo que buscamos es qué valor tenía una dimensión el mes anterior. En el siguiente artículo os comparto una forma (hay otras) de cómo lograrlo rápidamente en Power BI. Puedes acceder a la repo de Github para descargar el dataset y el el pbix del ejemplo.

Nuestro dataset es muy sencillo, consta de cuatro columnas:

  • Period: fecha a la que pertenece el registro
  • Value: la dimensión por la que vamos a analizar la información
  • Score: la dimensión cuya variación de un mes a otro queremos calcular
PeriodValueScore
31/08/2022ANoFav
31/08/2022BNeutral
31/08/2022CNeutral
31/08/2022DNeutral
30/09/2022AFav
30/09/2022BNoFav
30/09/2022CFav
30/09/2022DNoFav
31/10/2022AFav
31/10/2022BFav
31/10/2022CFav
31/10/2022DNoFav
Dataset de ejemplo

Lo que buscamos es generar una tabla en la que podamos ver qué Score tiene en el mes del registro y cuál era el Score del mes anterior. Además, añadimos la columna Comp donde vamos a comparar ambos valores. En caso de que no tuviera valores anteriores asigna el valor del Score del periodo del registro.

Tabla en Power BI

Desde la vista de Datos vamos a añadir tres nuevas columnas que vamos a calcular con expresiones DAX. Aunque realmente la que nos interesa es la primera (ScorePrev), las otras dos las usaremos para confirmar y validar los datos:

  • ScorePrev: score del Value periodo anterior
  • PeriodPrev: periodo anterior
  • Comp: compara si el valor ha cambiado respecto al periodo anterior
Vista de Datos en Power BI Desktop

ScorePrev

Vamos a calcular el Score del mes anterior al de la fila. Creamos una variable _max sobre la que calculamos el mes anterior del valor de Period. Es importante configurar esta columna de tipo Date. En el return es donde introducimos el cálculo.

  • PREVIOUSMONTH: Calcula el mes anterior para la fecha pasada por parámetro. En nuestro caso, podríamos reemplazar esta expresión por eomonth('table'[Period],-1)
  • MAXX: calcula el valor máximo a nivel de fila. No confundir con MAX (una sola X) que lo calcularía agregando todas las filas.
  • FILTER: nos permite aplicar uno o varios filtros sobre la tabla indicada en el primer parámetro.
    • EOMONTH: nos devuelve el último día del mes. En el segundo parámetro dejamos 0 porque es del mes de la fecha pasada por parámetro.
    • EARLIER: nos devuelve el valor para la fila del campo pasado por parámetro. Si no añadiéramos este filtro, nos estaría dando el máximo Score por periodo.
ScorePrev = 
VAR _max = PREVIOUSMONTH('table'[Period])
return
MAXX(
FILTER ( 
    ALL('table'), 
    EOMONTH('table'[Period],0) = _max 
    && 'Table'[Value] = EARLIER([Value])
    )
, 'table'[Score]
) 

PeriodPrev

Simplemente calculamos el mes anterior para mostrarlo en la tabla y certificar que la información es correcta.

PeriodPrev = eomonth('table'[Period],-1)

Comp

Vamos a calcular si ha cambiado el valor de un mes para otro. En caso de que no hubiera dato anterior, se deja el que tuviese ese mes (caso de los datos de Agosto).

Comp = if(
        ISBLANK('table'[ScorePrev]),
        'table'[Score],
            if('table'[Score]<> 'table'[ScorePrev],
            "Changed", 
            'table'[Score]))

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

What is 8 + 14 ?
Please leave these two fields as-is: