Reporting
Generate institutional reports for federal compliance, enrollment analysis, and academic performance.
Overview
The reporting module provides pre-built reports for common institutional reporting needs, all under the Reports menu:
| Report | Description |
|---|---|
| IPEDS | Federal reporting data for the Integrated Postsecondary Education Data System |
| All Students | Students enrolled in the chosen periods, pivoted by major or minor, with a drill-down to the students behind each number |
| All Grades | Student grade records across terms |
| Grade Summary | Aggregated grade distribution by course or section |
| Midterm Grades | Students with a midterm grade of concern, for registrars, deans, advisors and faculty |
Available Reports
All Students Report
The All Students report counts the students enrolled in the chosen academic years or terms, by major or minor, and lists the students behind any count.
Filters: academic year or term (several of either), campus, major, minor, and whether rows are majors or minors.
Student list columns:
- Student ID, name, preferred first name, preferred and primary email
- Date of birth, gender, ethnicity, religion, races, country of birth, citizenship
- Majors and minors held in the periods on screen, and the student's current majors and minors
- Academic status -- the latest status on file; on a single-term run, the status as of the term's end
- Class standing
- Start Term -- the start term Colleague declares for the student (
STA_START_TERM), at the same academic level the report reads GPA and class standing from. It sorts by the term's start date. It is not the first term the student enrolled in, and the two differ for about one current student in six - Overall GPA and, when exactly one term is selected, Term GPA (migration 275, see below)
GPA columns need their own permission
Overall and term GPA appear only for viewers who hold REPORTS.ALL_STUDENTS.GPA (migration 275), an action node under the report. It is granted to the Registrar and Super Admin roles; anyone else sees the report without the GPA columns, in the CSV export as well. It is separate from GRADING.GPA because students hold that one for their own GPA, and the question here is whether staff may see other students' GPA on a list.
The figures are read from the stored GPA and standing, not recalculated. A student enrolled at two academic levels is reported at the level carrying the most attempted credits in the selected periods; a student with no per-level record falls back to the all-levels figures on the student record.
All Grades Report
The All Grades report provides a detailed view of student grades across courses and terms.
Included fields:
- Student ID and name
- Course code and title
- Section number
- Term
- Grade earned
- Credits attempted and earned
- GPA points
Filters:
| Filter | Description |
|---|---|
| Term | Academic term |
| Course | Specific course |
| Grade | Filter by specific grade |
| Instructor | Filter by faculty member |
Grade Summary Report
The Grade Summary report provides aggregate grade distributions, useful for assessing course outcomes.
Included fields:
- Course code and title
- Section number
- Instructor
- Total enrollment
- Grade distribution (count and percentage per grade)
- Average GPA for the section
Filters:
| Filter | Description |
|---|---|
| Term | Academic term |
| Department | Filter by academic department |
| Course | Specific course |
| Instructor | Filter by faculty member |
Midterm Grades Report
The Midterm Grades report (migration 292) lists, one row per enrollment, the students whose midterm grade is of concern. The screen starts with C- and below selected; any set of letters can be chosen, across every grading scale, and students with no midterm grade can be included. Further filters: term, major, course and instructor. Withdrawn enrollments are left out unless asked for, and dropped or cancelled ones are never listed -- the same population as All Grades.
Each row shows the student, their majors, the course and section, the instructor, the midterm grade with its date, who entered it, and the final grade if one exists. Export it as CSV.
Who sees what. Unlike the other grade reports, this one is meant for advisors and faculty, so its grant scope narrows the rows:
| Role (default grant) | Scope | Rows |
|---|---|---|
| Registrar, Super Admin | ALL | Everyone |
| Academic Administrator | UNIT | Their units' courses or students |
| Advisor | ADVISEES | Their current advisees |
| Faculty | OWN_SECTIONS | Sections they teach |
Where midterm grades come from. A midterm grade is either entered on the grade roster or imported nightly from Colleague. A grade entered -- or cleared -- in the SIS is never overwritten by the import; the report shows the source of each grade.
Reading the All Students report correctly
Rows sum above the unique student total, by design
The report is point-in-time — majors and minors are reported as of the selected term, not as they stand today — and it fans out: a student is counted under every major and minor they hold.
So a double-major appears twice, and adding up the rows gives a number larger than the count of distinct students. That is the intended behaviour, not double counting. If you need a headcount, use the unique total rather than a sum of rows.
Migration 255 disambiguated major labels, which is why several similarly named programmes (six Nursings, for instance) now read distinctly rather than collapsing together.
Reading the All Grades report
Migration 250 added a GPA column to the pivot, and periods that have not yet started are hidden rather than shown empty.
Drill-downs are paged
A drill-down pages the key, not the row. Applying LIMIT over the aggregate projection put the query planner off a cliff — around 45 seconds — so the drill-down selects a page of keys first and then fetches their rows.
Two consequences for anyone calling these endpoints
with_count=false must omit the count entirely, not return zero.
And a student link takes person_id, not student_id — passing an integer student_id to the by-person lookup returns a 500. scripts/person-id-check.mjs enforces this at build time, so a regression fails npm run build rather than reaching a user.
Data freshness after an import
The nightly import ends by running ANALYZE on the tables it writes (analyzeImportedTables in cmd/migrate-daily). Anything that bulk-loads those tables some other way -- a hand-run SQL fix, a dump restore -- should ANALYZE them too, or these reports will plan badly against stale statistics.
Running a Report
- Navigate to Reports and choose the report
- Set the desired filters
- Review results on screen, drill into a number to see its students, or export
Export Options
Every report and drill-down exports as CSV (UTF-8). Spreadsheet programs open it directly.
Scheduling
Reports are generated on demand. For recurring reporting needs, consider setting up a periodic schedule to run and archive key reports at the end of each term.
Data Freshness
Reports reflect the current state of the database at the time they are generated. If you need a point-in-time snapshot (e.g., enrollment as of census date), generate and export the report on the desired date.
Access Control
Each report is its own permission node under REPORTS, and the grant's scope decides which rows a user sees:
| Permission | Report |
|---|---|
REPORTS.IPEDS | IPEDS Reports (unrestricted grants only) |
REPORTS.ALL_STUDENTS | All Students |
REPORTS.ALL_STUDENTS.GPA | The GPA columns of All Students |
REPORTS.ALL_GRADES | All Grades |
REPORTS.GRADE_SUMMARY | Grade Summary |
REPORTS.MIDTERM_GRADES | Midterm Grades |
A UNIT grant limits a report to the org units the user administers. Only Midterm Grades accepts advisee and own-section scopes; at those scopes every other report is empty. Contact your security administrator to request report access. Engineers adding a report: see Adding a Report.