| name | kpi-dashboard-design |
| description | Design effective KPI dashboards with metrics selection, visualization best practices, and real-time monitoring patterns. Use when building business dashboards, selecting metrics, or designing data visualization layouts. |
| version | 1.0.0 |
| cluster | databases-data |
KPI Dashboard Design
Comprehensive patterns for designing effective Key Performance Indicator (KPI) dashboards that drive business decisions.
When to Use This Skill
- Designing executive dashboards
- Selecting meaningful KPIs
- Building real-time monitoring displays
- Creating department-specific metrics views
- Improving existing dashboard layouts
- Establishing metric governance
Core Concepts
1. KPI Framework
| Level | Focus | Update Frequency | Audience |
|---|
| Strategic | Long-term goals | Monthly/Quarterly | Executives |
| Tactical | Department goals | Weekly/Monthly | Managers |
| Operational | Day-to-day | Real-time/Daily | Teams |
2. SMART KPIs
Specific: Clear definition
Measurable: Quantifiable
Achievable: Realistic targets
Relevant: Aligned to goals
Time-bound: Defined period
3. Dashboard Hierarchy
โโโ Executive Summary (1 page)
โ โโโ 4-6 headline KPIs
โ โโโ Trend indicators
โ โโโ Key alerts
โโโ Department Views
โ โโโ Sales Dashboard
โ โโโ Marketing Dashboard
โ โโโ Operations Dashboard
โ โโโ Finance Dashboard
โโโ Detailed Drilldowns
โโโ Individual metrics
โโโ Root cause analysis
Common KPIs by Department
Sales KPIs
Revenue Metrics:
- Monthly Recurring Revenue (MRR)
- Annual Recurring Revenue (ARR)
- Average Revenue Per User (ARPU)
- Revenue Growth Rate
Pipeline Metrics:
- Sales Pipeline Value
- Win Rate
- Average Deal Size
- Sales Cycle Length
Activity Metrics:
- Calls/Emails per Rep
- Demos Scheduled
- Proposals Sent
- Close Rate
Marketing KPIs
Acquisition:
- Cost Per Acquisition (CPA)
- Customer Acquisition Cost (CAC)
- Lead Volume
- Marketing Qualified Leads (MQL)
Engagement:
- Website Traffic
- Conversion Rate
- Email Open/Click Rate
- Social Engagement
ROI:
- Marketing ROI
- Campaign Performance
- Channel Attribution
- CAC Payback Period
Product KPIs
Usage:
- Daily/Monthly Active Users (DAU/MAU)
- Session Duration
- Feature Adoption Rate
- Stickiness (DAU/MAU)
Quality:
- Net Promoter Score (NPS)
- Customer Satisfaction (CSAT)
- Bug/Issue Count
- Time to Resolution
Growth:
- User Growth Rate
- Activation Rate
- Retention Rate
- Churn Rate
Finance KPIs
Profitability:
- Gross Margin
- Net Profit Margin
- EBITDA
- Operating Margin
Liquidity:
- Current Ratio
- Quick Ratio
- Cash Flow
- Working Capital
Efficiency:
- Revenue per Employee
- Operating Expense Ratio
- Days Sales Outstanding
- Inventory Turnover
Dashboard Layout Patterns
Pattern 1: Executive Summary
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ EXECUTIVE DASHBOARD [Date Range โผ] โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโค
โ REVENUE โ PROFIT โ CUSTOMERS โ NPS SCORE โ
โ $2.4M โ $450K โ 12,450 โ 72 โ
โ โฒ 12% โ โฒ 8% โ โฒ 15% โ โฒ 5pts โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโค
โ โ
โ Revenue Trend โ Revenue by Product โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ /\ /\ โ โ โ โโโโโโโโ 45% โ โ
โ โ / \ / \ /\ โ โ โ โโโโโโ 32% โ โ
โ โ / \/ \ / \ โ โ โ โโโโ 18% โ โ
โ โ / \/ \ โ โ โ โโ 5% โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ด Alert: Churn rate exceeded threshold (>5%) โ
โ ๐ก Warning: Support ticket volume 20% above average โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Pattern 2: SaaS Metrics Dashboard
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SAAS METRICS Jan 2024 [Monthly โผ] โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโโโโ โ MRR GROWTH โ
โ โ MRR โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ $125,000 โ โ โ /โโ โ โ
โ โ โฒ 8% โ โ โ /โโโโ/ โ โ
โ โโโโโโโโโโโโโโโโโโ โ โ /โโโโ/ โ โ
โ โโโโโโโโโโโโโโโโโโ โ โ /โโโโ/ โ โ
โ โ ARR โ โ โ /โโโโ/ โ โ
โ โ $1,500,000 โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โฒ 15% โ โ J F M A M J J A S O N D โ
โ โโโโโโโโโโโโโโโโโโ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ UNIT ECONOMICS โ COHORT RETENTION โ
โ โ โ
โ CAC: $450 โ Month 1: โโโโโโโโโโโโโโโโโโโโ 100% โ
โ LTV: $2,700 โ Month 3: โโโโโโโโโโโโโโโโโ 85% โ
โ LTV/CAC: 6.0x โ Month 6: โโโโโโโโโโโโโโโโ 80% โ
โ โ Month 12: โโโโโโโโโโโโโโ 72% โ
โ Payback: 4 months โ โ
โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ CHURN ANALYSIS โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Gross โ Net โ Logo โ Expansion โ โ
โ โ 4.2% โ 1.8% โ 3.1% โ 2.4% โ โ
โ โโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Pattern 3: Real-time Operations
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OPERATIONS CENTER Live โ Last: 10:42:15 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ SYSTEM HEALTH โ SERVICE STATUS โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ CPU MEM DISK โ โ โ API Gateway Healthy โ
โ โ 45% 72% 58% โ โ โ User Service Healthy โ
โ โ โโโ โโโโ โโโ โ โ โ Payment Service Degraded โ
โ โ โโโ โโโโ โโโ โ โ โ Database Healthy โ
โ โ โโโ โโโโ โโโ โ โ โ Cache Healthy โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ REQUEST THROUGHPUT โ ERROR RATE โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โโโโโ
โโโโโโ
โโโโโโโโ
โ โ โ โโโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Current: 12,450 req/s โ Current: 0.02% โ
โ Peak: 18,200 req/s โ Threshold: 1.0% โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ RECENT ALERTS โ
โ 10:40 ๐ก High latency on payment-service (p99 > 500ms) โ
โ 10:35 ๐ข Resolved: Database connection pool recovered โ
โ 10:22 ๐ด Payment service circuit breaker tripped โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Implementation Patterns
SQL for KPI Calculations
WITH mrr_calculation AS (
SELECT
DATE_TRUNC('month', billing_date) AS month,
SUM(
CASE subscription_interval
WHEN 'monthly' THEN amount
WHEN 'yearly' THEN amount / 12
WHEN 'quarterly' THEN amount / 3
END
) AS mrr
FROM subscriptions
WHERE status = 'active'
GROUP BY DATE_TRUNC('month', billing_date)
)
SELECT
month,
mrr,
LAG(mrr) OVER (ORDER BY month) AS prev_mrr,
(mrr - LAG(mrr) OVER (ORDER BY month)) / LAG(mrr) OVER (ORDER BY month) * 100 growth_pct
mrr_calculation;
cohorts (
user_id,
DATE_TRUNC(, created_at) cohort_month
users
),
activity (
user_id,
DATE_TRUNC(, event_date) activity_month
user_events
event_type
)
c.cohort_month,
( age(a.activity_month, c.cohort_month)) months_since_signup,
( a.user_id) active_users,
( a.user_id):: ( c.user_id) retention_rate
cohorts c
activity a c.user_id a.user_id
a.activity_month c.cohort_month
c.cohort_month, ( age(a.activity_month, c.cohort_month))
c.cohort_month, months_since_signup;
DATE_TRUNC(, acquired_date) ,
(marketing_spend) ((new_customers), ) cac,
(marketing_spend) total_spend,
(new_customers) customers_acquired
(
DATE_TRUNC(, u.created_at) acquired_date,
u.id new_customers,
m.spend marketing_spend
users u
marketing_spend m DATE_TRUNC(, u.created_at) m.month
u.source
) acquisition
DATE_TRUNC(, acquired_date);
Python Dashboard Code (Streamlit)
import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
st.set_page_config(page_title="KPI Dashboard", layout="wide")
col1, col2 = st.columns([3, 1])
with col1:
st.title("Executive Dashboard")
with col2:
date_range = st.selectbox(
"Period",
["Last 7 Days", "Last 30 Days", "Last Quarter", "YTD"]
)
def metric_card(label, value, delta, prefix="", suffix=""):
delta_color = "green" if delta >= 0 else "red"
delta_arrow = "โฒ" if delta >= 0 else "โผ"
st.metric(
label=label,
value=f"{prefix}{value:,.0f}{suffix}",
delta=f"{delta_arrow} {abs(delta):.1f}%"
)
col1, col2, col3, col4 = st.columns(4)
with col1:
metric_card("Revenue", 2400000, , prefix=)
col2:
metric_card(, , )
col3:
metric_card(, , )
col4:
metric_card(, , -, suffix=)
col1, col2 = st.columns()
col1:
st.subheader()
revenue_data = pd.DataFrame({
: pd.date_range(, periods=, freq=),
: [, , , , , ,
, , , , , ]
})
fig = px.line(revenue_data, x=, y=,
line_shape=, markers=)
fig.update_layout(height=)
st.plotly_chart(fig, use_container_width=)
col2:
st.subheader()
product_data = pd.DataFrame({
: [, , , ],
: [, , , ]
})
fig = px.pie(product_data, values=, names=,
hole=)
fig.update_layout(height=)
st.plotly_chart(fig, use_container_width=)
st.subheader()
cohort_data = pd.DataFrame({
: [, , , , ],
: [, , , , ],
: [, , , , ],
: [, , , , ],
: [, , , , ],
: [, , , , ],
})
fig = go.Figure(data=go.Heatmap(
z=cohort_data.iloc[:, :].values,
x=[, , , , ],
y=cohort_data[],
colorscale=,
text=cohort_data.iloc[:, :].values,
texttemplate=,
textfont={: },
))
fig.update_layout(height=)
st.plotly_chart(fig, use_container_width=)
st.subheader()
alerts = [
{: , : },
{: , : },
]
alert alerts:
alert[] == :
st.error()
alert[] == :
st.warning()
Best Practices
Do's
- Limit to 5-7 KPIs - Focus on what matters
- Show context - Comparisons, trends, targets
- Use consistent colors - Red=bad, green=good
- Enable drilldown - From summary to detail
- Update appropriately - Match metric frequency
Don'ts
- Don't show vanity metrics - Focus on actionable data
- Don't overcrowd - White space aids comprehension
- Don't use 3D charts - They distort perception
- Don't hide methodology - Document calculations
- Don't ignore mobile - Ensure responsive design
Resources