kpi-dashboard-design — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited kpi-dashboard-design (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Framework for building effective business dashboards that drive decisions.
Metrics must be Specific, Measurable, Achievable, Relevant, Time-bound.
Limit: 5–7 KPIs per dashboard. More = noise.
| Level | Audience | Cadence | Focus |
|---|---|---|---|
| Strategic | C-level | Monthly/Quarterly | ARR, NPS, gross margin |
| Tactical | Managers | Weekly/Monthly | CAC, conversion, churn |
| Operational | Teams | Real-time/Daily | DAU, error rate, queue depth |
WITH monthly_revenue AS (
SELECT
DATE_TRUNC('month', subscription_start) AS month,
SUM(monthly_amount) AS mrr
FROM subscriptions
WHERE status = 'active'
GROUP BY 1
)
SELECT
month,
mrr,
mrr - LAG(mrr) OVER (ORDER BY month) AS mrr_change,
ROUND(100.0 * (mrr - LAG(mrr) OVER (ORDER BY month)) / NULLIF(LAG(mrr) OVER (ORDER BY month), 0), 1) AS mrr_growth_pct
FROM monthly_revenue
ORDER BY month DESC;WITH cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', first_active_date) AS cohort_month
FROM users
),
activity AS (
SELECT DISTINCT
user_id,
DATE_TRUNC('month', event_date) AS activity_month
FROM events
)
SELECT
c.cohort_month,
COUNT(DISTINCT c.user_id) AS cohort_size,
COUNT(DISTINCT a.user_id) AS retained,
ROUND(100.0 * COUNT(DISTINCT a.user_id) / COUNT(DISTINCT c.user_id), 1) AS retention_pct,
EXTRACT(MONTH FROM AGE(a.activity_month, c.cohort_month)) AS months_since_join
FROM cohorts c
LEFT JOIN activity a ON c.user_id = a.user_id
GROUP BY 1, 5
ORDER BY 1, 5;SELECT
DATE_TRUNC('month', cancelled_at) AS month,
COUNT(*) AS churned,
ROUND(100.0 * COUNT(*) / (
SELECT COUNT(*) FROM subscriptions
WHERE status = 'active'
AND created_at < DATE_TRUNC('month', s.cancelled_at)
), 2) AS churn_rate_pct
FROM subscriptions s
WHERE cancelled_at IS NOT NULL
GROUP BY 1
ORDER BY 1 DESC;┌─────────────────────────────────────────────────────────┐
│ MRR: $124K ↑8% │ Churn: 2.1% ↓0.3% │ NPS: 62 │
│ CAC: $420 ↑5% │ LTV:CAC: 4.2x │ │
├─────────────────────────────────────────────────────────┤
│ [MRR trend 12m] │ [Cohort retention heatmap] │
└─────────────────────────────────────────────────────────┘import streamlit as st
import pandas as pd
def metric_card(label: str, value: str, delta: str, delta_color: str = "normal"):
st.metric(label=label, value=value, delta=delta, delta_color=delta_color)
col1, col2, col3, col4 = st.columns(4)
with col1:
metric_card("MRR", "$124K", "+8% MoM")
with col2:
metric_card("Churn Rate", "2.1%", "-0.3%", delta_color="inverse")
with col3:
metric_card("CAC", "$420", "+5%", delta_color="inverse")
with col4:
metric_card("NPS", "62", "+4pts")
# Trend chart
st.line_chart(df.set_index('month')[['mrr']])
# Retention heatmap
import plotly.graph_objects as go
fig = go.Figure(data=go.Heatmap(z=retention_matrix, colorscale='Blues'))
st.plotly_chart(fig)| Do | Don't |
|---|---|
| Show trend + absolute value | Show absolute value alone |
| Compare to target or prior period | Show raw numbers without context |
| Enable drilldown (summary → detail) | Cram 15 KPIs on one screen |
| Use consistent color conventions (red=bad) | Use 3D pie charts |
| Document metric definitions | Leave ambiguous calculations |
| Highlight anomalies automatically | Rely on users to spot outliers |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.