Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago
Solved

Count Days Since last OSHA Incident

Hello, 

 

I'm stumped. I need help creating a count of days between "Yes" recordable events, and count of days since our most recent "Yes" OSHA Recordable. 

 

Date of IncidentIncident TypeOSHA Recordable
01/20/2019InjuryYES
3/14/2019InjuryNO
4/12/2019Near HitNO

4/25/2019

InjuryYES

 

Thank you in advance! 

  • Anonymous's avatar
    Anonymous
    6 years ago

    Anonymous 

    In this case, I would suggest you to create a column instead of a measure. See my sample below, hope it makes sense for you.

    count since last yes =
    IF (
        Sheet6[OSHA Recordable] = "Yes",
        DATEDIFF (
            CALCULATE (
                MAX ( [Date of Incident] ),
                FILTER ( Sheet6, [Date of Incident] < EARLIER ( Sheet6[Date of Incident] ) ),
                FILTER ( Sheet6, [OSHA Recordable] = "Yes" )
            ),
            [Date of Incident],
            DAY
        ),
        BLANK ()
    )

     

    Best,
    Paul

5 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi,  

    I assumed that your data has more than just the 4 rows. Basically you use DATEDIFF function:

    1. Count days between the last yes and the second last yes 

     

    1. Count days between the last yes and the second last yes 
    Countdays between two Yes = 
    var Lastyes = CALCULATE(LASTDATE(Sheet5[Date of Incident]),
                        FILTER(Sheet5,[OSHA Recordable]="YES"))
    
    var Seclastyes = CALCULATE(LASTDATE(Sheet5[Date of Incident]),
                        FILTER(Sheet5,[Date of Incident]<Lastyes),
                            FILTER(Sheet5,[OSHA Recordable]="YES"))
    
    Return DATEDIFF(Seclastyes,Lastyes,DAY)

     

    2. Count days between the last yes and now.

     

    Countdays since recent yes = 
    var Lastyes = CALCULATE(LASTDATE(Sheet5[Date of Incident]),
                     FILTER(Sheet5,[OSHA Recordable]="YES"))
    
    Return DATEDIFF([01Lastyes],NOW(),DAY)

     

    There is the pbix if needed.

    https://qiuyunus-my.sharepoint.com/:u:/g/personal/paul_qiuyunus_onmicrosoft_com/ERdc7wQicIhEr9oL-2i5KdIB1S_837dK135IE4ANerwNvQ?e=tNc645

    Best, 
    Paul

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hello Paul, 

       

      Thank you very much for this! When I plugged these in the "countdays between two yes" it only gives me the number of days between the last two OSHA recordables of the month. How could I expand this DAX to count every day between every yes? Again, thank you Anonymous !

       

      2018Count of OSHA RecordableCountdays between two Yes
      March37
      11 
      221 
      291 
      April211
      121 
      231 
      • Anonymous's avatar
        Anonymous
        Not applicable

        Anonymous 

        In this case, I would suggest you to create a column instead of a measure. See my sample below, hope it makes sense for you.

        count since last yes =
        IF (
            Sheet6[OSHA Recordable] = "Yes",
            DATEDIFF (
                CALCULATE (
                    MAX ( [Date of Incident] ),
                    FILTER ( Sheet6, [Date of Incident] < EARLIER ( Sheet6[Date of Incident] ) ),
                    FILTER ( Sheet6, [OSHA Recordable] = "Yes" )
                ),
                [Date of Incident],
                DAY
            ),
            BLANK ()
        )

         

        Best,
        Paul

  • Nathaniel_C's avatar
    Nathaniel_C
    Community Champion

    Hi Anonymous ,
    Try this:

    Let me know if you have any questions.

    If this solves your issues, please mark it as the solution, so that others can find it easily. Kudos 👍are nice too.
    Nathaniel

    Date Diff =
    VAR _currDate =
        MAX ( injTable[Date of Incident] )
    VAR _pastDate =
        CALCULATE (
            MAX ( injTable[Date of Incident] ),
            ALLEXCEPT ( injTable, injTable[OSHA Recordable] ),
            injTable[Date of Incident] < _currDate
        )
    RETURN
        IF (
            MAX ( injTable[OSHA Recordable] ) = "YES",
            DATEDIFF ( _pastDate, _currDate, DAY )
        )