¡Hola a todos! Mi nombre es Nazarena Tossolini, trabajo como BI & Analytics Consultant en Pi Data Strategy & Consulting y en esta publicación les quiero compartir un caso particular que tuve que realizar hace unas semanas.
El objetivo consistía en detectar, para determinada semana seleccionada a partir de un slicer, la cantidad de clientes que en ese periodo cumplieran 90 días desde su última compra.
Para entenderlo mejor, veamos el ejemplo.
Como se observa en la imagen, la semana seleccionada es la del 15/04/2007, los días en que los clientes deberían haber comprado por última vez para cumplir los 90 días en ese periodo irían desde el 15/1/2007 al 21/1/2007.

Ahora que ya tenemos el caso puntual, lo llevemos a nuestra DAX. Para eso necesitaremos:
- Determinar la última fecha en la que el cliente compró.
- Calcular la cantidad de días que pasaron desde esa fecha hasta la última fecha de la semana seleccionada.
- Finalmente,
asignar un 1 en caso de que esa cantidad de días sea mayor o igual a 90 y menor
o igual a 90 + la cantidad de días del periodo de la semana seleccionada.
(Al 21/4/2007 aquellos clientes que compraron por última vez el 15/1/2007 cumplieron 96 días sin comprar).
Veamos cada uno de los puntos anteriores en la siguiente medida:
Clientes con 90d sin comprar =
VAR _FechaFin =
LASTDATE ( 'Date'[Date] ) // Ultima fecha en la semana seleccionada
VAR _FechaInicial =
FIRSTDATE ( 'Date'[Date] ) // Primer fecha en la semana seleccionada
VAR _DiasPeriodo =
DATEDIFF ( _FechaInicial, _FechaFin, DAY ) // Cantidad de dias entre ambas fechas
VAR _Dias =
DATEDIFF (
CALCULATE (
LASTDATE ( InternetSales[Delivery Date] ),
ALL ( 'Date' ),
InternetSales[Delivery Date] < _FechaFin
),
// 1.Ultima fecha de compra del cliente, eliminando los filtros de fechas aplicados
_FechaFin,
DAY
) // 2.Diferencia en días desde la ultima compra a la ultima fecha de la semana seleccionada
RETURN
IF ( _Dias >= 90 && _Dias <= 90 + _DiasPeriodo, 1, BLANK () )
// 3.En caso de que los días se encuentren entre los valores establecidos devuelve 1 y si no blanco.
Para ver los resultados cliente por cliente y comprobarlos, podemos ver las diferentes variables utilizadas en la DAX dentro de una tabla:

Sin embargo, el objetivo del usuario final es visualizar el total como valor dentro de una tarjeta. Entonces, dentro de nuestra última DAX sumaremos los valores de la medida, es decir, los clientes que tienen un valor igual a 1.
Total de Clientes =
SUMX (
ADDCOLUMNS (
VALUES ( Customer[CustomerKey] ) //Utilizar la clave principal de la dimension
, "@Total", [Clientes con 90d sin comprar]
),
[@Total]
)
El resultado
final se vería de la siguiente forma:
Para la semana
seleccionada, un total de 42 consumidores hicieron su última compra hace 90
días.

También pueden aplicar esta DAX para distintos filtros, periodos y fechas específicas como referencia. En este caso se construyó entre semanas y es por esa razón se usó la variable _DiasPeriodo para ajustar el rango de la semana. Esto no sería necesario si queremos ir exactamente contra 90 días seleccionando un día especifico.
¡Espero que esta breve explicación les sea de mucha utilidad en caso de que les toque realizar análisis similares!
Escrito por Nazarena Tossolini