Executive Dashboard
by dengineproblem
Эксперт executive dashboards. Используй для KPI визуализации, business intelligence и reporting.
Skill Details
Repository Files
1 file in this skill directory
name: executive-dashboard description: Эксперт executive dashboards. Используй для KPI визуализации, business intelligence и reporting.
Executive Dashboard Expert
Expert in designing and building executive dashboards that deliver actionable insights to C-level executives and senior leadership.
Core Dashboard Principles
Strategic Focus
- Lead with business outcomes, not data points
- Align KPIs directly to company objectives and strategic initiatives
- Prioritize forward-looking metrics over historical reporting
- Enable drill-down capabilities without overwhelming the main view
- Design for mobile and presentation contexts
Information Hierarchy
- Follow the "5-second rule" - key insights visible immediately
- Use progressive disclosure: summary → trends → details
- Implement the "traffic light" system for status indicators
- Group related metrics into coherent business themes
- Maintain consistent terminology across all metrics
Essential KPI Categories
Financial Performance
const financialKPIs = {
revenue: {
current: 'Monthly Recurring Revenue (MRR)',
trend: 'Revenue Growth Rate (YoY)',
health: 'Revenue per Employee',
forecast: 'Pipeline Value & Conversion Rate'
},
profitability: {
margin: 'Gross Margin %',
efficiency: 'Operating Expense Ratio',
cash: 'Cash Flow & Burn Rate',
roi: 'Return on Investment by Initiative'
},
unit_economics: {
cac: 'Customer Acquisition Cost',
ltv: 'Customer Lifetime Value',
ltv_cac_ratio: 'LTV:CAC Ratio (target: 3:1)',
payback: 'CAC Payback Period'
}
};
Operational Excellence
const operationalKPIs = {
customers: {
acquisition: 'Customer Acquisition Cost (CAC)',
retention: 'Net Revenue Retention (NRR)',
satisfaction: 'Net Promoter Score (NPS)',
lifetime: 'Customer Lifetime Value (CLV)',
churn: 'Monthly/Annual Churn Rate'
},
performance: {
quality: 'Defect Rate & SLA Performance',
speed: 'Time to Market & Cycle Time',
capacity: 'Utilization Rates & Capacity Planning'
},
growth: {
pipeline: 'Sales Pipeline Coverage',
conversion: 'Stage Conversion Rates',
velocity: 'Deal Velocity'
}
};
Dashboard Layout Patterns
Executive Summary Layout
<!-- Top-level executive view -->
<div class="executive-dashboard">
<!-- Hero Metrics (top 20% of screen) -->
<section class="hero-metrics">
<div class="primary-kpi">Revenue: $2.3M ↗️ 12%</div>
<div class="status-indicators">
<span class="green">Growth</span>
<span class="yellow">Margins</span>
<span class="red">Churn</span>
</div>
</section>
<!-- Key Trends (middle 60%) -->
<section class="trend-charts">
<div class="chart-grid">
<chart type="line" data="revenue-trend" period="12mo"/>
<chart type="gauge" data="nps-score" target="50"/>
<chart type="funnel" data="sales-pipeline"/>
<chart type="heatmap" data="regional-performance"/>
</div>
</section>
<!-- Action Items (bottom 20%) -->
<section class="action-items">
<alert type="critical">Customer churn up 3% - immediate action required</alert>
<insight>Marketing ROI improved 24% - scale successful campaigns</insight>
</section>
</div>
CSS Grid Layout
.executive-dashboard {
display: grid;
grid-template-areas:
"hero hero hero hero"
"chart1 chart1 chart2 chart2"
"chart3 chart4 chart5 chart6"
"alerts alerts insights insights";
grid-template-columns: repeat(4, 1fr);
grid-template-rows: auto 1fr 1fr auto;
gap: 24px;
padding: 24px;
min-height: 100vh;
}
.hero-metrics {
grid-area: hero;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(135deg, #1a365d 0%, #2d3748 100%);
border-radius: 12px;
padding: 32px;
}
.primary-kpi {
font-size: 48px;
font-weight: 700;
color: white;
}
.status-indicator {
padding: 8px 16px;
border-radius: 20px;
font-weight: 600;
}
.status-indicator.green { background: #48bb78; }
.status-indicator.yellow { background: #ecc94b; color: #1a202c; }
.status-indicator.red { background: #f56565; }
Data Visualization Best Practices
Chart Selection Guidelines
def select_chart_type(data_type, purpose):
chart_mapping = {
('trend', 'time_series'): 'line_chart',
('comparison', 'categories'): 'bar_chart',
('part_to_whole', 'composition'): 'donut_chart',
('performance', 'target'): 'gauge_chart',
('correlation', 'scatter'): 'scatter_plot',
('geographic', 'regional'): 'choropleth_map',
('process', 'conversion'): 'funnel_chart',
('distribution', 'variance'): 'box_plot',
('ranking', 'top_n'): 'horizontal_bar',
('change', 'waterfall'): 'waterfall_chart'
}
return chart_mapping.get((data_type, purpose), 'table')
# Executive dashboard color palette
EXEC_COLORS = {
'success': '#00A86B', # Green - targets met/exceeded
'warning': '#FFB000', # Amber - attention needed
'critical': '#D2222D', # Red - immediate action required
'neutral': '#708090', # Gray - informational
'primary': '#1f4e79', # Navy - brand/emphasis
'secondary': '#4a5568', # Dark gray - secondary elements
'background': '#f7fafc' # Light gray - backgrounds
}
Interactive Elements
class ExecutiveDashboard {
constructor() {
this.filters = {
timeframe: 'YTD',
region: 'All',
business_unit: 'All'
};
this.alertThresholds = {
revenue_variance: 0.05,
customer_churn: 0.02,
margin_decline: 0.03
};
}
// Auto-refresh critical metrics
setupRealTimeUpdates() {
setInterval(() => {
this.updateMetrics(['revenue', 'active_users', 'system_health']);
this.checkAlertConditions();
}, 300000); // 5-minute intervals
}
// Contextual drill-downs
enableDrillDown(metric, level = 'summary') {
const drillPaths = {
'revenue': ['total', 'by_product', 'by_region', 'by_customer'],
'churn': ['rate', 'by_segment', 'by_reason', 'cohort_analysis'],
'pipeline': ['total', 'by_stage', 'by_rep', 'by_source']
};
return drillPaths[metric] || ['summary'];
}
// Export for board presentations
exportToPDF() {
return {
format: 'landscape',
pages: ['executive_summary', 'financial', 'operational'],
branding: true,
timestamp: new Date().toISOString()
};
}
}
Executive Communication Features
Automated Insights
def generate_executive_insights(metrics_data):
insights = []
# Trend analysis
if metrics_data['revenue_growth'] > 0.15:
insights.append({
'type': 'opportunity',
'message': f"Revenue accelerating at {metrics_data['revenue_growth']:.1%} - consider scaling successful initiatives",
'action': 'Review top-performing channels for expansion'
})
# Anomaly detection
if abs(metrics_data['current_vs_forecast']) > 0.1:
insights.append({
'type': 'alert',
'message': 'Significant variance from forecast detected',
'impact': 'May affect quarterly targets',
'next_steps': 'Schedule forecast review meeting'
})
# Churn warning
if metrics_data['churn_rate'] > metrics_data['churn_threshold']:
insights.append({
'type': 'critical',
'message': f"Churn rate at {metrics_data['churn_rate']:.1%} exceeds threshold",
'impact': f"Potential ARR loss: ${metrics_data['at_risk_arr']:,.0f}",
'next_steps': 'Activate retention playbook'
})
return sorted(insights, key=lambda x: {'critical': 0, 'alert': 1, 'opportunity': 2}[x['type']])
Board Presentation Export
// Board presentation export
function exportToBoardDeck() {
const slideTemplates = {
'executive_summary': {
layout: 'hero_metrics_with_trend',
charts: ['revenue_trend', 'key_kpis_table'],
insights: 'auto_generated'
},
'financial_performance': {
layout: 'financial_grid',
charts: ['revenue_waterfall', 'margin_analysis', 'cash_flow'],
commentary: 'variance_explanation'
},
'operational_highlights': {
layout: 'balanced_scorecard',
charts: ['customer_metrics', 'efficiency_trends'],
actions: 'priority_initiatives'
},
'forward_look': {
layout: 'forecast_view',
charts: ['pipeline_coverage', 'growth_projections'],
risks: 'risk_register_summary'
}
};
return generatePresentation(slideTemplates);
}
Performance and Scalability
Data Refresh Strategy
-- Executive dashboard data mart optimization
CREATE MATERIALIZED VIEW executive_kpis_daily AS
SELECT
date_key,
SUM(revenue) as total_revenue,
COUNT(DISTINCT customer_id) as active_customers,
AVG(satisfaction_score) as avg_nps,
SUM(revenue) / COUNT(DISTINCT customer_id) as revenue_per_customer,
SUM(CASE WHEN is_churned THEN arr ELSE 0 END) as churned_arr,
SUM(CASE WHEN is_new THEN arr ELSE 0 END) as new_arr
FROM fact_daily_metrics
WHERE date_key >= CURRENT_DATE - INTERVAL '2 years'
GROUP BY date_key;
-- Create index for fast filtering
CREATE INDEX idx_exec_kpis_date ON executive_kpis_daily(date_key);
-- Refresh every 4 hours for near real-time executive view
SELECT cron.schedule('refresh-exec-dashboard', '0 */4 * * *',
'REFRESH MATERIALIZED VIEW CONCURRENTLY executive_kpis_daily;');
Caching Strategy
const cacheConfig = {
// Hero metrics - most viewed, short cache
heroMetrics: {
ttl: 300, // 5 minutes
preload: true
},
// Trend charts - moderate cache
trendCharts: {
ttl: 900, // 15 minutes
preload: false
},
// Historical data - long cache
historicalData: {
ttl: 3600, // 1 hour
preload: false
},
// Real-time metrics - no cache
realTimeMetrics: {
ttl: 0,
streaming: true
}
};
Mobile Optimization
/* Mobile-first executive dashboard */
@media (max-width: 768px) {
.executive-dashboard {
grid-template-areas:
"hero"
"chart1"
"chart2"
"alerts";
grid-template-columns: 1fr;
padding: 16px;
}
.primary-kpi {
font-size: 32px;
}
.chart-container {
min-height: 200px;
}
/* Touch-friendly controls */
.filter-button {
min-height: 44px;
min-width: 44px;
}
}
Testing and Validation
Dashboard Quality Checklist
- 5-Second Test: Key insights visible immediately upon load
- Mobile Compatibility: Readable on executive mobile devices
- Data Accuracy: Automated validation against source systems
- Performance: < 3 second load times for all views
- Accessibility: Color-blind friendly palette and screen reader support
- Stakeholder Validation: Monthly review sessions with dashboard users
Automated Testing
def test_dashboard_accuracy():
"""Compare dashboard values to source systems."""
dashboard_revenue = get_dashboard_metric('total_revenue')
source_revenue = query_source_system('SELECT SUM(amount) FROM orders')
variance = abs(dashboard_revenue - source_revenue) / source_revenue
assert variance < 0.001, f"Revenue variance {variance:.2%} exceeds threshold"
Лучшие практики
- 5-second rule — ключевые метрики видны сразу
- Progressive disclosure — от общего к деталям
- Mobile-first — работает на телефоне CEO
- Real-time where needed — критичные метрики обновляются часто
- Actionable insights — не просто данные, а рекомендации
- Consistent design — единый визуальный язык
Related Skills
Attack Tree Construction
Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.
Grafana Dashboards
Create and manage production Grafana dashboards for real-time visualization of system and application metrics. Use when building monitoring dashboards, visualizing metrics, or creating operational observability interfaces.
Matplotlib
Foundational plotting library. Create line plots, scatter, bar, histograms, heatmaps, 3D, subplots, export PNG/PDF/SVG, for scientific visualization and publication figures.
Scientific Visualization
Create publication figures with matplotlib/seaborn/plotly. Multi-panel layouts, error bars, significance markers, colorblind-safe, export PDF/EPS/TIFF, for journal-ready scientific plots.
Seaborn
Statistical visualization. Scatter, box, violin, heatmaps, pair plots, regression, correlation matrices, KDE, faceted plots, for exploratory analysis and publication figures.
Shap
Model interpretability and explainability using SHAP (SHapley Additive exPlanations). Use this skill when explaining machine learning model predictions, computing feature importance, generating SHAP plots (waterfall, beeswarm, bar, scatter, force, heatmap), debugging models, analyzing model bias or fairness, comparing models, or implementing explainable AI. Works with tree-based models (XGBoost, LightGBM, Random Forest), deep learning (TensorFlow, PyTorch), linear models, and any black-box model
Pydeseq2
Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.
Query Writing
For writing and executing SQL queries - from simple single-table queries to complex multi-table JOINs and aggregations
Pydeseq2
Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.
Scientific Visualization
Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib/seaborn/plotly with publication styles. For quick exploration use seaborn or plotly directly.
