🚀 快速安装
复制以下命令并运行,立即安装此 Skill:
npx skills add https://github.com/wshobson/agents --skill kpi-dashboard-design
💡 提示:需要 Node.js 和 NPM
KPI 仪表盘设计
设计有效的关键绩效指标(KPI)仪表盘以驱动业务决策的全面模式。
何时使用此技能
- 设计高管仪表盘
- 选择有意义的 KPI
- 构建实时监控展示
- 创建部门特定的指标视图
- 改进现有的仪表盘布局
- 建立指标治理体系
核心概念
1. KPI 框架
| 层级 | 关注点 | 更新频率 | 受众 |
|---|---|---|---|
| 战略层 | 长期目标 | 月度/季度 | 高管 |
| 战术层 | 部门目标 | 每周/每月 | 经理 |
| 运营层 | 日常运营 | 实时/每日 | 团队 |
2. SMART 原则的 KPI
具体性:定义清晰明确
可衡量:能够量化
可实现:目标切合实际
相关性:与目标对齐
时限性:有明确的时间周期
3. 仪表盘层级结构
├── 高管摘要(1 页)
│ ├── 4-6 个核心 KPI
│ ├── 趋势指标
│ └── 关键告警
├── 部门视图
│ ├── 销售仪表盘
│ ├── 市场仪表盘
│ ├── 运营仪表盘
│ └── 财务仪表盘
└── 详细下钻视图
├── 单个指标详情
└── 根本原因分析
各部门常见 KPI
销售部门 KPI
收入指标:
- 月度经常性收入 (MRR)
- 年度经常性收入 (ARR)
- 每用户平均收入 (ARPU)
- 收入增长率
管道指标:
- 销售管道总值
- 赢单率
- 平均交易额
- 销售周期长度
活动指标:
- 每位销售代表的通话/邮件数
- 已安排的产品演示
- 已发送的方案书
- 成交率
市场部门 KPI
获客指标:
- 每获取成本 (CPA)
- 客户获取成本 (CAC)
- 线索量
- 市场认可线索 (MQL)
互动指标:
- 网站流量
- 转化率
- 邮件打开率/点击率
- 社交媒体互动
投资回报:
- 市场投资回报率
- 营销活动效果
- 渠道归因
- CAC 回收周期
产品部门 KPI
使用指标:
- 日/月活跃用户 (DAU/MAU)
- 会话时长
- 功能采用率
- 用户粘性 (DAU/MAU)
质量指标:
- 净推荐值 (NPS)
- 客户满意度 (CSAT)
- 缺陷/问题数量
- 解决时长
增长指标:
- 用户增长率
- 激活率
- 留存率
- 流失率
财务部门 KPI
盈利能力:
- 毛利率
- 净利润率
- 息税折旧摊销前利润 (EBITDA)
- 营业利润率
流动性:
- 流动比率
- 速动比率
- 现金流
- 营运资本
效率指标:
- 人均营收
- 营业费用率
- 应收账款周转天数
- 库存周转率
仪表盘布局模式
模式 1:高管摘要
┌─────────────────────────────────────────────────────────────┐
│ 高管仪表盘 [日期范围 ▼] │
├─────────────┬─────────────┬─────────────┬─────────────────┤
│ 营收 │ 利润 │ 客户数 │ NPS 得分 │
│ 240 万 │ 45 万 │ 12,450 │ 72 │
│ ▲ 12% │ ▲ 8% │ ▲ 15% │ ▲ 5 点 │
├─────────────┴─────────────┴─────────────┴─────────────────┤
│ │
│ 营收趋势 │ 按产品划分的营收 │
│ ┌───────────────────────┐ │ ┌──────────────────┐ │
│ │ /\ /\ │ │ │ ████████ 45% │ │
│ │ / \ / \ /\ │ │ │ ██████ 32% │ │
│ │ / \/ \ / \ │ │ │ ████ 18% │ │
│ │ / \/ \ │ │ │ ██ 5% │ │
│ └───────────────────────┘ │ └──────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ 🔴 告警:客户流失率超出阈值 (>5%) │
│ 🟡 警告:支持工单量高于平均值 20% │
└─────────────────────────────────────────────────────────────┘
模式 2:SaaS 指标仪表盘
┌─────────────────────────────────────────────────────────────┐
│ SAAS 指标 2024年1月 [月度 ▼] │
├──────────────────────┬──────────────────────────────────────┤
│ ┌────────────────┐ │ MRR 增长 │
│ │ MRR │ │ ┌────────────────────────────────┐ │
│ │ $125,000 │ │ │ /── │ │
│ │ ▲ 8% │ │ │ /────/ │ │
│ └────────────────┘ │ │ /────/ │ │
│ ┌────────────────┐ │ │ /────/ │ │
│ │ ARR │ │ │ /────/ │ │
│ │ $1,500,000 │ │ └────────────────────────────────┘ │
│ │ ▲ 15% │ │ 1 2 3 4 5 6 7 8 9 10 11 12 │
│ └────────────────┘ │ │
├──────────────────────┼──────────────────────────────────────┤
│ 单位经济模型 │ 群组留存率 │
│ │ │
│ CAC: $450 │ 第1个月: ████████████████████ 100% │
│ LTV: $2,700 │ 第3个月: █████████████████ 85% │
│ LTV/CAC: 6.0x │ 第6个月: ████████████████ 80% │
│ │ 第12个月: ██████████████ 72% │
│ 回本周期: 4个月 │ │
├──────────────────────┴──────────────────────────────────────┤
│ 流失分析 │
│ ┌──────────┬──────────┬──────────┬──────────────────────┐ │
│ │ 总流失率 │ 净流失率 │ 客户流失 │ 扩张收入 │ │
│ │ 4.2% │ 1.8% │ 3.1% │ 2.4% │ │
│ └──────────┴──────────┴──────────┴──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
模式 3:实时运营中心
┌─────────────────────────────────────────────────────────────┐
│ 运营中心 实时 ● 上次: 10:42:15 │
├────────────────────────────┬────────────────────────────────┤
│ 系统健康 │ 服务状态 │
│ ┌──────────────────────┐ │ │
│ │ CPU 内存 磁盘 │ │ ● API 网关 健康 │
│ │ 45% 72% 58% │ │ ● 用户服务 健康 │
│ │ ███ ████ ███ │ │ ● 支付服务 性能下降 │
│ │ ███ ████ ███ │ │ ● 数据库 健康 │
│ │ ███ ████ ███ │ │ ● 缓存 健康 │
│ └──────────────────────┘ │ │
├────────────────────────────┼────────────────────────────────┤
│ 请求吞吐量 │ 错误率 │
│ ┌──────────────────────┐ │ ┌──────────────────────────┐ │
│ │ ▁▂▃▄▅▆▇█▇▆▅▄▃▂▁▂▃▄▅ │ │ │ ▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁ │ │
│ └──────────────────────┘ │ └──────────────────────────┘ │
│ 当前: 12,450 请求/秒 │ 当前: 0.02% │
│ 峰值: 18,200 请求/秒 │ 阈值: 1.0% │
├────────────────────────────┴────────────────────────────────┤
│ 最近告警 │
│ 10:40 🟡 支付服务高延迟 (p99 > 500ms) │
│ 10:35 🟢 已解决:数据库连接池恢复 │
│ 10:22 🔴 支付服务断路器触发 │
└─────────────────────────────────────────────────────────────┘
实现模式
用于 KPI 计算的 SQL
-- 月度经常性收入 (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;
-- 群组留存率
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;
-- 客户获取成本 (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 仪表盘代码 (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 仪表盘", layout="wide")
# 带有日期筛选器的头部
col1, col2 = st.columns([3, 1])
with col1:
st.title("高管仪表盘")
with col2:
date_range = st.selectbox(
"时间段",
["过去7天", "过去30天", "上季度", "年初至今"]
)
# KPI 卡片
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("营收", 2400000, 12.5, prefix="$")
with col2:
metric_card("客户数", 12450, 15.2)
with col3:
metric_card("NPS 得分", 72, 5.0)
with col4:
metric_card("流失率", 4.2, -0.8, suffix="%")
# 图表
col1, col2 = st.columns(2)
with col1:
st.subheader("营收趋势")
revenue_data = pd.DataFrame({
'月份': pd.date_range('2024-01-01', periods=12, freq='M'),
'营收': [180000, 195000, 210000, 225000, 240000, 255000,
270000, 285000, 300000, 315000, 330000, 345000]
})
fig = px.line(revenue_data, x='月份', y='营收',
line_shape='spline', markers=True)
fig.update_layout(height=300)
st.plotly_chart(fig, use_container_width=True)
with col2:
st.subheader("按产品划分的营收")
product_data = pd.DataFrame({
'产品': ['企业版', '专业版', '入门版', '其他'],
'营收占比': [45, 32, 18, 5]
})
fig = px.pie(product_data, values='营收占比', names='产品',
hole=0.4)
fig.update_layout(height=300)
st.plotly_chart(fig, use_container_width=True)
# 群组留存热图
st.subheader("群组留存率")
cohort_data = pd.DataFrame({
'群组': ['一月', '二月', '三月', '四月', '五月'],
'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=['当月', '1月后', '2月后', '3月后', '4月后'],
y=cohort_data['群组'],
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)
# 告警区域
st.subheader("告警")
alerts = [
{"level": "error", "message": "客户流失率超出阈值 (>5%)"},
{"level": "warning", "message": "支持工单量高于平均值 20%"},
]
for alert in alerts:
if alert["level"] == "error":
st.error(f"🔴 {alert['message']}")
elif alert["level"] == "warning":
st.warning(f"🟡 {alert['message']}")
最佳实践
应该做的
- 限制在 5-7 个 KPI – 专注于重要事项
- 展示上下文 – 比较、趋势、目标
- 使用一致的颜色 – 红色=差,绿色=好
- 支持数据下钻 – 从摘要到细节
- 适时更新 – 匹配指标的更新频率
避免做的
- 不要展示虚荣指标 – 专注于可操作的数据
- 不要过度拥挤 – 留白有助于理解
- 不要使用 3D 图表 – 它们会扭曲感知
- 不要隐藏计算方法 – 记录清楚计算逻辑
- 不要忽视移动端 – 确保响应式设计
📄 原始文档
完整文档(英文):
https://skills.sh/wshobson/agents/kpi-dashboard-design
💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)