Dashboard

What goes in a people analytics dashboard in Metabase?

A people analytics dashboard gives leaders a governed view of workforce shape and movement: headcount, starts, exits, departments, locations, employment status, and time off. Build it from HRIS data synced into a permissioned database model.

For: Recruiting, people, finance, and business leaders. Refresh:hourly or daily is enough for most hiring dashboards. Source:modeled ATS and HRIS tables synced into a Metabase-connected database.

Which cards belong on this dashboard?

  • Current headcount by department, location, manager, and employment status
  • Starts and exits by month
  • Open positions and filled positions by org
  • Time off scheduled by team and month
  • Headcount plan vs. actual
  • Employee records with missing required fields for ops cleanup

What data does this dashboard need?

  • Worker or employee table with status, start date, termination date, department, location, manager, and worker type.
  • Organization, department, location, and cost-center reference tables.
  • Position or requisition table for plan vs. actual.
  • Time-off requests and balances when absence planning is in scope.

How do you build it?

  1. Sync ATS or HRIS data into a database, then connect that database to Metabase.
  2. Create reusable models for jobs or requisitions, applications, stage history, interviews, offers, sources, workers, and organizations as needed.
  3. Create one saved question per card, using consistent metric definitions and permissioned models.
  4. Add dashboard filters for department, location, role family, recruiter, hiring manager, source, and date range.

Example card SQL

Monthly headcount movementPostgreSQL
WITH months AS (
  SELECT generate_series(
    date_trunc('month', CURRENT_DATE - INTERVAL '12 months'),
    date_trunc('month', CURRENT_DATE),
    INTERVAL '1 month'
  ) AS month
)
SELECT
  m.month,
  COUNT(*) FILTER (
    WHERE w.start_date < m.month + INTERVAL '1 month'
      AND (w.termination_date IS NULL OR w.termination_date >= m.month)
  ) AS ending_headcount,
  COUNT(*) FILTER (WHERE date_trunc('month', w.start_date) = m.month) AS starts,
  COUNT(*) FILTER (WHERE date_trunc('month', w.termination_date) = m.month) AS exits
FROM months m
LEFT JOIN modeled_workers w
  ON w.start_date < m.month + INTERVAL '1 month'
GROUP BY m.month
ORDER BY m.month;

Dashboards

Integrations

Metrics

Analytics

FAQ

Can this include compensation or demographic data?
Only with explicit business need, legal approval, and tight permissions. Most broad people dashboards should exclude those fields.
Can I join this to recruiting data?
Yes through requisitions, starts, or worker IDs after hire. Keep candidate-level and employee-level grains separate.