Dashboard

What goes in an agent performance dashboard in Metabase?

An agent performance dashboard shows how work is distributed across the team and where to coach — solved volume, resolution time, and satisfaction by agent. Read it as a tool for balancing load and supporting people, not a leaderboard. Build it from support data synced into a database — see Zendesk, Gorgias, or Kustomer for the connection.

For: Team leads and managers. Refresh: daily.Source: modeled tickets with assignee, resolved_at, and ratings. Framing: balance and coaching, not surveillance.

Which cards belong on an agent performance dashboard?

Team KPIs

  • Tickets solved per agent
  • Median resolution time by agent
  • CSAT by agent
  • Open tickets per agent (current load)

Balance & coaching

  • Workload distribution across the team
  • Reopen rate by agent
  • Handle time vs. resolution time
  • Backlog age by assignee (table)

What data does an agent performance dashboard need?

  • A tickets table with an assignee and resolution timestamps.
  • An agents/users table for names and teams.
  • Ratings joined to tickets for per-agent CSAT.
  • Status history for reopen rate and handle time (optional).

How do you build an agent performance dashboard?

  1. Sync your help desk into a database (Zendesk, Gorgias, or Kustomer).
  2. Aggregate volume, resolution time, and CSAT per assignee.
  3. Show workload distribution so managers can rebalance, and pair volume with quality so speed isn't rewarded alone.
  4. Add filters for team, date range, and channel.

Example card SQL

Solved and median resolution time by agentPostgreSQL
-- Team workload and median resolution time by agent, last 30 days.
SELECT
  a.name                                                  AS agent,
  COUNT(*)                                                AS solved,
  ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (
    ORDER BY EXTRACT(EPOCH FROM (t.resolved_at - t.created_at)) / 3600.0
  )::numeric, 1)                                          AS median_resolution_hours
FROM tickets t
JOIN agents a ON a.id = t.assignee_id
WHERE t.resolved_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY a.name
ORDER BY solved DESC;

Integrations

Analytics

Dashboards

Metrics

FAQ

How do I avoid this becoming a surveillance leaderboard?
Pair every volume metric with a quality one (CSAT, reopen rate) so speed alone isn't rewarded, focus on workload balance rather than ranking individuals, and use the view for coaching and staffing decisions. Raw per-agent counts get gamed the moment they become a scoreboard.
Why show handle time and resolution time separately?
Handle time is the active minutes an agent spends on a ticket; resolution time is the elapsed wall-clock time. A long resolution time with a short handle time usually means tickets are waiting in queues, which is a staffing or routing problem, not an agent one.
Should I normalize workload by role or schedule?
Yes — part-time agents, specialists, and those handling complex tickets will show lower raw volume for legitimate reasons. Normalize by scheduled hours or ticket complexity before comparing, or use distribution views rather than direct agent-to-agent comparisons.