tm_attrition
1. Dataset Name
tm_attrition_data
2. Description
Period-level workforce dataset that generates a full monthly/quarterly/yearly date spine and reports active headcount, terminations, and new hires against it, broken out by job function, location, seniority, business unit, gender, and race. Each row represents one period (at one of three granularities) crossed with one combination of workforce dimensions.
3. Source Tables
- customer_views.employee (only source table)
4. Grain
One row per (granularity, period_start, period_end, job_function, location_country, seniority, business_unit, ef_gender, ef_race) combination. granularity is one of Monthly, Quarterly, Yearly, and each spans the full range from the earliest hire date to the latest effective end date in the data. A period-dimension combination with zero active/terminated/hired employees can still appear as a row with 0 counts.
5. Dashboards Supported
- TM Outcomes Summary Dashboard (Headcount Trend, Monthly/Quarterly/Annual Attrition %, Monthly Hires and Terminations)
- Headcount Trends / Attrition / New Hire Analytics dashboards
6. Metrics Supported
| Metric | Supported Breakdowns |
| Active Headcount | Granularity, job function, location country, seniority, business unit, gender, race |
| Terminations / Attrition Count | Same as above |
| Attrition Rate (terminated ÷ active) | Same as above (requires downstream calculation) |
| New Hires | Same as above |
| Net Headcount Change | Same as above (requires downstream calculation) |
| Headcount Trend Over Time | Period start/end at any of the three granularities |
7. Known Exclusions / Filters Applied
- Employees with a null employee_id or null hiring_date are excluded entirely.
- active_employees is a start-of-period snapshot, not an average or end-of-period count — someone hired mid-period won't show as active for that period until the next period.
- A dimension combination that had a termination or new hire in a period but zero employees active at that period's start will not surface a row for that combination — its count is effectively dropped rather than shown as 0.
- Periods with no matching employee record still produce one all-null-dimension row per period rather than being dropped.
- month is only populated for Monthly rows; quarter only for Quarterly rows.
8. Schema
| Column Name | Data Type | Notes |
| granularity | varchar | One of Monthly, Quarterly, Yearly |
| period_start / period_end | date | Period boundaries |
| year / month / quarter | bigint | month/quarter only populated for their matching granularity |
| job_function | varchar | Employee's job function |
| location_country | varchar | Employee's location, country |
| seniority | varchar | Employee seniority |
| business_unit | varchar | Employee's business unit |
| ef_gender / ef_race | varchar | Normalized gender/race fields |
| active_employees | bigint | Distinct count active as of period_start |
| terminated_employees | bigint | Distinct count terminated within the period; 0 if none |
| new_hires | bigint | Distinct count hired within the period; 0 if none |