Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

Time to resolution excluding Weekends

Hi, 

 

I've read through various topics surround this however I haven't been able to reproduce or get this working.

 

I need to calculate the date difference between two dates excluding a weekend.

 

I have two tables with a relation ship between Date & Resolved Date.

How do i calculate difference between Last Resolved Date & Submit date, excluding weekends.

 

DimDate 

 

ResolvedINC

  • Hi Anonymous ,

     

    If you want to count work days, create a measure like so:

    Measure =
    CALCULATE (
        COUNT ( DimDate[Date] ) + 0,
        FILTER (
            DimDate,
            [Is Weekend] = 0
                && [Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                && [Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
        )
    )
    

     

    If you want to calculate the specific time, try to create a measure like so:

    Measure 2 = 
    VAR MinWeekend =
        CALCULATE (
            MIN ( DimDate[Date] ),
            FILTER (
                DimDate,
                DimDate[Is Weekend] = 1
                    && DimDate[Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                    && DimDate[Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
            )
        )
    VAR MaxWeekend =
        CALCULATE (
            MAX ( DimDate[Date] ),
            FILTER (
                DimDate,
                DimDate[Is Weekend] = 1
                    && DimDate[Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                    && DimDate[Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
            )
        )
    VAR MaxWeekend_ =
        IF ( MaxWeekend <> BLANK (), MaxWeekend + 1 )
    VAR DateDiff1 =
        DATEDIFF (
            MAX ( ResolvedINC[Submit date] ),
            MAX ( ResolvedINC[Resolved Date] ),
            SECOND
        )
    VAR DateDiff2 =
        DATEDIFF ( MAX ( ResolvedINC[Submit date] ), MinWeekend, SECOND )
            + DATEDIFF ( MaxWeekend_, MAX ( ResolvedINC[Resolved Date] ), SECOND )
    VAR DateDiff3 =
        DATEDIFF ( MaxWeekend_, MAX ( ResolvedINC[Resolved Date] ), SECOND )
    VAR DateDiff_ =
        IF (
            MinWeekend = BLANK (),
            DateDiff1,
            IF (
                MAX ( ResolvedINC[Submit date] ) < MinWeekend
                    && MAX ( ResolvedINC[Resolved Date] ) > MaxWeekend_,
                DateDiff2,
                IF (
                    MAX ( ResolvedINC[Submit date] ) >= MinWeekend
                        && MAX ( ResolvedINC[Submit date] ) <= MaxWeekend_,
                    DateDiff3
                )
            )
        )
    VAR Days =
        TRUNC ( DateDiff_ / 24 / 3600 )
    VAR Hours =
        TRUNC ( ( DateDiff_ - Days * 24 * 3600 ) / 3600 )
    VAR Minutes =
        TRUNC ( ( DateDiff_ - Hours * 3600 - Days * 24 * 3600 ) / 60 )
    VAR Seconds = DateDiff_ - Minutes * 60 - Hours * 3600 - Days * 24 * 3600
    VAR Result =
        Days & ":"
            & FORMAT ( Hours, "00" ) & ":"
            & FORMAT ( Minutes, "00" ) & ":"
            & FORMAT ( Seconds, "00" )
    RETURN
        Result

     

    BTW, .pbix file attached.

     

     

    Best Regards,

    Icey

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

3 Replies

    • Anonymous's avatar
      Anonymous
      Not applicable

      Icey amitchandak 

      I am struggling with the same issue and i did try mentioned measures and other DAX but no luck here i am sharing with you a sample of the report it would be a great help if you can help

       

      https://1drv.ms/u/s!Aj7YLBYfrzPkil3VcmfrgIPNio5c?e=Lat0Jo

       

      COuntdays = COUNTROWS(FILTER(ALL(Datetable),Datetable[Date]>= SELECTEDVALUE(Table1[Created On]) && Datetable[Date] <=SELECTEDVALUE(Table1[Solved Date]) && NOT(Datetable[WeekDayNum] in {6,7}) && Datetable[Isworkingday] = 1()))
       
      Measure = VAR _st = MAX(Table1[Created On]) VAR _end= SWITCH(MAX( Table1[Status]),"resolved" , MAX(Table1[Resolved Date]) , "active", TODAY(), _st) REturn COUNTROWS(FILTER(Datetable,_st <= Datetable[Date] &&Datetable[Date] <= _end && WEEKDAY(Datetable[Date],2) <6))
  • Icey's avatar
    Icey
    Community Support

    Hi Anonymous ,

     

    If you want to count work days, create a measure like so:

    Measure =
    CALCULATE (
        COUNT ( DimDate[Date] ) + 0,
        FILTER (
            DimDate,
            [Is Weekend] = 0
                && [Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                && [Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
        )
    )
    

     

    If you want to calculate the specific time, try to create a measure like so:

    Measure 2 = 
    VAR MinWeekend =
        CALCULATE (
            MIN ( DimDate[Date] ),
            FILTER (
                DimDate,
                DimDate[Is Weekend] = 1
                    && DimDate[Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                    && DimDate[Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
            )
        )
    VAR MaxWeekend =
        CALCULATE (
            MAX ( DimDate[Date] ),
            FILTER (
                DimDate,
                DimDate[Is Weekend] = 1
                    && DimDate[Date] >= DATEVALUE ( MAX ( ResolvedINC[Submit date] ) )
                    && DimDate[Date] <= DATEVALUE ( MAX ( ResolvedINC[Resolved Date] ) )
            )
        )
    VAR MaxWeekend_ =
        IF ( MaxWeekend <> BLANK (), MaxWeekend + 1 )
    VAR DateDiff1 =
        DATEDIFF (
            MAX ( ResolvedINC[Submit date] ),
            MAX ( ResolvedINC[Resolved Date] ),
            SECOND
        )
    VAR DateDiff2 =
        DATEDIFF ( MAX ( ResolvedINC[Submit date] ), MinWeekend, SECOND )
            + DATEDIFF ( MaxWeekend_, MAX ( ResolvedINC[Resolved Date] ), SECOND )
    VAR DateDiff3 =
        DATEDIFF ( MaxWeekend_, MAX ( ResolvedINC[Resolved Date] ), SECOND )
    VAR DateDiff_ =
        IF (
            MinWeekend = BLANK (),
            DateDiff1,
            IF (
                MAX ( ResolvedINC[Submit date] ) < MinWeekend
                    && MAX ( ResolvedINC[Resolved Date] ) > MaxWeekend_,
                DateDiff2,
                IF (
                    MAX ( ResolvedINC[Submit date] ) >= MinWeekend
                        && MAX ( ResolvedINC[Submit date] ) <= MaxWeekend_,
                    DateDiff3
                )
            )
        )
    VAR Days =
        TRUNC ( DateDiff_ / 24 / 3600 )
    VAR Hours =
        TRUNC ( ( DateDiff_ - Days * 24 * 3600 ) / 3600 )
    VAR Minutes =
        TRUNC ( ( DateDiff_ - Hours * 3600 - Days * 24 * 3600 ) / 60 )
    VAR Seconds = DateDiff_ - Minutes * 60 - Hours * 3600 - Days * 24 * 3600
    VAR Result =
        Days & ":"
            & FORMAT ( Hours, "00" ) & ":"
            & FORMAT ( Minutes, "00" ) & ":"
            & FORMAT ( Seconds, "00" )
    RETURN
        Result

     

    BTW, .pbix file attached.

     

     

    Best Regards,

    Icey

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.