offdataai
Education · data model template

Higher-Ed Student Success & Retention Analytics data model

Kimball warehouse for higher-ed student success and retention reporting: a periodic-snapshot enrollment fact at student-term grain, a transaction-grain course-grade fact for the GPA build, and an intervention-event fact for advising and early-alert outcomes. SCD2 student preserves as-was cohort and demographic attributes for graduation-rate cohort tracking and equity-gap analysis. PII (student name, DOB, advisor/instructor name) is FERPA-classified and masked.

Higher-education student success and retention analytics sourced from the Student Information System (SIS) and advising / early-alert CRM. Models a term-grain periodic-snapshot enrollment fact (credits, term and cumulative GPA, persistence flag, financial aid) for first-year retention and term-to-term persistence, a transaction-grain course-grade fact for the GPA build, and an advising / intervention event fact for early-alert effectiveness, over conformed term, SCD2 student (cohort/demographics), academic program, course section, instructor, advisor, grade, enrollment status, intervention type, and risk-level dimensions. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballEducationFERPAGDPR
14
tables
127
columns
16
relationships
4
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

enrollmentgradesinterventionsconformed_dimensions

Design decisions

  • Term-grain periodic-snapshot enrollment fact

    Retention and persistence are inherently term-to-term measures; a periodic snapshot at student-term grain captures credits attempted/earned, term/cumulative GPA, and a persistence-to-next-term flag in a single additive row, which is the natural grain for first-year retention and term-to-term persistence reporting.

  • Transaction-grain course-grade fact for the GPA build

    A separate course-section-grain fact preserves every registration, grade letter, and grade-point value so cumulative and term GPA on the enrollment snapshot can be reproduced, and so course-level outcomes (DFW rates by instructor / modality) are queryable.

  • Dedicated intervention / early-alert event fact

    Advising and early-alert events have their own grain (one row per event) and their own measures (resolution days, follow-up count, outcome); modelling them as a separate transaction fact lets us tie interventions back to the student-term snapshot to measure intervention effectiveness on persistence.

  • SCD2 on dim_student to preserve as-was demographics and cohort

    Equity-gap and graduation-rate cohort reporting requires the student attributes (classification, residency, Pell eligibility, first-generation flag) that were true at the time of enrollment, not today; type-2 history on the student dimension is what makes comparable longitudinal cohort analysis possible.

  • FERPA-classified PII on student and staff dimensions

    Student name, date of birth, and advisor/instructor names are FERPA-protected directory and education-record data; tagging them PII with confidential classification and partial masking gives the governance report immediate signal and drives downstream row/column-level access policies in Snowflake.

Tables in the Higher-Ed Student Success & Retention Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (3)

fct_term_enrollment

Grain: one row per student per academic term (periodic snapshot)

Periodic-snapshot enrollment fact at student-term grain for retention/persistence.

ColumnTypeKeys
term_enrollment_keybigintPK
term_keybigint
student_keybigint
program_keybigint
academic_advisor_keybigint
enrollment_status_keybigint
credits_attempteddecimal
credits_earneddecimal
credits_passeddecimal
term_gpadecimal
cumulative_gpadecimal
financial_aid_amountdecimal
is_full_timesmallint
persistence_to_next_termsmallint
currencyvarchar

fct_course_grade

Grain: one row per student per course-section per term (transaction grain)

Transaction-grain course-grade fact — the GPA build at registration level.

ColumnTypeKeys
course_grade_keybigintPK
term_keybigint
student_keybigint
course_section_keybigint
instructor_keybigint
grade_keybigint
credits_attempteddecimal
credits_earneddecimal
grade_pointsdecimal
midterm_grade_pointsdecimal
grade_lettervarchar
withdrew_flagsmallint
incomplete_flagsmallint
passed_flagsmallint

fct_intervention_event

Grain: one row per advising / intervention / early-alert event

Transaction-grain intervention/early-alert fact for advising effectiveness.

ColumnTypeKeys
intervention_event_keybigintPK
event_date_keybigint
term_keybigint
student_keybigint
academic_advisor_keybigint
intervention_type_keybigint
risk_level_keybigint
event_idvarchar
alert_idvarchar
resolution_daysdecimal
follow_up_countinteger
days_to_resolutiondecimal
intervention_outcomevarchar
is_early_alertsmallint

Dimension tables (11)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_monthsmallint
month_numbersmallint
month_namevarchar
quartersmallint
yearsmallint
academic_weeksmallint
is_business_dayboolean

dim_term

Grain: one row per academic term

ColumnTypeKeys
term_keybigintPK
term_codevarcharBK
term_namevarchar
academic_yearvarchar
term_typevarchar
term_start_datedate
term_end_datedate
is_currentboolean

dim_student

Grain: one row per student per SCD2 version (SIS person record)

SCD type 2

ColumnTypeKeys
student_keybigintPK
student_idvarcharBK
student_namevarcharPII
date_of_birthdatePII
gendervarchar
ethnicityvarchar
racevarchar
first_generation_flagboolean
pell_eligible_flagboolean
residency_statusvarchar
classificationvarchar
expected_graduation_termvarchar
cohort_yearsmallint
is_activeboolean

dim_program

Grain: one row per academic program

ColumnTypeKeys
program_keybigintPK
program_codevarcharBK
program_namevarchar
degree_typevarchar
collegevarchar
departmentvarchar
cip_codevarchar
is_stemboolean

dim_course_section

Grain: one row per offered course section

ColumnTypeKeys
course_section_keybigintPK
course_section_idvarcharBK
course_codevarchar
course_titlevarchar
course_subjectvarchar
section_numbervarchar
course_levelvarchar
modalityvarchar
credit_hoursdecimal

dim_instructor

Grain: one row per instructor of record

ColumnTypeKeys
instructor_keybigintPK
instructor_idvarcharBK
instructor_namevarcharPII
departmentvarchar
faculty_rankvarchar
tenure_statusvarchar
employment_typevarchar
is_activeboolean

dim_academic_advisor

Grain: one row per academic / career / financial advisor

ColumnTypeKeys
academic_advisor_keybigintPK
advisor_idvarcharBK
advisor_namevarcharPII
departmentvarchar
caseload_sizeinteger
advisor_typevarchar
is_activeboolean

dim_grade

Grain: one row per grade code on the institutional grading scale

ColumnTypeKeys
grade_keybigintPK
grade_codevarcharBK
grade_pointsdecimal
is_passingboolean
is_withdrawboolean
is_incompleteboolean

dim_enrollment_status

Grain: one row per enrollment status code

ColumnTypeKeys
enrollment_status_keybigintPK
status_codevarcharBK
status_namevarchar
is_active_enrollmentboolean

dim_intervention_type

Grain: one row per advising / early-alert intervention type

ColumnTypeKeys
intervention_type_keybigintPK
intervention_typevarcharBK
descriptionvarchar
intervention_categoryvarchar
intervention_modalityvarchar

dim_risk_level

Grain: one row per at-risk level bucket from the early-alert model

ColumnTypeKeys
risk_level_keybigintPK
risk_levelvarcharBK
descriptionvarchar
score_mindecimal
score_maxdecimal
requires_followupboolean

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_term_enrollment.term_key → dim_term (many-to-one)
  • fct_term_enrollment.student_key → dim_student (many-to-one)
  • fct_term_enrollment.program_key → dim_program (many-to-one)
  • fct_term_enrollment.academic_advisor_key → dim_academic_advisor (many-to-one)
  • fct_term_enrollment.enrollment_status_key → dim_enrollment_status (many-to-one)
  • fct_course_grade.term_key → dim_term (many-to-one)
  • fct_course_grade.student_key → dim_student (many-to-one)
  • fct_course_grade.course_section_key → dim_course_section (many-to-one)
  • fct_course_grade.instructor_key → dim_instructor (many-to-one)
  • fct_course_grade.grade_key → dim_grade (many-to-one)
  • fct_intervention_event.event_date_key → dim_date (many-to-one)
  • fct_intervention_event.term_key → dim_term (many-to-one)
  • fct_intervention_event.student_key → dim_student (many-to-one)
  • fct_intervention_event.academic_advisor_key → dim_academic_advisor (many-to-one)
  • fct_intervention_event.intervention_type_key → dim_intervention_type (many-to-one)
  • fct_intervention_event.risk_level_key → dim_risk_level (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time