Forum Discussion

TimmK's avatar
TimmK
Helper IV
3 years ago
Solved

How to Dynamically Subtract Variable Days?

For simplicity I have a table with the three columns "Order Key", "Date" and "Days".

 

I would like to use a DAX measure (or if this is not possible a calculated column) to subtract the days from the date for each row. Additionally, if the result of the calculation is a date that is on a Saturday another day should be subtracted and if it is a Sunday two additional days should be subtracted. How can I do this?

 

 

  • You could create a measure like

    Adjusted date =
    VAR ReferenceDate =
        SELECTEDVALUE ( 'Table'[Date] )
    VAR ReferenceDays =
        SELECTEDVALUE ( 'Table'[Days] )
    VAR BaseDate = ReferenceDate - ReferenceDays
    VAR Result =
        SWITCH ( WEEKDAY ( BaseDate ), 1, BaseDate - 2, 7, BaseDate - 1, BaseDate )
    RETURN
        Result
    

9 Replies

  • You could create a measure like

    Adjusted date =
    VAR ReferenceDate =
        SELECTEDVALUE ( 'Table'[Date] )
    VAR ReferenceDays =
        SELECTEDVALUE ( 'Table'[Days] )
    VAR BaseDate = ReferenceDate - ReferenceDays
    VAR Result =
        SWITCH ( WEEKDAY ( BaseDate ), 1, BaseDate - 2, 7, BaseDate - 1, BaseDate )
    RETURN
        Result
    
    • TimmK's avatar
      TimmK
      Helper IV

      johnt75 Ah, actually the last part unfortunately does not work as intended. For example, let us say the reference date is November 21, 2022 (Monday) and 3 days should be subtracted. Then based on your measure the result would be November 18, 2022 (Friday). However, it actually should be November 16, 2022 (Wednesday) because it should be 3 workdays earlier, which means November 21, 2022 - 2 weekend days - 3 workdays.

       

      Could you please help with a solution?

      • johnt75's avatar
        johnt75
        Super User

        Try

        Adjusted date =
        VAR ReferenceDate =
            SELECTEDVALUE ( 'Table'[Date] )
        VAR ReferenceDays =
            SELECTEDVALUE ( 'Table'[Days] )
        VAR BaseDate = ReferenceDate - ReferenceDays
        VAR WorkingDaysDiff =
            NETWORKDAYS ( BaseDate, ReferenceDate )
        VAR Result = BaseDate - ( ReferenceDays - WorkingDaysDiff )
        RETURN
            Result
        
  • Try this:
     
    Adjusted date =
    VAR ReferenceDate =
        SELECTEDVALUE ( 'Table'[Date] )
    VAR ReferenceDays =
        SELECTEDVALUE ( 'Table'[Days] )
    VAR BaseDate = ReferenceDate - ReferenceDays
    VAR Result =
        SWITCH ( 
        WEEKDAY ( BaseDate ), 
        1, BaseDate - 4,
        2, BaseDate - 5,
        3BaseDate - 5,
        4BaseDate - 5,
        BaseDate - 3
    )
    RETURN
        Result
    • TimmK's avatar
      TimmK
      Helper IV

      Thanks, but this results in a lot of additional rows and wrong dates. 😕