Review Cycle & Ratings
Whether reviews finish, and what the ratings say when they do. The model's job is to treat a rating as what it is: the result of one cycle, on one configured scale, finalized after calibration.
◆ The traps— cycle results, configured scales, the chase list, and what distributions reveal.
| Trap | What goes wrong |
|---|---|
| Ratings are cycle results | A worker's rating belongs to a review cycle, not to the worker. Overwrite it and rating history, trend by org, and rating-at-time-of-exit all become unanswerable. One row per worker per cycle; the latest completed cycle is a view, not the storage. |
| Scales are configuration | Each review template carries its own rating scale, and the text values have no intrinsic order, the same problem job levels have. dim_rating lands each scale with a numeric sort, and averages are computed only within one scale. |
| Completion needs the step | Not-started, in-progress, complete is not enough to run a cycle. The working report says which business-process step each review sits in and who the next action awaits. That list is what closes a cycle on time. |
| Drafts move in calibration | Managers rate, then calibration sessions adjust. The in-progress distribution is a monitoring view, labeled as such; results reporting reads completed reviews only. The rulebar's Never. |
| Distributions are the audit | Rating distributions compared across organizations and managers reveal inconsistent standards; a drifting average over three cycles is inflation. Both need the per-cycle rows this model keeps. |
| The manager of record | Workers change managers mid-cycle. The evaluating manager is snapshotted on the review row; joining today's manager rewrites history. |
◆ The owned model, and the SQL— the review fact, one cycle's completion and distribution in one query.
fct_review lands one row per worker per review per cycle: status, step, overall and potential ratings, the scale key, and the manager of record. Completion and distribution for one cycle:
-- 2026 mid-year cycle: completion, then the completed-ratings distribution
SELECT r.review_status,
drt.rating_label,
COUNT(*) AS reviews
FROM fct_review r
LEFT JOIN dim_rating drt
ON r.rating_key = drt.rating_key
AND r.review_status = 'Complete'
WHERE r.cycle_id = 'MY2026'
GROUP BY 1, 2
ORDER BY 1, drt.rating_sort DESC
Sample output, reshaped. The cycle launched on the same April roster the merit cycle used, 145 workers; 132 reviews are complete, 91.0%:
| rating (5-point scale) | completed reviews | share |
|---|---|---|
| 5 | 9 | 6.8% |
| 4 | 38 | 28.8% |
| 3 | 71 | 53.8% |
| 2 | 12 | 9.1% |
| 1 | 2 | 1.5% |
The 132 rows sum, the average lands at 3.3 on this scale, and the same query grouped by organization is the calibration comparison. Group by cycle instead and three cycles of averages side by side is the inflation check. The completed ratings feed the merit cycle's compa-quartile audit: performance and position in range, crossed. Sample values are illustrative, never client data.
- review cycle
- One run of a review template across a population. Ratings belong to it.
- rating scale
- The template's configured values. Landed with a numeric sort per scale.
- calibration
- The sessions that adjust draft ratings before finalization. Results are post-calibration.
- chase list
- Reviews by business-process step and awaiting party. How a cycle finishes on time.
- rating inflation
- Averages drifting up across cycles. Visible only with per-cycle rows.
- manager of record
- The evaluating manager, snapshotted on the review row.
- nine-box
- Performance crossed with potential, one placement per worker per cycle. A snapshot, trended over cycles.