This lesson covers how to create effective dashboards and use data storytelling techniques to communicate insights compellingly.
1. Data Foundation
2. Visual Communication
3. Narrative Structure
Step 1: Know Your Audience
Executive Audience:
- Focus on business impact and ROI
- High-level summaries and trends
- Clear recommendations
- Time-sensitive insights
Technical Audience:
- Detailed methodology and analysis
- Statistical significance and validation
- Interactive exploration capabilities
- Underlying data access
General Audience:
- Simple, relatable examples
- Visual metaphors and analogies
- Clear, jargon-free language
- Emotional connection to data
Step 2: Define Your Core Message
-- Identify core story from your data
WITH story_analysis AS (
SELECT
-- What changed significantly?
metric_name,
current_value,
previous_value,
(current_value - previous_value) / previous_value * 100 as percent_change,
-- Is it statistically significant?
CASE
WHEN ABS((current_value - previous_value) / previous_value) > 0.1 THEN 'Significant'
ELSE 'Normal Variation'
END as significance_level,
-- What's the business impact?
CASE
WHEN metric_name LIKE '%revenue%' AND percent_change > 5 THEN 'Revenue Growth Opportunity'
WHEN metric_name LIKE '%cost%' AND percent_change < -5 THEN 'Cost Reduction Success'
WHEN metric_name LIKE '%customer%' AND percent_change < -5 THEN 'Customer Retention Issue'
ELSE 'Normal Business Operation'
END as business_impact
FROM monthly_metrics
WHERE month = CURRENT_DATE - INTERVAL '1 month'
),
story_prioritization AS (
SELECT
business_impact,
COUNT(*) as affected_metrics,
AVG(ABS(percent_change)) as avg_change_magnitude,
-- Prioritize by impact and magnitude
CASE
WHEN business_impact LIKE '%Opportunity%' AND AVG(ABS(percent_change)) > 10 THEN 'High Priority Story'
WHEN business_impact LIKE '%Issue%' AND AVG(ABS(percent_change)) > 10 THEN 'Critical Issue'
WHEN business_impact LIKE '%Success%' AND AVG(ABS(percent_change)) > 5 THEN 'Success Story'
ELSE 'Routine Update'
END as story_priority
FROM story_analysis
GROUP BY business_impact
)
SELECT
story_priority,
business_impact as core_message,
affected_metrics,
ROUND(avg_change_magnitude, 2) as average_impact,
CASE
WHEN story_priority = 'Critical Issue' THEN 'Requires immediate attention and action plan'
WHEN story_priority = 'High Priority Story' THEN 'Opportunity for strategic advantage'
WHEN story_priority = 'Success Story' THEN 'Highlight achievements and best practices'
ELSE 'Regular business monitoring'
END as narrative_angle
FROM story_prioritization
ORDER BY
CASE story_priority
WHEN 'Critical Issue' THEN 1
WHEN 'High Priority Story' THEN 2
WHEN 'Success Story' THEN 3
ELSE 4
END;
Step 3: Structure Your Narrative
The Hook (First 30 Seconds)
The Development (Main Body)
The Resolution (Conclusion)
1. The Hero's Journey (Data Edition)
Status Quo → Challenge → Discovery → Transformation → New Reality
Example:
"We were meeting our sales targets (Status Quo)
But noticed declining customer retention (Challenge)
Analysis revealed product usage patterns (Discovery)
Changed onboarding process (Transformation)
Now retention increased by 25% (New Reality)"
2. Problem-Solution Framework
Problem → Impact → Root Cause → Solution → Results
Example:
"Customer churn increased 15% (Problem)
Costing $2M in lost revenue (Impact)
Caused by poor onboarding experience (Root Cause)
Implemented guided tutorials (Solution)
Reduced churn by 40% (Results)"
3. Before-After-Because
Before → After → Because
Example:
"Before: 60% customer satisfaction
After: 85% customer satisfaction
Because: We reduced response time from 24 hours to 2 hours"
1. Progressive Disclosure
-- Create layers of information for storytelling
WITH story_layers AS (
-- Layer 1: High-level overview
SELECT
1 as layer_number,
'Executive Summary' as layer_name,
'Total Revenue: $5.2M (+15% YoY)' as key_insight,
'Revenue growth driven by new product launches' as narrative
UNION ALL
-- Layer 2: Key drivers
SELECT
2 as layer_number,
'Key Drivers' as layer_name,
'Product A: $2.1M, Product B: $1.8M, Product C: $1.3M' as key_insight,
'Product A exceeded projections by 40%' as narrative
UNION ALL
-- Layer 3: Detailed analysis
SELECT
3 as layer_number,
'Detailed Analysis' as layer_name,
'Q1: $1.1M, Q2: $1.3M, Q3: $1.4M, Q4: $1.4M' as key_insight,
'Steady growth throughout the year' as narrative
),
story_flow AS (
SELECT
layer_number,
layer_name,
key_insight,
narrative,
-- Create transition text
LAG(key_insight) OVER (ORDER BY layer_number) as previous_insight,
-- Determine visualization type
CASE
WHEN layer_number = 1 THEN 'KPI Cards'
WHEN layer_number = 2 THEN 'Bar Chart'
WHEN layer_number = 3 THEN 'Line Chart'
END as recommended_visualization
FROM story_layers
)
SELECT
layer_name,
key_insight as main_point,
narrative as supporting_story,
previous_insight as transition_from,
recommended_visualization,
CASE
WHEN layer_number = 1 THEN 'Start with big picture'
WHEN layer_number = 2 THEN 'Drill down into components'
ELSE 'Show detailed trends'
END as presentation_guidance
FROM story_flow
ORDER BY layer_number;
2. Annotation and Highlighting
3. Comparative Storytelling
Dashboards
Reports
Operational Monitoring
- Real-time sales tracking
- Website performance monitoring
- Manufacturing process control
- Customer service metrics
- Financial transaction monitoring
Strategic Decision Making
- Executive performance dashboards
- Market trend analysis
- Competitive intelligence
- Portfolio management
- Resource allocation
Exploratory Analysis
- Customer behavior analysis
- Product performance exploration
- Market segmentation
- Root cause analysis
- Hypothesis testing
Compliance and Documentation
- Financial statements
- Regulatory filings
- Audit reports
- Quality assurance documentation
- Project status reports
Periodic Business Reviews
- Monthly business reviews
- Quarterly earnings reports
- Annual performance summaries
- Board meeting presentations
- Investor communications
Deep-Dive Analysis
- Market research reports
- Customer satisfaction studies
- Competitive analysis
- Trend analysis reports
- Forecast and planning documents
Real-time Dashboard Data Preparation
-- Prepare data for executive dashboard
WITH dashboard_metrics AS (
-- Revenue KPIs
SELECT
'Revenue' as metric_category,
'Total Revenue' as metric_name,
SUM(sales_amount) as current_value,
SUM(sales_amount) - LAG(SUM(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) as monthly_change,
SUM(sales_amount) / LAG(SUM(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 as monthly_growth_rate,
'$' || ROUND(SUM(sales_amount)/1000000, 2) || 'M' as formatted_value,
CASE
WHEN SUM(sales_amount) / LAG(SUM(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 > 0.05 THEN 'Positive'
WHEN SUM(sales_amount) / LAG(SUM(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 < -0.05 THEN 'Negative'
ELSE 'Neutral'
END as trend_indicator
FROM sales_data
WHERE date >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '2 months'
GROUP BY DATE_TRUNC('month', date)
ORDER BY DATE_TRUNC('month', date) DESC
LIMIT 1
UNION ALL
-- Customer KPIs
SELECT
'Customers' as metric_category,
'Active Customers' as metric_name,
COUNT(DISTINCT customer_id) as current_value,
COUNT(DISTINCT customer_id) - LAG(COUNT(DISTINCT customer_id)) OVER (ORDER BY DATE_TRUNC('month', date)) as monthly_change,
COUNT(DISTINCT customer_id) * 1.0 / LAG(COUNT(DISTINCT customer_id)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 as monthly_growth_rate,
COUNT(DISTINCT customer_id)::TEXT as formatted_value,
CASE
WHEN COUNT(DISTINCT customer_id) * 1.0 / LAG(COUNT(DISTINCT customer_id)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 > 0.02 THEN 'Positive'
WHEN COUNT(DISTINCT customer_id) * 1.0 / LAG(COUNT(DISTINCT customer_id)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 < -0.02 THEN 'Negative'
ELSE 'Neutral'
END as trend_indicator
FROM sales_data
WHERE date >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '2 months'
GROUP BY DATE_TRUNC('month', date)
ORDER BY DATE_TRUNC('month', date) DESC
LIMIT 1
UNION ALL
-- Performance KPIs
SELECT
'Performance' as metric_category,
'Average Order Value' as metric_name,
AVG(sales_amount) as current_value,
AVG(sales_amount) - LAG(AVG(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) as monthly_change,
AVG(sales_amount) / LAG(AVG(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 as monthly_growth_rate,
'$' || ROUND(AVG(sales_amount), 2) as formatted_value,
CASE
WHEN AVG(sales_amount) / LAG(AVG(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 > 0.03 THEN 'Positive'
WHEN AVG(sales_amount) / LAG(AVG(sales_amount)) OVER (ORDER BY DATE_TRUNC('month', date)) - 1 < -0.03 THEN 'Negative'
ELSE 'Neutral'
END as trend_indicator
FROM sales_data
WHERE date >= DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '2 months'
GROUP BY DATE_TRUNC('month', date)
ORDER BY DATE_TRUNC('month', date) DESC
LIMIT 1
),
dashboard_alerts AS (
-- Generate alerts for dashboard
SELECT
metric_category,
metric_name,
current_value,
monthly_change,
monthly_growth_rate,
formatted_value,
trend_indicator,
-- Alert levels
CASE
WHEN metric_category = 'Revenue' AND monthly_growth_rate < -0.1 THEN 'Critical'
WHEN metric_category = 'Customers' AND monthly_growth_rate < -0.05 THEN 'Warning'
WHEN metric_category = 'Performance' AND monthly_growth_rate < -0.05 THEN 'Warning'
WHEN monthly_growth_rate > 0.1 THEN 'Success'
ELSE 'Normal'
END as alert_level,
-- Alert messages
CASE
WHEN metric_category = 'Revenue' AND monthly_growth_rate < -0.1 THEN 'Revenue decline requires immediate attention'
WHEN metric_category = 'Customers' AND monthly_growth_rate < -0.05 THEN 'Customer loss detected - investigate retention'
WHEN metric_category = 'Performance' AND monthly_growth_rate < -0.05 THEN 'Order value declining - review pricing strategy'
WHEN monthly_growth_rate > 0.1 THEN 'Exceptional performance - identify success factors'
ELSE 'Performance within normal range'
END as alert_message
FROM dashboard_metrics
)
SELECT
metric_category,
metric_name,
formatted_value as display_value,
ROUND(monthly_growth_rate * 100, 2) || '%' as growth_display,
trend_indicator,
alert_level,
alert_message,
-- Color coding for dashboard
CASE
WHEN alert_level = 'Critical' THEN '#D32F2F' -- Red
WHEN alert_level = 'Warning' THEN '#F57C00' -- Orange
WHEN alert_level = 'Success' THEN '#388E3C' -- Green
ELSE '#1976D2' -- Blue
END as indicator_color
FROM dashboard_alerts
ORDER BY
CASE alert_level
WHEN 'Critical' THEN 1
WHEN 'Warning' THEN 2
WHEN 'Success' THEN 3
ELSE 4
END,
metric_category,
metric_name;
Monthly Business Report Data
-- Prepare data for monthly business report
WITH report_summary AS (
-- Executive Summary
SELECT
1 as section_order,
'Executive Summary' as section_title,
'Monthly Performance Overview' as subsection_title,
'Total revenue of $5.2M represents 15% YoY growth, exceeding target by 5%' as key_finding,
'Strong performance across all product lines, with Product A leading growth at 40%' as detail,
'Continue current strategy while monitoring competitive threats' as recommendation
UNION ALL
-- Financial Performance
SELECT
2 as section_order,
'Financial Performance' as section_title,
'Revenue Analysis' as subsection_title,
'Revenue increased by $680K from previous month' as key_finding,
'Growth driven by new customer acquisition (25%) and increased order value (10%)' as detail,
'Invest in customer acquisition programs to maintain momentum' as recommendation
UNION ALL
-- Customer Analysis
SELECT
3 as section_order,
'Customer Analysis' as section_title,
'Customer Metrics' as subsection_title,
'Active customers grew by 1,200 to 45,000 total' as key_finding,
'Customer retention rate improved to 92%, up from 88% last quarter' as detail,
'Focus on retention programs to maintain high customer satisfaction' as recommendation
UNION ALL
-- Operational Highlights
SELECT
4 as section_order,
'Operational Highlights' as section_title,
'Key Achievements' as subsection_title,
'Launched three new products with combined revenue of $800K' as key_finding,
'Improved order fulfillment time from 48 to 24 hours' as detail,
'Scale successful processes to other product categories' as recommendation
),
report_data AS (
-- Supporting data tables
SELECT
'Revenue by Product' as table_title,
ARRAY[
ROW('Product A', 2100000, 40.0),
ROW('Product B', 1800000, 20.0),
ROW('Product C', 1300000, 15.0)
] as data_rows
UNION ALL
SELECT
'Regional Performance' as table_title,
ARRAY[
ROW('North America', 2600000, 50.0),
ROW('Europe', 1560000, 30.0),
ROW('Asia Pacific', 1040000, 20.0)
] as data_rows
)
SELECT
section_order,
section_title,
subsection_title,
key_finding as main_point,
detail as supporting_evidence,
recommendation as action_item,
-- Report formatting
CASE
WHEN section_order = 1 THEN 'executive_summary'
WHEN section_order = 2 THEN 'financial_analysis'
WHEN section_order = 3 THEN 'customer_analysis'
ELSE 'operational_review'
END as report_section,
-- Visual recommendations
CASE
WHEN section_order = 1 THEN 'KPI dashboard, trend charts'
WHEN section_order = 2 THEN 'Revenue waterfall, product comparison'
WHEN section_order = 3 THEN 'Customer funnel, retention analysis'
ELSE 'Process metrics, achievement timeline'
END as recommended_visuals
FROM report_summary
ORDER BY section_order;
1. Filtering and Selection
2. Drill-Down and Roll-Up
3. Hover and Tooltip Information
4. Dynamic Calculations
SQL for Interactive Filters
-- Create dynamic filtering structure for interactive dashboard
WITH filter_options AS (
-- Time period options
SELECT
'time_period' as filter_type,
'Last 7 Days' as filter_value,
'date >= CURRENT_DATE - INTERVAL ''7 days''' as filter_condition,
1 as display_order
UNION ALL
SELECT
'time_period' as filter_type,
'Last 30 Days' as filter_value,
'date >= CURRENT_DATE - INTERVAL ''30 days''' as filter_condition,
2 as display_order
UNION ALL
SELECT
'time_period' as filter_type,
'Last Quarter' as filter_value,
'date >= DATE_TRUNC(''quarter'', CURRENT_DATE) - INTERVAL ''3 months''' as filter_condition,
3 as display_order
UNION ALL
-- Product category options
SELECT
'product_category' as filter_type,
'All Categories' as filter_value,
'1=1' as filter_condition,
1 as display_order
UNION ALL
SELECT DISTINCT
'product_category' as filter_type,
product_category as filter_value,
'product_category = ''' || product_category || '''' as filter_condition,
2 as display_order
FROM sales_data
WHERE product_category IS NOT NULL
UNION ALL
-- Geographic options
SELECT
'region' as filter_type,
'All Regions' as filter_value,
'1=1' as filter_condition,
1 as display_order
UNION ALL
SELECT DISTINCT
'region' as filter_type,
region as filter_value,
'region = ''' || region || '''' as filter_condition,
2 as display_order
FROM sales_data
WHERE region IS NOT NULL
),
interactive_metrics AS (
-- Calculate metrics that respond to filters
SELECT
filter_type,
filter_value,
filter_condition,
display_order,
-- Sample dynamic calculation (would be implemented in application layer)
CASE
WHEN filter_type = 'time_period' THEN
'SELECT COUNT(*) as transactions, SUM(sales_amount) as revenue FROM sales_data WHERE ' || filter_condition
WHEN filter_type = 'product_category' THEN
'SELECT COUNT(*) as transactions, SUM(sales_amount) as revenue FROM sales_data WHERE ' || filter_condition
ELSE
'SELECT COUNT(*) as transactions, SUM(sales_amount) as revenue FROM sales_data WHERE ' || filter_condition
END as dynamic_query
FROM filter_options
)
SELECT
filter_type,
filter_value as display_label,
filter_condition as backend_filter,
display_order,
dynamic_query as query_template,
-- UI configuration
CASE
WHEN filter_type = 'time_period' THEN 'date_range_selector'
WHEN filter_type = 'product_category' THEN 'multi_select_dropdown'
WHEN filter_type = 'region' THEN 'single_select_dropdown'
ELSE 'text_input'
END as ui_component_type,
-- Default selections
CASE
WHEN display_order = 1 THEN true
ELSE false
END as is_default
FROM interactive_metrics
ORDER BY filter_type, display_order;
SQL for Drill-Down Capabilities
-- Create hierarchical data structure for drill-down functionality
WITH hierarchy_data AS (
-- Level 1: Total Company
SELECT
1 as hierarchy_level,
'Company' as entity_type,
'Total Company' as entity_name,
NULL as parent_entity,
SUM(sales_amount) as total_sales,
COUNT(DISTINCT customer_id) as customer_count,
COUNT(*) as transaction_count
FROM sales_data
UNION ALL
-- Level 2: Regions
SELECT
2 as hierarchy_level,
'Region' as entity_type,
region as entity_name,
'Total Company' as parent_entity,
SUM(sales_amount) as total_sales,
COUNT(DISTINCT customer_id) as customer_count,
COUNT(*) as transaction_count
FROM sales_data
GROUP BY region
UNION ALL
-- Level 3: Product Categories within Regions
SELECT
3 as hierarchy_level,
'Product Category' as entity_type,
region || ' - ' || product_category as entity_name,
region as parent_entity,
SUM(sales_amount) as total_sales,
COUNT(DISTINCT customer_id) as customer_count,
COUNT(*) as transaction_count
FROM sales_data
GROUP BY region, product_category
UNION ALL
-- Level 4: Individual Products
SELECT
4 as hierarchy_level,
'Product' as entity_type,
product_name as entity_name,
region || ' - ' || product_category as parent_entity,
SUM(sales_amount) as total_sales,
COUNT(DISTINCT customer_id) as customer_count,
COUNT(*) as transaction_count
FROM sales_data
GROUP BY region, product_category, product_name
),
drill_down_structure AS (
SELECT
hierarchy_level,
entity_type,
entity_name,
parent_entity,
total_sales,
customer_count,
transaction_count,
-- Calculate percentage of parent
total_sales * 100.0 / LAG(total_sales) OVER (PARTITION BY entity_name ORDER BY hierarchy_level) as percentage_of_parent,
-- Navigation information
CASE
WHEN hierarchy_level < 4 THEN 'drill_down_available'
ELSE 'lowest_level'
END as drill_capability,
-- Visualization recommendations
CASE
WHEN hierarchy_level = 1 THEN 'kpi_cards'
WHEN hierarchy_level = 2 THEN 'bar_chart'
WHEN hierarchy_level = 3 THEN 'stacked_bar'
ELSE 'table_view'
END as recommended_visualization
FROM hierarchy_data
)
SELECT
entity_type as level_type,
entity_name as display_name,
parent_entity as parent_level,
total_sales as revenue_metric,
customer_count as customer_metric,
transaction_count as volume_metric,
ROUND(percentage_of_parent, 2) as parent_percentage,
drill_capability as can_drill_down,
recommended_visualization as suggested_chart,
-- Navigation path for breadcrumbs
CASE
WHEN hierarchy_level = 1 THEN 'Home'
WHEN hierarchy_level = 2 THEN 'Home > ' || entity_name
WHEN hierarchy_level = 3 THEN 'Home > ' || parent_entity || ' > ' || entity_name
ELSE 'Home > ' || SUBSTRING(parent_entity, 1, POSITION(' - ' IN parent_entity) - 1) || ' > ' ||
SUBSTRING(parent_entity, POSITION(' - ' IN parent_entity) + 3) || ' > ' || entity_name
END as breadcrumb_path
FROM drill_down_structure
ORDER BY hierarchy_level, total_sales DESC;
1. Performance Optimization
2. User Experience Design
3. Responsive Design
1. Situation-Complication-Resolution (SCR)
Situation: Here's where we are
Complication: Here's the problem/opportunity
Resolution: Here's what we should do
Example:
Situation: Our Q3 revenue grew 15% to $5.2M
Complication: However, customer acquisition cost increased 30%
Resolution: Optimize marketing spend and focus on retention
2. What-So What-Now What
What: What are the facts?
So What: Why does it matter?
Now What: What should we do?
Example:
What: Customer churn increased from 5% to 8%
So What: This represents $1.2M in lost annual revenue
Now What: Implement customer retention program immediately
3. Pyramid Principle
Start with main conclusion
Support with 2-3 key arguments
Provide evidence for each argument
Example:
Main Point: We need to invest in mobile platform
Key Arguments:
1. Mobile usage growing 40% annually
2. Competitors gaining mobile market share
3. Mobile customers have 25% higher lifetime value
Automated Insight Detection
-- Generate automated insights from data
WITH insight_detection AS (
-- Trend Analysis
SELECT
'Trend' as insight_type,
'Revenue Growth Acceleration' as insight_title,
'Monthly revenue growth increased from 5% to 15% over last quarter' as insight_description,
'Positive' as sentiment,
'Strategic' as impact_level,
'Analyze growth drivers and scale successful initiatives' as recommendation,
95 as confidence_score
FROM monthly_revenue
WHERE growth_rate > LAG(growth_rate) OVER (ORDER BY month) * 2
ORDER BY month DESC
LIMIT 1
UNION ALL
-- Anomaly Detection
SELECT
'Anomaly' as insight_type,
'Unusual Customer Behavior Pattern' as insight_title,
'Customer support tickets increased 300% after product launch' as insight_description,
'Negative' as sentiment,
'Operational' as impact_level,
'Investigate product issues and improve customer support' as recommendation,
88 as confidence_score
FROM support_metrics
WHERE ticket_count > AVG(ticket_count) OVER (ORDER BY date ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) * 3
ORDER BY date DESC
LIMIT 1
UNION ALL
-- Opportunity Detection
SELECT
'Opportunity' as insight_type,
'Underserved Market Segment' as insight_title,
'Enterprise customers show 50% higher growth but represent only 20% of base' as insight_description,
'Positive' as sentiment,
'Strategic' as impact_level,
'Develop enterprise-focused products and sales strategy' as recommendation,
92 as confidence_score
FROM customer_segment_analysis
WHERE segment_growth > 0.4 AND segment_size < 0.3
ORDER BY segment_growth DESC
LIMIT 1
),
insight_prioritization AS (
SELECT
insight_type,
insight_title,
insight_description,
sentiment,
impact_level,
recommendation,
confidence_score,
-- Calculate priority score
CASE
WHEN impact_level = 'Strategic' AND sentiment = 'Positive' THEN confidence_score * 1.2
WHEN impact_level = 'Strategic' AND sentiment = 'Negative' THEN confidence_score * 1.5
WHEN impact_level = 'Operational' AND sentiment = 'Negative' THEN confidence_score * 1.3
ELSE confidence_score
END as priority_score,
-- Determine urgency
CASE
WHEN impact_level = 'Strategic' AND sentiment = 'Negative' THEN 'Immediate'
WHEN impact_level = 'Strategic' THEN 'High'
WHEN impact_level = 'Operational' AND sentiment = 'Negative' THEN 'Medium'
ELSE 'Low'
END as urgency_level
FROM insight_detection
)
SELECT
insight_type,
insight_title as headline,
insight_description as key_finding,
sentiment as emotional_tone,
impact_level as business_impact,
recommendation as action_required,
ROUND(confidence_score, 1) as confidence_level,
ROUND(priority_score, 1) as priority_score,
urgency_level as time_sensitivity,
-- Communication format
CASE
WHEN urgency_level = 'Immediate' THEN 'Executive alert with immediate action plan'
WHEN urgency_level = 'High' THEN 'Detailed analysis with strategic recommendations'
WHEN urgency_level = 'Medium' THEN 'Operational review with tactical actions'
ELSE 'Informational update for planning'
END as communication_format,
-- Visual support needed
CASE
WHEN insight_type = 'Trend' THEN 'Trend charts with projections'
WHEN insight_type = 'Anomaly' THEN 'Before/after comparison charts'
WHEN insight_type = 'Opportunity' THEN 'Market size and growth charts'
ELSE 'Custom visualization based on insight'
END as recommended_visuals
FROM insight_prioritization
ORDER BY priority_score DESC;
1. Executive Summaries
2. Technical Presentations
3. General Audience Communication
1. Data Dumping
2. Lack of Context
3. Poor Visual Design
4. Weak Recommendations
In the next lesson, we'll explore A/B testing and experimental design to validate insights and drive data-driven decisions.