cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Helper III
Helper III

Cómo calcular la diferencia de fechas entre las últimas compras

Quiero calcular las diferencias entre dos fechas. Una es la última fecha de compra y la otra es la última fecha de compra que es anterior a la última fecha de compra.

ClienteFecha de compraFabricanteProducto
12312312/2/2018manzanaT23
12312310/15/2018PlátanoK35
1231235/30/2018PlátanoT23
1231233/4/2018manzanaT27
1231232/16/2017manzanaT56
1231236/22/2017PlátanoT56

Para esta situación, quiero obtener las fechas de compras de la compañía Apple y las diferencias entre 3/4/2018 amd 2/16/2017. 12/2 y 2/16 no necesitan porque 3/4/2018 puede darme un recuento de días más pequeño.

Además, si el cliente compró el producto de Banana por primera vez, entonces debe devolver 0 daycount.

Estas son mis fórmulas de medida.
El Lastest date- CALCULATE(MIN('DATA'[Fecha de compra]), FILTER('DATA','DATA'[Fabricante]"Apple"))
Last Laste comprado ?
CALCULATE(MIN('DATA'[Fecha de compra]),'DATA'[Fabricante]"Apple", FILTER('UCC DATA','DATA'[Fecha de compra] <MIN('DATA'[Fecha de compra])))
días desde la última compra- IF(ISBLANK([The Lastest date]),BLANK(),VALUE([Last Purchased date]-[The Lastest date]))

Screenshot (1).png

El resultado no me da lo que quería.

¿Alguien puede ayudarme en esto?

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted

Hola @dndrms2105

Nueva columna de índice:

Index = 
RANKX (
    FILTER (
        'DATA',
        'DATA'[Manufacturer] = EARLIER ( 'DATA'[Manufacturer] )
            && 'DATA'[Customer] = EARLIER ( 'DATA'[Customer] )
    ),
    'DATA'[Purchased date],
    ,
    ASC
)

Nueva medida:

DayDiff = 
VAR _A =
    MAX ( DATA[Purchased date] )
VAR _B =
    CALCULATE (
        MAX ( DATA[Purchased date] ),
        FILTER (
            ALLEXCEPT ( DATA, DATA[Manufacturer], DATA[Customer] ),
            DATA[Index]
                = SUM ( DATA[Index] ) - 1
        )
    )
VAR _DATEDIFF =
    DATEDIFF ( _B, _A, DAY )
RETURN
    _DATEDIFF
MAXDayDiff = 
VAR _MAXDATEDIFF =
    MAXX ( ALLEXCEPT ( DATA, DATA[Customer], DATA[Manufacturer] ), [DayDiff] )
VAR _IndexforMaxDatediff =
    CALCULATE (
        SUM ( DATA[Index] ),
        FILTER (
            ALLEXCEPT ( DATA, DATA[Customer], DATA[Manufacturer] ),
            [DayDiff] = _MAXDATEDIFF
        )
    )
VAR _MAXINDEX =
    MAXX (
        FILTER (
            ALL ( DATA ),
            DATA[Customer] = MAX ( DATA[Customer] )
                && DATA[Manufacturer] = MAX ( DATA[Manufacturer] )
        ),
        DATA[Index]
    )
RETURN
    IF (
        _MAXINDEX = 1,
        0,
        IF (
            SUM ( DATA[Index] ) = _IndexforMaxDatediff
                || SUM ( DATA[Index] ) = _IndexforMaxDatediff - 1,
            _MAXDATEDIFF,
            0
        )
    )

Resultado:

1.png

Por maxDaydiff medida, puede obtener el resultado de que el día más grande en daydiffs.

ex:Cliente 109527 Fabricante Apple: 2014/3/4 y 2017/3/4(daydiff 1096), 2017/3/4 y 2017/7/6(daydiff 124),

así que mostramos 1096 en 2014/3/4 y 2017/3/4, y mostramos 0 en 2017/7/6.

Puede descargar el archivo pbix desde este enlace: Cómo calcular la diferencia de fecha entre las últimas compras

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

7 REPLIES 7
Highlighted
Helper III
Helper III

Estas son mis fórmulas de medida.
El Lastest date- CALCULATE(MIN('DATA'[Fecha de compra]), FILTER('DATA','DATA'[Fabricante]"Apple"))
Last Laste comprado ?
CALCULATE(MIN('DATA'[Fecha de compra]),'DATA'[Fabricante]"Apple", FILTER('UCC DATA','DATA'[Fecha de compra] <MIN('DATA'[Fecha de compra])))
días desde la última compra- IF(ISBLANK([The Lastest date]),BLANK(),VALUE([Last Purchased date]-[The Lastest date]))

Screenshot (1).png

Esto es el resultado, pero no me da lo que quería.

Highlighted
Super User IV
Super User IV

@dndrms2105 - Así que básicamente desea hacer un cálculo entre dos filas. Vea mi artículo sobre el tiempo medio entre fallas (MTBF) que utiliza ANTES: http://community.powerbi.com/t5/Community-Blog/Mean-Time-Between-Failure-MTBF-and-Power-BI/ba-p/3395...


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




Highlighted
Community Support
Community Support

Hola @dndrms2105

Aquí construyo una mesa como la tuya para hacerme una prueba.

1.png

Agregue una columna de índice ordenada por Fecha de compra para cada fabricante y cada cliente.

Index =
RANKX (
    FILTER (
        'Table',
        'Table'[Manufacturer] = EARLIER ( 'Table'[Manufacturer] )
            && 'Table'[Customer] = EARLIER ( 'Table'[Customer] )
    ),
    'Table'[Purchased date],
    ,
    DESC
)

Resultado:

2.png

A continuación, construir una medida para lograr su objetivo.

DayDiff = 
VAR _TheLatestDate =
    MAXX (
        FILTER (
            ALL ( DATA ),
            DATA[Customer] = MAX ( DATA[Customer] )
                && DATA[Manufacturer] = MAX ( DATA[Manufacturer] )
        ),
        DATA[Purchased date]
    )
VAR _TheLatestDatebefore =
    CALCULATE (
        MAX ( DATA[Purchased date] ),
        FILTER (
            ALL ( DATA ),
            DATA[Customer] = MAX ( DATA[Customer] )
                && DATA[Manufacturer] = MAX ( DATA[Manufacturer] )
                && DATA[Index] > 1
        )
    )
VAR _MAXINDEX =
    MAXX (
        FILTER (
            ALL ( DATA ),
            DATA[Customer] = MAX ( DATA[Customer] )
                && DATA[Manufacturer] = MAX ( DATA[Manufacturer] )
        ),
        DATA[Index]
    )
RETURN
    IF ( _MAXINDEX = 1, 0, DATEDIFF ( _TheLatestDatebefore, _TheLatestDate, DAY ) )

Resultado:

3.png

Si esta respuesta todavía no pudo ayudarle a resolver este problema, por favor proporcione más detalles.

Desde su estado de cuenta: DateA -la última fecha de compra, DateB - la última fecha de compra antes de DateA.

Pero en su ejemplo, cuando calculamos el conteo de días en Apple, DateA a 2018/12/2, DateB- 2018/3/4.

¿Por qué aquí se calcula el conteo de días por FechaA-2018/3/4,DateB a 2018/2/16? Si mi entendimiento es erróneo, por favor dígame más sobre su lógica de cálculo. O puede compartir su archivo pbix conmigo por su Onedrive for Business.


Puede descargar el archivo pbix desde este enlace: Cómo calcular la diferencia de fechas entre las últimas compras

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Highlighted

@RicoZhou For the customer 109527 apple 2019/12/31 in the last picture, why is the day diff is not the difference between the 2020/6/3 and 2019/12/31? also 123123 apple2016/12/2 has 381 day diff. Is there a way that I can change it with differences between eac of the larger date in different year? 

ex) 2017/03/04 and 2017/07/06 and 2014/03/04 are the purchased dates. I want the days diff on 2014/03/04 and 2017/03/04 and 0 for the 2017/07/06. 

Highlighted

Hola @dndrms2105

Nueva columna de índice:

Index = 
RANKX (
    FILTER (
        'DATA',
        'DATA'[Manufacturer] = EARLIER ( 'DATA'[Manufacturer] )
            && 'DATA'[Customer] = EARLIER ( 'DATA'[Customer] )
    ),
    'DATA'[Purchased date],
    ,
    ASC
)

Nueva medida:

DayDiff = 
VAR _A =
    MAX ( DATA[Purchased date] )
VAR _B =
    CALCULATE (
        MAX ( DATA[Purchased date] ),
        FILTER (
            ALLEXCEPT ( DATA, DATA[Manufacturer], DATA[Customer] ),
            DATA[Index]
                = SUM ( DATA[Index] ) - 1
        )
    )
VAR _DATEDIFF =
    DATEDIFF ( _B, _A, DAY )
RETURN
    _DATEDIFF
MAXDayDiff = 
VAR _MAXDATEDIFF =
    MAXX ( ALLEXCEPT ( DATA, DATA[Customer], DATA[Manufacturer] ), [DayDiff] )
VAR _IndexforMaxDatediff =
    CALCULATE (
        SUM ( DATA[Index] ),
        FILTER (
            ALLEXCEPT ( DATA, DATA[Customer], DATA[Manufacturer] ),
            [DayDiff] = _MAXDATEDIFF
        )
    )
VAR _MAXINDEX =
    MAXX (
        FILTER (
            ALL ( DATA ),
            DATA[Customer] = MAX ( DATA[Customer] )
                && DATA[Manufacturer] = MAX ( DATA[Manufacturer] )
        ),
        DATA[Index]
    )
RETURN
    IF (
        _MAXINDEX = 1,
        0,
        IF (
            SUM ( DATA[Index] ) = _IndexforMaxDatediff
                || SUM ( DATA[Index] ) = _IndexforMaxDatediff - 1,
            _MAXDATEDIFF,
            0
        )
    )

Resultado:

1.png

Por maxDaydiff medida, puede obtener el resultado de que el día más grande en daydiffs.

ex:Cliente 109527 Fabricante Apple: 2014/3/4 y 2017/3/4(daydiff 1096), 2017/3/4 y 2017/7/6(daydiff 124),

así que mostramos 1096 en 2014/3/4 y 2017/3/4, y mostramos 0 en 2017/7/6.

Puede descargar el archivo pbix desde este enlace: Cómo calcular la diferencia de fecha entre las últimas compras

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

Highlighted

@RicoZhou Why 123123  on 2016/ 12/2 shows 0? and  Is there a way to filter one specific manufacturer? like only for manufacturer Apple. 

Highlighted

Hola @dndrms2105

Creo que necesitas el daydiff más grande entre 123123 manzana.

ex entre 2016/12/2 y 2017/2/16 daydiff 76, entre 2017/2/16 y2018/3/4 daydiff 381.

Así que el resultado es 381 y aparece detrás de 2017/2/16 y 2018/3/4, y 2016/12/2 show 0.

Como el ejemplo que me diste.

1.png

Si desea filtrar un fabricante específico, puede probar filtros o segmentación de datos.

Filtros:

2.png

Cortar:3.png

Puede descargar el archivo pbix desde este enlace: Cómo calcular la diferencia de fecha entre las últimas compras

Saludos

Rico Zhou

Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

Community Conference

Microsoft Power Platform Communities

Check out the Winners!

secondImage

Create an end-to-end data and analytics solution

Learn how Power BI works with the latest Azure data and analytics innovations at the digital event with Microsoft CEO Satya Nadella.

Top Solution Authors