Cálculo de la anterior fecha de compra para cada compra de cada cliente

Partimos de una tabla de ventas ("Movements") en la que figura la fecha de venta, el identificador del usuario y el importe de venta:

Tabla de ventas

Nuestro objetivo es añadir una nueva columna en la que se muestre la última compra del mismo cliente. Al recorrerse la tabla creándose el nuevo campo se creará para cada fila el contexto de fila asociado, lo que nos da acceso a los campos de la fila. Concretamente, la función EARLIER nos permite acceder al identificador del cliente y a la fecha, de forma que podemos calcular el subconjunto de la tabla que contiene las compras del cliente actual anteriores a la fecha actual con la siguiente expresión:

FILTER(
    Movements;
    Movements[Customer Id] = EARLIER(Movements[Customer Id]) &&
    Movements[Order Date] < EARLIER(Movements[Order Date])
)

Una vez calculado este subconjunto, podemos extraer la última fecha muy fácilmente usando la función LASTDATE, función que devuelve una tabla con la última fecha del contexto actual. Usada como argumento de CALCULATE y añadiendo como filtro el subconjunto calculado, podemos extraer la última fecha del conjunto (es decir, la última fecha de compra antes de la actual):

Last Purchase = 
    CALCULATE(
        LASTDATE(Movements[Order Date]);
        FILTER(
            Movements;
            Movements[Customer Id] = EARLIER(Movements[Customer Id]) &&
            Movements[Order Date] < EARLIER(Movements[Order Date])
        )
    )

Recordemos que, aunque la función LASTDATE devuelve una tabla, el resultado puede ser usado como un escalar allí donde se requiera una simple fecha. El resultado obtenido es el siguiente:

Resultado obtenido

Podemos confirmar que el cálculo es correcto si llevamos a una visualización tipo tabla el identificador de usuario, el campo Order Date y el campo recién creado Last Purchase, filtrando el identificador de usuario (usando una segmentación, por ejemplo) y ordenando la tabla creada según el campo Order Date:

Ventas para el cliente 19

Vemos cómo la fecha de última compra coincide con la anterior.

Funciones DAX involucradas
Enviado por admin el Sáb, 06/07/2019 - 20:23