Compensation Grade & Range
The structure pay is measured against. The grade sets the band, the grade profile localizes it, and the range's min, mid, and max drive compa-ratio, range penetration, and quartiles. Get the range wrong and every pay metric downstream is wrong.
◆ The structure— grade, grade profile, range, and steps, and which one a worker's pay is actually measured against.
| Piece | What it is | Note |
|---|---|---|
| Compensation grade | The pay band a job profile or eligibility rule assigns a worker to. | Carries a default range when no profiles exist. |
| Grade profile | A localized version of the grade's range: by country, region, or population. | One grade, many profiles. The worker's pay is measured against their profile's range, not the grade's. |
| Pay range | Minimum, midpoint, maximum, with the range's own currency and frequency. | Min, mid, and max drive compa-ratio, range penetration, and quartile calculations. |
| Segments | The range divided into parts, quartiles most commonly. | Used for placement reporting: who sits in the first quartile, who in the fourth. |
| Steps | Fixed amounts with progression rules, for step-based plans. | Union and public-sector structures. Pay is a step, not a point in a range. |
◆ Reporting traps— the profile, the midpoint, the currency, the frequency, and the FTE basis. Five ways the same worker gets five ratios.
| Trap | What goes wrong |
|---|---|
| Grade instead of profile | The same grade carries different ranges per country or population. Pay compared to the grade's default range instead of the worker's profile range produces ratios that are wrong exactly where localization matters. |
| Midpoint is not the middle | Workday allows a market-based midpoint anywhere between min and max. Compa-ratio measures against mid; range penetration measures against the min-to-max spread. They can rank the same workers differently. Report both; never derive one from the other. |
| Currency | The range carries its own currency. A ratio is only unitless when pay and range share it. Convert pay to the range's currency before dividing, and never aggregate raw pay across currencies. |
| Frequency | Hourly pay against an annual range needs the hours basis to annualize, and the basis is a policy choice. Land the range's frequency and convert deliberately, once, in the model. |
| FTE basis | A half-time worker's actual pay divided by a full-time midpoint reads as badly underpaid. Decide once whether ratios use annualized full-time-equivalent base or actual prorated pay, and state it on the report. |
| Out of range | Workers below min or above max are findings, not errors to hide. Flag them; a cluster below min after a range refresh is the merit-budget conversation. |
◆ How we model it: dim_comp_grade— the build SQL, and the finished dimension, three rows that show localization and a range refresh.
One dimension at the grade-profile grain. Ranges live on the profile when profiles exist and on the grade otherwise, so the build lands both and coalesces:
-- ranges come from the profile when one exists, else the grade
SELECT g.grade_id,
COALESCE(p.profile_id, g.grade_id) AS range_key,
COALESCE(p.profile_name, g.grade_name) AS range_name,
COALESCE(p.currency, g.currency) AS currency,
COALESCE(p.frequency, g.frequency) AS frequency,
COALESCE(p.range_min, g.range_min) AS range_min,
COALESCE(p.range_mid, g.range_mid) AS range_mid,
COALESCE(p.range_max, g.range_max) AS range_max,
COALESCE(p.valid_from, g.valid_from) AS valid_from,
COALESCE(p.valid_to, g.valid_to) AS valid_to
FROM stg_comp_grade g
LEFT JOIN stg_comp_grade_profile p ON p.grade_id = g.grade_id
The finished dimension, sample rows. Grade G07 carries a US and a UK profile, and the US range was refreshed on 2026-03-01: the old row closes, a new row opens, and a January compa-ratio still measures against the January range. Note the US midpoint sits above the arithmetic middle; it is market-set:
| grade_id | range_key | currency | range_min | range_mid | range_max | valid_from | valid_to |
|---|---|---|---|---|---|---|---|
| G07 | G07-US | USD | 90,000 | 114,000 | 138,000 | 2024-01-01 | 2026-02-28 |
| G07 | G07-US | USD | 95,000 | 120,000 | 142,500 | 2026-03-01 | 9999-12-31 |
| G07 | G07-UK | GBP | 72,000 | 90,000 | 108,000 | 2024-01-01 | 9999-12-31 |
Pay facts join the profile row valid on their date, the as-of join from effective dating, and base pay already sits on the worker snapshot in the enterprise model, so compa-ratio is one join away. Sample values are illustrative, never client data.
- compensation grade
- The pay band a worker is assigned to, via job profile or eligibility rules.
- grade profile
- A localized range for one grade: by country, region, or population.
- pay range
- Min, mid, max, in the range's own currency and frequency.
- midpoint
- The compa-ratio anchor. Market-set, not necessarily the middle of the range.
- compa-ratio
- Pay divided by the range midpoint. Unitless only when pay and range match.
- range penetration
- How far pay sits between min and max: pay minus min, over max minus min.
- quartile
- One of four range segments, used for placement reporting.
- step
- A fixed amount with progression rules, in step-based structures.
- range refresh
- A new effective-dated version of a range. Old ratios keep the old range.
- FTE basis
- Whether ratios use annualized full-time-equivalent pay or actual prorated pay. One choice, stated.