Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
Megabytze
Regular Visitor

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-O...  2) https://community.fabric.microsoft.com/t5/Desktop/Student-Retention-Term-by-Term-Fall-to-Fall-Year-b... 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:

Screenshot 2026-01-03 153021.png

 

Screenshot 2026-01-03 153004.png

 

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!

 

 

1 ACCEPTED SOLUTION
krishnakanth240
Continued Contributor
Continued Contributor

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!

View solution in original post

3 REPLIES 3
krishnakanth240
Continued Contributor
Continued Contributor

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!

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?  

lbendlin
Super User
Super User

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-...
Want faster answers? https://community.fabric.microsoft.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447...

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

December 2025 Power BI Update Carousel

Power BI Monthly Update - December 2025

Check out the December 2025 Power BI Holiday Recap!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.