Forum Discussion

Gingerjeans88's avatar
Gingerjeans88
Helper IV
6 years ago
Solved

DAX Measure help! % calculation

Hello hello helpful folk, 

 

I need a little help with a measure. 
I'll give you the high level requirement then explain table structure:

 

I need to be able to calculate the % of college applicants who attended a careers day before they applied. 
Every student has a Student record in the Student table [StudentId], which is related to the Applications table [StudentValueID] by a 1:N relationship. They can have multiple but mostly just have one, and we're concerned with their first application anyhow. 
Their attendance at a Careers Day is recorded by an Event Response record with a [Type] of 'Careers Day', these responses are child records of an Events table (1:N). 

Essentially - I want to see the percentage of students with an event response, where the event response date is earlier than the date of their application. 

Can provide visuals of table structure if needed but hopefully the above is explanatory enough! 

  • Here is one way to approach this one

     

    % Students Career Day First =
    VAR __summarytable =
        ADDCOLUMNS (
            VALUES ( Students[StudentID] ),
            "@AppDate", CALCULATE ( MIN ( Applications[Date] ) ),
            "@MinCareerDay", CALCULATE ( MIN ( Events[Date] ), Events[Type] = "Careers Day" )
        )
    RETURN
        DIVIDE (
            COUNTROWS ( FILTER ( __summarytable, [@MinCareerDay] < [@AppDate] ) ),
            COUNTROWS ( __summarytable )
        )

     

    If this works for you, please mark it as the solution.  Kudos are appreciated too.  Please let me know if not.

    Regards,

    Pat

5 Replies

  • mahoneypat's avatar
    mahoneypat
    Microsoft Employee

    Here is one way to approach this one

     

    % Students Career Day First =
    VAR __summarytable =
        ADDCOLUMNS (
            VALUES ( Students[StudentID] ),
            "@AppDate", CALCULATE ( MIN ( Applications[Date] ) ),
            "@MinCareerDay", CALCULATE ( MIN ( Events[Date] ), Events[Type] = "Careers Day" )
        )
    RETURN
        DIVIDE (
            COUNTROWS ( FILTER ( __summarytable, [@MinCareerDay] < [@AppDate] ) ),
            COUNTROWS ( __summarytable )
        )

     

    If this works for you, please mark it as the solution.  Kudos are appreciated too.  Please let me know if not.

    Regards,

    Pat

    • Gingerjeans88's avatar
      Gingerjeans88
      Helper IV

      Hi Pat mahoneypat 

       

      You are a star, thank you! However - the Event Date is on the Event, and I need to return the Students with an Event Responses where the related Event's date is before the earliest application date. I'm not sure the @ MinOpenDay is doing this? What do you think?

      I have, however, pulled the related Event's date onto each Event Response with a calculated column, so I now have:

       

      Event Responses [Event Date] as a calculated column,

      as well as Students[EarliestApplicationDate] to avoid needing to evaluate across all Students' application records. This could simplify the measure but wouldn't work as well with a summary table no?

      • mahoneypat's avatar
        mahoneypat
        Microsoft Employee

        I think it is doing that comparison in the filter part in the return statement. Please let me know if you are getting incorrect results.

        Regards

        Pat

         

  • Quick clarification /amendment because of a typo:

    *Essentially I want to see the percentage of students with a Careers Day event response, where the careers day event response date is earlier than the date of their application.