Forum Discussion

samc_26's avatar
samc_26
Helper IV
11 months ago
Solved

Days between multiple dates

Hi all,

 

I have a table that is set up like the below (changed data for this!) and I'm trying to find out the number of days between each date so that I can calculate an average. This is how my data is laid out at present.

 

ProductOrder DateColumn I would like to create ( days in-between dates listed by product)
Notebook01/01/250
Notebook18/02/2548
Notebook28/02/259
Pencil28/02/250
Pencil14/03/2514
Pencil22/04/2539
Eraser19/05/2527
Eraser21/06/2538

 

What I would like is a way of showing individual days between each order so it would show something like what is in the third column. I have no idea if this is possible, I would be extremley grateful if anyone can work it out! I've managed to write a measure using DATEDIFF which shows me the days between the earliest and latest date but it's the time in between each order I need really. 

 

Thank you for reading! ğŸ˜€

  •  

    I named the table Fact

     

    Created a key calc column 

     

    key = 'Fact'[Order Date] & 'Fact'[Product]

     

    DAX code of the calc column Delta Days

     

    Delta Days =
    VAR keyRow = 'Fact'[key]
    VAR Prevkey = MAXX ( FILTER ( VALUES( 'Fact'[key] ), 'Fact'[key] < keyRow ), 'Fact'[key] )
    VAR PrevDate = CALCULATE( SELECTEDVALUE( 'Fact'[Order Date] ), 'Fact'[key] = Prevkey, REMOVEFILTERS() )
    RETURN
    IF (
        NOT ISBLANK( Prevkey ),
        INT('Fact'[Order Date] - PrevDate)
    )
     

    If this helped, please consider giving kudos and mark as a solution

    mein replies or I'll lose your thread

    Want to check your DAX skills? Answer my biweekly DAX challenges on the kubisco Linkedin page

    Consider voting this Power BI idea

    Francesco Bergamaschi

    MBA, M.Eng, M.Econ, Professor of BI

  • Days Between =
    VAR CurrentDate = 'Table'[Order Date]
    VAR PrevDate =
    CALCULATE (
    MAX ( 'Table'[Order Date] ),
    FILTER (
    'Table',
    'Table'[Product] = EARLIER ( 'Table'[Product] )
    && 'Table'[Order Date] < EARLIER ( 'Table'[Order Date] )
    )
    )
    RETURN
    IF ( ISBLANK ( PrevDate ), 0, DATEDIFF ( PrevDate, CurrentDate, DAY ) )

4 Replies

  •  

    I named the table Fact

     

    Created a key calc column 

     

    key = 'Fact'[Order Date] & 'Fact'[Product]

     

    DAX code of the calc column Delta Days

     

    Delta Days =
    VAR keyRow = 'Fact'[key]
    VAR Prevkey = MAXX ( FILTER ( VALUES( 'Fact'[key] ), 'Fact'[key] < keyRow ), 'Fact'[key] )
    VAR PrevDate = CALCULATE( SELECTEDVALUE( 'Fact'[Order Date] ), 'Fact'[key] = Prevkey, REMOVEFILTERS() )
    RETURN
    IF (
        NOT ISBLANK( Prevkey ),
        INT('Fact'[Order Date] - PrevDate)
    )
     

    If this helped, please consider giving kudos and mark as a solution

    mein replies or I'll lose your thread

    Want to check your DAX skills? Answer my biweekly DAX challenges on the kubisco Linkedin page

    Consider voting this Power BI idea

    Francesco Bergamaschi

    MBA, M.Eng, M.Econ, Professor of BI

  • Shahid12523's avatar
    Shahid12523
    Community Champion

    Days Between =
    VAR CurrentDate = 'Table'[Order Date]
    VAR PrevDate =
    CALCULATE (
    MAX ( 'Table'[Order Date] ),
    FILTER (
    'Table',
    'Table'[Product] = EARLIER ( 'Table'[Product] )
    && 'Table'[Order Date] < EARLIER ( 'Table'[Order Date] )
    )
    )
    RETURN
    IF ( ISBLANK ( PrevDate ), 0, DATEDIFF ( PrevDate, CurrentDate, DAY ) )

    • samc_26's avatar
      samc_26
      Helper IV

      Thank you so much, this worked perfectly!! Much appreciated ğŸ’ª

  • You could create a calculated column like

    Days since previous order = 
    VAR CurrentDate = 'Table'[Order Date]
    VAR PrevDate = SELECTCOLUMNS(
        OFFSET( 1, 
            ALL( 'Table'[Product], 'Table'[Order Date] ), 
            ORDERBY( 'Table'[Order Date], DESC ),
            PARTITIONBY( 'Table'[Product] )
        ), 
        'Table'[Order Date]
    )
    VAR Result = DATEDIFF( PrevDate, CurrentDate, DAY )
    RETURN Result