What does a code review health dashboard show in Metabase?
A code review health dashboard shows where pull requests wait — from open to first review to merge — so slow reviews become a visible, fixable queue. It's built from PR history synced from GitHub, GitLab, Bitbucket, or Azure DevOps.
What does a code review health dashboard look like?
Here's the layout this guide builds: cycle time and responsiveness at the top, then how long reviews take by team and how much gets merged, then who is carrying the review load and which PRs are stuck. Read it in a weekly team review, not per PR.

Which cards belong on a code review health dashboard?
- PR cycle time, median and p90 by week (line)
- Time to first review by week (line)
- Open PRs by age bucket (bar)
- Review load by reviewer, trailing 30 days (bar)
- Stale PRs open longer than 14 days (table)
- Merges per week by repo (stacked bar)
What data does the dashboard need?
pull_requests— repo, author, state,created_at,first_review_at,merged_at, plusis_botanddraftflags.pr_reviewsevents — reviewer, PR, submitted timestamp, and verdict — for the load and first-review cards.- Synced from GitHub, GitLab, Bitbucket, or Azure DevOps Repos into a database or warehouse.
How do you build it?
- Sync PR and review history into a database — Metabase reads databases, not git hosts directly, so use an ETL connector or the platform's API.
- Derive
first_review_atas the earliest non-author review per PR if the source doesn't provide it. - Exclude bots and drafts from every headline card — they aren't waiting on humans and they skew the medians.
- Build the cycle-time and first-review trends first; add the stale-PR table and reviewer-load bar to drive the weekly review.
Example card SQL
SELECT
DATE_TRUNC('week', merged_at) AS week,
ROUND(
(PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY EXTRACT(EPOCH FROM merged_at - created_at)
) / 3600.0)::numeric, 1
) AS median_cycle_hours,
ROUND(
(PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY EXTRACT(EPOCH FROM first_review_at - created_at)
) / 3600.0)::numeric, 1
) AS median_hours_to_first_review
FROM pull_requests
WHERE merged_at >= CURRENT_DATE - INTERVAL '12 weeks'
AND NOT is_bot
AND NOT draft
GROUP BY 1
ORDER BY 1;Related
Metrics
Integrations
Dashboards
FAQ
What is a code review health dashboard?
What data sources feed a code review health dashboard?
pull_requests and pr_reviews tables with an ETL connector or the platform's API first.Why exclude bots and draft PRs from the headline numbers?
is_bot and draft flags on every row, filter both out of headline cards, and chart bot volume separately if automation throughput matters to you.