kpi-dashboard-design
upstream

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.

ID: kpi-dashboard-design
Preview
Codigo

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


`yaml

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


`yaml

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


`yaml

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


`yaml

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


`sql

-- Monthly Recurring Revenue (MRR)

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 AS growth_pct

FROM mrr_calculation;


-- Cohort Retention

WITH cohorts AS (

SELECT

user_id,

DATE_TRUNC('month', created_at) AS cohort_month

FROM users

),

activity AS (

SELECT

user_id,

DATE_TRUNC('month', event_date) AS activity_month

FROM user_events

WHERE event_type = 'active_session'

)

SELECT

c.cohort_month,

EXTRACT(MONTH FROM age(a.activity_month, c.cohort_month)) AS months_since_signup,

COUNT(DISTINCT a.user_id) AS active_users,

COUNT(DISTINCT a.user_id)::FLOAT / COUNT(DISTINCT c.user_id) * 100 AS retention_rate

FROM cohorts c

LEFT JOIN activity a ON c.user_id = a.user_id

AND a.activity_month >= c.cohort_month

GROUP BY c.cohort_month, EXTRACT(MONTH FROM age(a.activity_month, c.cohort_month))

ORDER BY c.cohort_month, months_since_signup;


-- Customer Acquisition Cost (CAC)

SELECT

DATE_TRUNC('month', acquired_date) AS month,

SUM(marketing_spend) / NULLIF(COUNT(new_customers), 0) AS cac,

SUM(marketing_spend) AS total_spend,

COUNT(new_customers) AS customers_acquired

FROM (

SELECT

DATE_TRUNC('month', u.created_at) AS acquired_date,

u.id AS new_customers,

m.spend AS marketing_spend

FROM users u

JOIN marketing_spend m ON DATE_TRUNC('month', u.created_at) = m.month

WHERE u.source = 'marketing'

) acquisition

GROUP BY DATE_TRUNC('month', acquired_date);

`


Python Dashboard Code (Streamlit)


`python

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")


Header with date filter

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"]

)


KPI Cards

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, 12.5, prefix="$")

with col2:

metric_card("Customers", 12450, 15.2)

with col3:

metric_card("NPS Score", 72, 5.0)

with col4:

metric_card("Churn Rate", 4.2, -0.8, suffix="%")


Charts

col1, col2 = st.columns(2)


with col1:

st.subheader("Revenue Trend")

revenue_data = pd.DataFrame({

'Month': pd.date_range('2024-01-01', periods=12, freq='M'),

'Revenue': [180000, 195000, 210000, 225000, 240000, 255000,

270000, 285000, 300000, 315000, 330000, 345000]

})

fig = px.line(revenue_data, x='Month', y='Revenue',

line_shape='spline', markers=True)

fig.update_layout(height=300)

st.plotly_chart(fig, use_container_width=True)


with col2:

st.subheader("Revenue by Product")

product_data = pd.DataFrame({

'Product': ['Enterprise', 'Professional', 'Starter', 'Other'],

'Revenue': [45, 32, 18, 5]

})

fig = px.pie(product_data, values='Revenue', names='Product',

hole=0.4)

fig.update_layout(height=300)

st.plotly_chart(fig, use_container_width=True)


Cohort Heatmap

st.subheader("Cohort Retention")

cohort_data = pd.DataFrame({

'Cohort': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],

'M0': [100, 100, 100, 100, 100],

'M1': [85, 87, 84, 86, 88],

'M2': [78, 80, 76, 79, None],

'M3': [72, 74, 70, None, None],

'M4': [68, 70, None, None, None],

})

fig = go.Figure(data=go.Heatmap(

z=cohort_data.iloc[:, 1:].values,

x=['M0', 'M1', 'M2', 'M3', 'M4'],

y=cohort_data['Cohort'],

colorscale='Blues',

text=cohort_data.iloc[:, 1:].values,

texttemplate='%{text}%',

textfont={"size": 12},

))

fig.update_layout(height=250)

st.plotly_chart(fig, use_container_width=True)


Alerts Section

st.subheader("Alerts")

alerts = [

{"level": "error", "message": "Churn rate exceeded threshold (>5%)"},

{"level": "warning", "message": "Support ticket volume 20% above average"},

]

for alert in alerts:

if alert["level"] == "error":

st.error(f"­ƒö┤ {alert['message']}")

elif alert["level"] == "warning":

st.warning(f"­ƒƒí {alert['message']}")

``


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


  • [Stephen Few's Dashboard Design](https://www.perceptualedge.com/articles/visual_business_intelligence/rules_for_using_color.pdf)
  • [Edward Tufte's Principles](https://www.edwardtufte.com/tufte/)
  • [Google Data Studio Gallery](https://datastudio.google.com/gallery)

Informacion

Estado
Activo
Origen upstream
Usos 3
Ultimo uso 23/01 16:57
Actualizado 09/01/2026 02:14

Archivo origen

Z:\Repositorios\core\upstream\plugins\business-analytics\skills\kpi-dashboard-design\SKILL.md