CEDAR brings enrollment, program, course, and outcome data into one workspace so departments can move from a question to a defensible next step.
In Pathways > Course to Major, course + instructor signals keep course titles with the course number so topics courses do not collapse into one generic row.
High-waitlist rows can take you straight to the Waitlists tool, where you can inspect who is waiting by program and classification.
Explore > Headcount counts unique students with active declared program records, not students sitting in a department's courses.
Explore > Cancellations shows cancelled sections and timing relative to course start, with repeated cancellation patterns by course.
Explore > Gen Ed can be filtered by campus, college, department, area, level, and term window before reviewing enrollment and outcome patterns.
Pathways > Major Changes separates pre-major, full-major, conversion, and departure timing so chairs can see movement without treating it as a verdict.
Course Dynamics shows DFW, early drops, and late drops as term-by-term lines for one selected course.
Course Dynamics breaks DFW outcomes out by classification and major so the aggregate rate has human context.
Course Dynamics can show whether students who DFW the selected course were passing most other courses or struggling across the term.
Course Retention compares next-term persistence for the selected course against department and college patterns.
Dept Trends highlights courses with the largest long-term enrollment increases and decreases.
Dept Trends calls out repeated topics courses so recurring special topics are reviewable without looking like duplicate rows.
Open Seats keeps course titles in the course identity where needed, so topics sections do not repeat or collapse incorrectly.
Admin > Data & Usage includes mapping review tables for program, subject, and department codes.
Admin > Changelog mirrors the homepage updates so users can see what changed without leaving CEDAR.
Dept Trends now settles on a single department and campus for the whole page. Refreshing the department picker can no longer leave the Gen Ed tab empty while every other tab still shows the department you selected.
Sequence effects, instructor effects, retention summaries, course pairs, and event-adjacent courses now live in files named for the question they answer, so analysts working with the analyses directly find the right one without reading through unrelated work.
The curriculum timing analysis was absent from the generated function reference because its documentation block had been split in two by intervening code. It is reunited, and the entry-heatmap reference now describes what that analysis actually returns rather than a helper that no longer exists.
The contributor reference now carries the rules themselves and links the measurements, incidents, and per-function detail behind them as separate pages, rather than holding all of it inline.
Dashboard headline headcounts describe departmental major and second-major program records in the selected term; course activity is counted separately.
Dashboard program headcount. Dashboard headline headcounts describe departmental major and second-major program records in the selected term; course activity is counted separately.
Exclusions. Students merely taking departmental courses without a matching program record are not part of these headcounts.
Select a department, then click Gather Data to load its dashboard.
Selected-term headcount and recent movement worth noticing.
Current-term enrollment signals for the selected department and campus. Above/below average compares to the recent same-term average: last 3 years, with at least 2 prior same-season offerings.
Courses running higher than the recent average.
Courses running lower than the recent average.
Courses with unusually high pre-census drop counts; rates show whether volume changed with enrollment.
Courses with unusually high post-census drop counts; rates show whether volume changed with enrollment.
Course-level SCH this term compared with the recent same-season pattern.
Selected-term sections under the low-enrollment thresholds for associate dean and chair review. Uses the same low-enrollment helper as the Enrollment tab and omits green buffer rows.
Selected-term course groups with class-list true demand.
Quick flags for new, missing, and recurring offerings in the selected term.
Courses whose course number and title have not appeared in the historical data. Topics courses count each distinct title separately.
Courses that ran in this same term type two years ago but are not scheduled this term.
Topics courses running this term that have been offered at least twice before under the same course number and title.
Program overlap and course-audience shares that moved enough to notice this term. Dashboard threshold: at least 10 percentage points away from the prior three same-season terms, with enough students present. Full audience detail is in Dept Trends > Enrollment.
Longitudinal department patterns in students, enrollment, degrees, credit hours, Gen Ed, and course outcomes.
Define a student population, then explore course timing, roadblocks, sequences, and major changes. Institution-level Gen Ed patterns are in Explore > Gen Ed.
Pathways population. A selected group of students built from observed program or demographic records, with outcomes defined relative to the selected programs.
Exclusions. Program scope, level, and outcome selections determine inclusion; per-analysis eligibility can further reduce the population.
Roadblocks stop-out comparison. Compares the DFW-versus-pass stop-out gap for the selected population with the same gap for other students, using each student's first eligible observed outcome in a course and campus.
Exclusions. Later outcomes do not add observations. Agreeing first-term records collapse to one; conflicting first-term outcomes exclude that student-course-campus comparison. Coverage notes report these counts and invalid records before size thresholds.
Read the counts and stop-out rates together. Pop gap is DFW stop-out minus pass stop-out; Excess gap subtracts the same comparison for other students. Gaps are percentage points (pp). Impact ranks the positive excess gap times the population DFW count; it is not an estimate of students lost because of a course.
Pathways guide →Course timing. When the selected population takes each course, using classification by default, reconstructed attempted-credit bands, or relative enrolled term.
Exclusions. Credit axes drop unknown/invalid timelines and report the excluded count. The four-way classification axis excludes classifications outside Freshman/Sophomore/Junior/Senior.
Historical credit position. Per-term credit positions are reconstructed from class-list credit histories; pull-stamped Banner cumulative totals are not historical positions.
Exclusions. timeline_valid must be true; missing or invalid credit positions are excluded and counted in the local scope note.
The population defines the focal department and subject prefixes; this table then scans all enrolled students in those focal-subject courses — it is not limited by the Population scope dropdown. A student counts as entering only when their first major or pre-major record in this department appears after the course term. Same-term department records are excluded because the course did not clearly precede entry. By default the To term ends one regular term before the newest complete term — students enrolled more recently have had no time to enter the department, so including them deflates Entry %. The Courses Before Major Entry heatmaps use a different scope: selected-population students only.
For students who entered the selected population, this shows courses taken before their first focal program record. T−1 is the prior regular term; summer is skipped by default. Empty cells did not meet the minimum-student threshold. Campus, level, Gen Ed, and date-range association filters do not apply to these heatmaps.
One row per major. Arriving to counts students who switched into that major from somewhere else; leaving for elsewhere counts students who switched out of it. The same major can show up in both.
Each row is a specific from→to switch. Switches involving only a few students are hidden so individuals can't be identified. Median completed / attempted UNM credits come from class-list-derived observed credits through the term before the switch posted.
What students who left the selected unit were taking in their last term here. A switch reaches Banner the term after a student actually moves, so this is the term they were sitting in while deciding — not the term the change showed up.
Every course is shown twice: how often it turned up in those final terms, and how often it turns up in a normal term for this group. If the two numbers are close, the course is just part of what everyone here takes. A course only stands out when the first is well above the second.
Use these when you need to audit the summaries above. The movement table is aggregated; the change-events table is student-level.
Enrollment trends, student flows, grade distributions, and outcomes for a single course.
Select a course, then click Analyze Course.
A same-season view of enrollment history, registration activity, active sections, and average section size. Crosslisted offerings count every listing together, each student once; the snapshot also gives the count under each code. Campuses remain separate so differences between Main, Online, and branch offerings stay visible.
Reconstructed first-day enrollment. Students enrolled on the first class day of their section, reconstructed from each class-list row's status date. Enrolled students dated on or before that day count, as does anyone who dropped after it.
Exclusions. Waitlisted students, drops dated on or before the first day, and enrollments added after it.
Reconstructed census enrollment. Class-list registered enrollment plus late drops (DG/DW) estimates the population that stayed beyond the early-drop period.
Exclusions. Early drops (DR/DD) and waitlists are excluded.
Class-list registered enrollment. Distinct students still registered in the selected class-list group when the extract was pulled; only RE, RS, and RR statuses count.
Exclusions. Waitlists and all drops are excluded from registered enrollment.
The latest term in the selected term type beside the same term in the three years before it, one table per campus. A crosslisted term also shows each code's own count; hover an earlier year for its split. The plots below show the full history.
The number of active home sections in each same-season term. A crosslist family is represented once, not once per partner code.
Crosslist-aware total enrollment divided by active home sections.
Reconstructed first-day enrollment. Students enrolled on the first class day of their section, reconstructed from each class-list row's status date. Enrolled students dated on or before that day count, as does anyone who dropped after it.
Exclusions. Waitlisted students, drops dated on or before the first day, and enrollments added after it.
Reconstructed census enrollment. Class-list registered enrollment plus late drops (DG/DW) estimates the population that stayed beyond the early-drop period.
Exclusions. Early drops (DR/DD) and waitlists are excluded.
Class-list registered enrollment. Distinct students still registered in the selected class-list group when the extract was pulled; only RE, RS, and RR statuses count.
Exclusions. Waitlists and all drops are excluded from registered enrollment.
This page's scope. First day and Census are the reconstructed definitions above; Final is the registered definition, which is current registration while a term is in progress. The selected course's active section family is resolved through the same pipeline used by Overview. For a crosslisted offering, registrations under every partner code are combined and students are deduplicated within delivery campus and term before the status buckets are summarized. Early and late drops remain visible as separate lifecycle counts.
The three versioned class-list measures above, using the same crosslist-family totals as Overview. Census minus final is the late-drop count. First day minus census is mostly early drops after classes began, offset by students who added late. Neither reconstruction is a frozen roster.
Separates DR/DD drops before the grade-consequence deadline from DG/DW late withdrawals. Early drops dated after the first class day are in the first-day count but not census; late drops explain the difference between Census and Final.
Reference rows for the plotted crosslist-family counts, including same-term-type historical averages and the drop buckets used to distinguish pressure from survival. A dash marks a term whose first day cannot be reconstructed.
What you are looking at. The treemap and table show what students took alongside this course. The flow diagrams trace what they took the term before (left) and the term after (right). Rectangle area represents co-enrolled student-term enrollments; band thickness represents the average number of students per term who followed a path — so a thick band is a well-worn route, not a single unusual term. There is one diagram per term type, because fall and spring pathways often differ.
What it cannot tell you. These are observed patterns, not requirements and not causes. A heavy band may be a prerequisite, a scheduling convenience, or coincidence, and the diagram cannot distinguish them. It also is not one group of students followed all the way through — each band is counted separately, so you cannot read a single cohort across the whole picture. Paths below your minimum are hidden, so this shows the main routes rather than every route.
When it is useful. Seeing which courses reliably feed yours, or which yours feeds, helps with timetabling and seat planning — if forty students a term move from your course to the next one, that is next term's demand. It also shows whether a catalog prerequisite matches what students actually do, and surfaces informal pathways students have built that the curriculum does not name. If your course is a broad elective with no sequence, expect a diffuse picture — that is a finding too.
Full methodology →The 20 most common same-campus, same-term companion courses. Rectangle area shows co-enrolled student-term enrollments; the table reports both exact counts and the share of selected-course student-term enrollments taking both.
Immediate prior-term and next-term pathways, shown separately by term type.
Shows the student mix in this course by classification and major, split by term type and trended over time. Counts are based on distinct registered class-list students.
Top 5 classifications plus Other, so each donut sums to 100%. Shares are of average total enrollment for that term type.
Top 5 majors plus Other. The full major list is in the table below.
Every major in this course, as a share of enrollment each term — the full list behind the top-5 donuts above.
Compares each term with strictly earlier matching offerings. Saturation uses the class-list census proxy over DESR scheduled capacity, drop-volume alerts remain count-based with lifecycle rates for context, and High Waitlists uses shared class-list true demand.
Courses with available capacity matching your filters, with DFW history and year-over-year schedule comparisons.
Students waiting for enrollment in full courses, by count, major, and classification. Waitlist status is a live registration state, so it is only meaningfully populated for the current term — past terms retain only the few students still waitlisted when the term closed. A nearly empty result for an earlier term means the data was not retained, not that there was no demand.
Class-list waitlist demand. Waitlists, Regstats, and the Department Dashboard count distinct WL students after removing anyone already registered in the same course-title, term, delivery-campus, college, and part-of-term scope.
Exclusions. Students with matching RE/RS/RR registered rows, duplicate waitlist rows within that group, and courses on the shared excluded-course list.
Saved course-demand projections with stability, evidence depth, aftcast accuracy, planning guidance, and row-level detail.
Saved enrollment projections. Saved Spring projections estimate first-day / ever-registered class-list demand for the pooled Albuquerque and online market; expected census applies historical retention.
Exclusions. Unmonitored courses and unsupported target seasons are outside this model. Shiny does not fit or select models during a session.
Table columns
Select a course for bias-correction, population-fit, capacity, and full method evidence.
Full methodology →One published projection per course for the selected target term, with the evidence behind it. Select a course for full method, capacity, and bias detail.
Section schedules from DESR and distinct-student lifecycle counts from class lists, with campus-safe crosslist handling.
Section enrollment and available seats describe the retained DESR snapshot; crosslist handling depends on the displayed grouping. Group by controls the displayed row grain; when Course is grouped, Campus remains in the key. DESR Enrl sums the contributing rows' enrollment, while XL-aware Enrl counts each crosslist group's combined total once within a displayed row. DESR Min/Max is applied to DESR Enrl after grouping.
DESR enrollment and available seats. Section enrollment and available seats describe the retained DESR snapshot; crosslist handling depends on the displayed grouping.
Exclusions. Filters and home/crosslist handling determine which sections contribute; check the local section scope.
CEDAR-classified home rows for external crosslists, plus non-crosslisted courses. Same-subject internal crosslists retain their separate course rows.
Sections crosslisted across the undergraduate/graduate divide — at least one section at or below 499 paired with one at 500 or above. Each group appears once (home section shown).
External crosslist groups shown on the row CEDAR classifies as home. The partner course belongs to another department.
External crosslist partner rows whose corresponding home row belongs to another department.
Every section including all crosslist partner rows. Crosslisted courses appear multiple times — once per subject code.
Distinct students still registered in the selected class-list group when the extract was pulled; only RE, RS, and RR statuses count. Class-list registered enrollment plus late drops (DG/DW) estimates the population that stayed beyond the early-drop period. Rows are fixed at course + delivery campus + college + term. Group by, DESR Min/Max, and the DESR crosslist tabs do not change this table.
Class-list registered enrollment. Distinct students still registered in the selected class-list group when the extract was pulled; only RE, RS, and RR statuses count.
Exclusions. Waitlists and all drops are excluded from registered enrollment.
Reconstructed census enrollment. Class-list registered enrollment plus late drops (DG/DW) estimates the population that stayed beyond the early-drop period.
Exclusions. Early drops (DR/DD) and waitlists are excluded.
Ever Registered Proxy adds all drop statuses to registered students; it can include pre-term churn and is not a frozen first-day roster. Waitlisted is a status audit column; use the Waitlists report for cross-section true demand.
Sections running under the review thresholds, split by course level because the bar differs for each. Set the thresholds below to match your own review rule. For current and past terms this reports what enrollment actually was; for a future term there is no enrollment yet, so it compares the schedule against each course's own history and flags what looks at risk — the banner tells you which mode you are in.
Current / past terms (alerts mode):
Future terms (concerns mode):
Color bands: red = below 50% of threshold; yellow = 50–75%; blue = 75–100%; green = meets or exceeds threshold.
Full methodology →Crosslisted courses that span the undergraduate/graduate boundary (at least one section ≤499 and one ≥500). The Sections column shows all partner courses in the group. Enrollment is the combined total.
Which courses in your current filters are growing or shrinking. Trends fit a straight line through each course's last six offerings, so a course needs at least two offerings to appear and a single unusual term can tilt a short series. Treat the lists as a shortlist to look into, not a ranking. For curated chair-facing patterns, use Dept Trends > Enrollment.
Total enrollment broken out by campus and course level across your selected filters and terms.
A filter-driven workspace for exploring course enrollment trajectories. For curated chair-facing patterns, use Dept Trends > Enrollment. Based on linear regression across each course's last 6 offerings; courses with fewer than 2 offerings are excluded.
Unique students with matching Academic Studies program records in each term. Combined major, minor, and concentration filters require membership in the same term.
Aggregate view of Gen Ed enrollment and grade outcomes.
The comparative view of Gen Ed: how one department's courses stack up against Gen Ed as a whole, and how peer departments compare with each other. Select departments to get a labelled card row for each, measured against the overall benchmark. For one department's own Gen Ed detail, use Dept Trends > Gen Ed.
Delivery mode and the mix of majors sitting in Gen Ed courses across the selected terms.
Face-to-face versus online enrollment each term.
Which majors the Gen Ed seats are serving.
The highest-enrolling Gen Ed courses, with delivery campuses kept distinct.
Gen Ed teaching load by department: how many courses each offers and how much enrollment it carries.
The share of classified course attempts that did not pass. By default only A+ through C, CR, and passing retake equivalents pass; non-audit late drops count as DFW. AUD is excluded even with late-drop status. Each term's attempt counts separately, even when a section number (CRN) is reused.
This table's scope. Each row keeps delivery campus separate and requires at least 5 classified attempts. DFW % equals Non-W DFW % plus W %. Early Drop % uses attempts plus early drops as a different denominator. The overall DFW card uses all classified attempts in the selected scope, so it is not calculated from only the rows that clear this display threshold.
Course DFW / nonpassing rate. The share of classified course attempts that did not pass. By default only A+ through C, CR, and passing retake equivalents pass; non-audit late drops count as DFW. AUD is excluded even with late-drop status. Each term's attempt counts separately, even when a section number (CRN) is reused.
Exclusions. AUD is excluded from numerator and denominator regardless of registration status, including DG/DW. Early drops never count as DFW. Blank/NA grades are excluded unless late-drop status supplies the withdrawal outcome.
Full grade spread across the selected Gen Ed courses, split by campus so rows line up with the DFW table above.
Cancelled sections matching your filters, with timing shown relative to course start.
Source extract dates for the datasets currently loaded in this app. Missing dates are not evidence of a successful update.
| Dataset | Rows | Fall 2026 | Summer 2026 | Spring 2026 | Fall 2025 |
|---|---|---|---|---|---|
| Sections | 211,903 | 2026-10-15 | 2026-10-15 | 2026-08-06 | 2025-11-05 |
| Students | 1,855,223 | 2026-10-15 | 2026-10-15 | 2026-08-06 | 2026-03-07 |
| Programs | 542,922 | 2026-10-15 | 2026-10-15 | 2026-08-06 | 2025-11-06 |
| Degrees | 65,052 | 2026-10-15 | 2026-10-15 | 2026-08-06 | 2026-03-11 |
| Faculty | 29,511 | Not available | Not available | Not available | 2025-04-07 |
App snapshot loaded: 2026-10-15 14:05 UTC . The morning refresh reloads this snapshot; this table does not poll the source files.
Whether the loaded tables can actually be joined to each other on student_id. Student IDs are hashed once at ingest and frozen into the stored file, so a MyReports pull that presents the raw ID in a different surface form produces a different hash for the same person — rows that can never be joined again. Nothing downstream can repair it.
Every table is compared term by term against cedar_students, whose class lists are the only source ingested as one continuous series. A term with records and zero matches is the signature of a hash mismatch; a table covering a different population (applicants who never enrolled) sits partway in every term and never at zero.
Terms that fail are listed first. Anything marked “none” needs the source report repulled for that term — see ISSUES.md I1.
Department, subject, and program mappings used by Cedar at startup. Mapping issues are surfaced here so unusual Banner codes can be reviewed without blocking the app.
Everything settled by editing a mapping file in institution/unm/, largest first, in three tabs: Programs (including mapped colleges Banner's Translated College disagrees with, and codes the data uses that no file has), Course subjects, and College values no file names. Each row opens with what it is: Banner code, the code Banner uses; Name, the code's own name (a program's name in programs.csv; a course subject has none, so its tab shows the college that teaches it instead); Kind; Where, the file and line for a local checkout; and Needs, what to supply, which opens that line (or the file, for a new row). Reported today as is what the stored tables carry now: an unconfirmed code has no department until its row is confirmed and the tables are rebuilt. Suggested department is the department (CEDAR unit) the mapping assistant thinks should own it, and Confidence says how far to trust that, with the evidence on hover.
Problems no mapping can fix, found by the same checks: values that are errors in the source data. They are listed so they can be reported to whoever owns the source.
The rules that place or drop rows without a mapping-file row, with how many rows each touches in the loaded data and where it is coded. With the decisions above and the tables below, they account for every department, college and campus a count is assigned to.
Every confirmed programs.csv row: program code and name to department (unit) code and name. A row that applies in only one college, such as branch-campus BADM and CRIM, says which; a program no department owns says so.
Every confirmed subjects.csv row: course subject to department (unit) code and name. A row that applies only to one college's sections or one course level says which. Use this when interpreting course ownership.
Every department (unit) in units.csv: its code, name, home college, and kind -- a department, a program, or a college-wide unit for courses no department owns.
Every college in colleges.csv: its code and name, the other values sources use for it, which the transform translates to its code (ED is EH), and how many departments it is home to.
Every campus code: the codes R/lists/campuses.R defines, and any the loaded data uses that it does not. Sections and enrollments count the campus that taught them; the last column counts students by their home campus, as class lists code it. Program records name the home campus instead (see Counting rules).
Preview shows the newest 500 events in the selected range. Summary counts include all matching events; archived history remains available by selecting older dates.
CEDAR caches expensive lookup calculations, including course-flow analysis, to speed up repeated Course Dynamics requests. The cache automatically invalidates when data changes.
Dept Trends analytical tables and ready-to-render charts are cached to disk by department, campus scope where applicable, report window, code version, visual palette, and source-data fingerprints. Standard production scopes are warmed after data refreshes.
Dept Dashboard snapshots are cached by department, campus scope, selected term, date, and CEDAR table hashes. Production data refreshes warm the primary audience dashboards each morning.
College comparison benchmarks in the Pathways Population tab are cached by CEDAR current term, college, campus, student level, and population scope. Clear this after changing the benchmark logic or when a mid-semester data correction should be reflected immediately.
CEDAR learns separate fresh and cache-hit ranges from recent browser-visible runs. The table uses medians for typical performance and the 90th percentile to expose slow runs under load. It separates calculation, waiting/delivery, browser settling, retained result size, worker memory, and output payload size.