Home/Data Analyst/Dashboards & Reporting

Explaining Metric Drops

Explaining Metric Drops

Technical Explanation

When metrics change significantly, stakeholders want to know why. A good explanation provides context, rules out false causes, and identifies likely root causes.

Investigation Framework

Step Action
1. Verify Confirm the drop is real
2. Quantify How big is the change?
3. Segment Which parts are affected?
4. Correlate What else happened?
5. Conclude Root cause + confidence

Good Explanations Include

  • Magnitude of change (specific numbers)
  • Timeframe of change
  • Scope (all segments or specific ones)
  • Likely cause with evidence
  • Recommended action

Code Examples

Using the CatCafe dataset:

-- Step 1: Quantify the drop
WITH current_period AS (
    SELECT SUM(total_amount) as revenue
    FROM orders
    WHERE status = 'completed'
    AND order_date >= CURRENT_DATE - INTERVAL '7 days'
),
previous_period AS (
    SELECT SUM(total_amount) as revenue
    FROM orders
    WHERE status = 'completed'
    AND order_date >= CURRENT_DATE - INTERVAL '14 days'
    AND order_date < CURRENT_DATE - INTERVAL '7 days'
)
SELECT
    current_period.revenue as current_revenue,
    previous_period.revenue as previous_revenue,
    current_period.revenue - previous_period.revenue as change,
    (current_period.revenue - previous_period.revenue) * 100.0
        / NULLIF(previous_period.revenue, 0) as change_pct
FROM current_period, previous_period;

-- Step 2: Segment by dimension
SELECT
    segment,
    SUM(CASE WHEN order_date >= CURRENT_DATE - INTERVAL '7 days'
        THEN total_amount ELSE 0 END) as current_period,
    SUM(CASE WHEN order_date >= CURRENT_DATE - INTERVAL '14 days'
        AND order_date < CURRENT_DATE - INTERVAL '7 days'
        THEN total_amount ELSE 0 END) as previous_period,
    SUM(CASE WHEN order_date >= CURRENT_DATE - INTERVAL '7 days'
        THEN total_amount ELSE 0 END) -
    SUM(CASE WHEN order_date >= CURRENT_DATE - INTERVAL '14 days'
        AND order_date < CURRENT_DATE - INTERVAL '7 days'
        THEN total_amount ELSE 0 END) as change
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.status = 'completed'
GROUP BY segment
ORDER BY change;

-- Step 3: Check for correlating events
SELECT
    DATE_TRUNC('day', event_date) as date,
    event_type,
    COUNT(*) as occurrences
FROM events
WHERE event_date >= CURRENT_DATE - INTERVAL '14 days'
AND event_type IN ('site_outage', 'price_change', 'new_campaign', 'marketing_email')
GROUP BY DATE_TRUNC('day', event_date), event_type
ORDER BY date DESC;

The Cat Analogy

When cat weight drops, you investigate systematically:

Metric: Whiskers lost 2 lbs this month

Bad explanation:
  "The cat lost weight."

Good explanation:
  "Whiskers dropped from 11 lbs to 9 lbs (-18%) this month.
   This is concerning because:
   - Weight loss is isolated to Whiskers (other cats stable)
   - Food intake unchanged (not appetite issue)
   - Likely cause: Recent move to new home (stress)
   - Action: Monitor for 2 more weeks, if continues, vet visit
   Confidence: High (behavioral cause identified)"

Exercises

Exercise 1

What information should a good metric drop explanation include?

Exercise 2

Write a query to segment a revenue drop by customer acquisition channel.

Exercise 3

How would you distinguish between a real business problem vs a data quality issue when a metric changes?


Key Takeaways

  • Quantify the change precisely
  • Segment to find scope
  • Check for correlating events
  • Distinguish real issues from data problems
  • Provide context and confidence level