Forum Discussion

Megabytze's avatar
Megabytze
Frequent Visitor
7 months ago
Solved

Semester-to-Semester Student Retention Tracking

Hello!  I'm a brand new institutional researcher at a regional college attempting to track & visualize the number of students our school retains from one semester to the next.  I've found several helpful resources that look at customer retention on a monthly or yearly basis (e.g., 1) https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Customer-Retention-Part-3-Period-Of-Stay-Cohort-Analysis/ba-p/1393410  2) https://community.fabric.microsoft.com/t5/Desktop/Student-Retention-Term-by-Term-Fall-to-Fall-Year-by-Year/td-p/726547 3) https://forum.enterprisedna.co/t/cohort-analysis-higher-education-style/3582), but can't quite figure out how to do it when the number of days in each semester varies.

 

Here's what I have for tables so far (no pbix yet):

 

Enrollment Table:

IDSemester TermYearTermIDDept. CodeDiv. CodeFirst DegreeFT/PTLevelProg. CodeProgram SoughtTuition StatusCurrent Cr HoursCumulative Cr HoursCohortProgram Start
Student AFall2202520252RNBSNU0Part time3RNBSNRNBSNHT926Fall 20238/28/2023
Student BFall2202520252RNBSNU0Part time3RNBSNRNBSNLH1287Fall 2024

8/26/2024

 

Term Table:

SemesterYearTermTermIDCodeTerm Start DateTerm End DateCohortTotal Days
Spring2026320253SP20262026-01-052026-04-25Spring 2026110
Fall2025220252FA20252025-08-252025-12-13Fall 2025110
Summer2025120251SU20252025-05-052025-08-02Summer 202589
Spring2025320243SP20252025-01-062025-04-26Spring 2025110
Fall2024220242FA20242024-08-262024-12-14Fall 2024110
Summer2024120241SU20242024-05-062024-08-03Summer 202489
Spring2024320233SP20242024-01-082024-04-27Spring 2024110
Fall2023220232FA20232023-08-282023-12-16Fall 2023110
Summer2023120231SU20232023-05-082023-08-05Summer 202389
Spring2023320223SP20232023-01-032023-04-22Spring 2023109
Fall2022220222FA20222022-08-222022-12-10Fall 2022110

 

The goal is to have it look something like this, with each of the rows denoting cohorts (aka start terms) and the columns denoting subsequent semesters:

 

 

Any insight you can provide here would be so helpful!  I've been chasing my tail trying to make the business-focused tutorials I encounter work for me in higher ed, but I think I need some more training before I'm good enough to translate the info.  Thanks!

 

 

  • Hi Megabytze 

     

    Retention is term-to-term instead date-to-date.

    So instead of
    Days
    Date differences

     

    You can use
    TermID as an ordered time index
    Cohort = first enrolled TermID
    Offset = how many terms after cohort

     

    This is exactly how customer cohort analysis works, just replace month with term.

    Model Setup
    Relationships
    Enrollment[TermID] → Term[TermID] (Many-to-One)
    No need to use Term Start/End Date for retention logic

     

    Required columns
    From Enrollment:
    StudentID
    TermID
    Cohort TermID (first term the student enrolled)

     

    If you don’t have Cohort TermID, create it
    Cohort TermID =
    CALCULATE(
    MIN(Enrollment[TermID]),
    ALLEXCEPT(Enrollment, Enrollment[StudentID])
    )

     

    Create “Term Offset” (This Replaces Month 1, Month 2…)

    In Enrollment
    Term Offset =
    Enrollment[TermID] - Enrollment[Cohort TermID]


    This gives:
    0 = cohort term
    1 = next semester
    2 = semester after that


    Base Measures
    Students in Cohort (Denominator)
    Cohort Size =
    CALCULATE(
    DISTINCTCOUNT(Enrollment[StudentID]),
    Enrollment[Term Offset] = 0
    )

     

    Retained Students (Numerator)
    Retained Students =
    DISTINCTCOUNT(Enrollment[StudentID])

     

    Retention % Measure
    Retention % =
    DIVIDE(
    [Retained Students],
    [Cohort Size]
    )

     

    Build the Matrix Visual
    Rows
    Term[Cohort] or Enrollment[CohortTermID]

    Columns
    Enrollment[Term Offset]

    Rename as
    Term 1
    Term 2
    Term 3

    Values
    Retention %
    (or Retained Students for the count version)

    This will look exactly like your customer retention example, but by semester.


    Please mark it as a solution with headup if this helps you. Thank You!

3 Replies

  • Hi Megabytze 

     

    Retention is term-to-term instead date-to-date.

    So instead of
    Days
    Date differences

     

    You can use
    TermID as an ordered time index
    Cohort = first enrolled TermID
    Offset = how many terms after cohort

     

    This is exactly how customer cohort analysis works, just replace month with term.

    Model Setup
    Relationships
    Enrollment[TermID] → Term[TermID] (Many-to-One)
    No need to use Term Start/End Date for retention logic

     

    Required columns
    From Enrollment:
    StudentID
    TermID
    Cohort TermID (first term the student enrolled)

     

    If you don’t have Cohort TermID, create it
    Cohort TermID =
    CALCULATE(
    MIN(Enrollment[TermID]),
    ALLEXCEPT(Enrollment, Enrollment[StudentID])
    )

     

    Create “Term Offset” (This Replaces Month 1, Month 2…)

    In Enrollment
    Term Offset =
    Enrollment[TermID] - Enrollment[Cohort TermID]


    This gives:
    0 = cohort term
    1 = next semester
    2 = semester after that


    Base Measures
    Students in Cohort (Denominator)
    Cohort Size =
    CALCULATE(
    DISTINCTCOUNT(Enrollment[StudentID]),
    Enrollment[Term Offset] = 0
    )

     

    Retained Students (Numerator)
    Retained Students =
    DISTINCTCOUNT(Enrollment[StudentID])

     

    Retention % Measure
    Retention % =
    DIVIDE(
    [Retained Students],
    [Cohort Size]
    )

     

    Build the Matrix Visual
    Rows
    Term[Cohort] or Enrollment[CohortTermID]

    Columns
    Enrollment[Term Offset]

    Rename as
    Term 1
    Term 2
    Term 3

    Values
    Retention %
    (or Retained Students for the count version)

    This will look exactly like your customer retention example, but by semester.


    Please mark it as a solution with headup if this helps you. Thank You!

    • Megabytze's avatar
      Megabytze
      Frequent Visitor

      Wow, I think that worked - I can't thank you enough for walking me through that!  Is there an easy way to change the column names to Term 1, Term 2?  

  • Your Enrollment sample table does not have enough data.  Please provide sample data that covers your issue or question completely.
    Do not include sensitive information. Do not include anything that is unrelated to the issue or question.
    Please show the expected outcome based on the sample data you provided.

    Need help uploading data? https://community.fabric.microsoft.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-p/963216
    Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523