Senior Data Analyst Interview Questions: Complete Guide

Milad Bonakdar
Author
Master advanced data analysis with essential interview questions covering advanced SQL, statistical analysis, data modeling, ETL processes, dashboard design, and stakeholder management for senior data analysts.
Introduction
Senior data analysts are expected to lead complex analytical projects, design robust data solutions, optimize business processes, and communicate insights that drive strategic decisions. This role demands expertise in advanced SQL, statistical analysis, data modeling, ETL processes, and stakeholder management.
This comprehensive guide covers essential interview questions for Senior Data Analysts, spanning advanced SQL techniques, statistical analysis, data modeling, ETL processes, dashboard optimization, and business strategy. Each question includes detailed answers, rarity assessment, and difficulty ratings.
Advanced SQL (6 Questions)
1. Explain window functions and give examples.
Answer: Window functions perform calculations across a set of rows related to the current row without collapsing the result.
- Common Window Functions:
- ROW_NUMBER(): Unique sequential number
- RANK(): Rank with gaps for ties
- DENSE_RANK(): Rank without gaps
- LAG/LEAD(): Access previous/next row
- SUM/AVG/COUNT() OVER(): Running totals/averages
-- ROW_NUMBER: Assign unique numbers
SELECT
employee_id,
first_name,
salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
-- RANK: Rank employees by salary within each department
SELECT
department,
employee_id,
salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;
-- LAG: Compare with previous row
SELECT
year,
revenue,
LAG(revenue) OVER (ORDER BY year) AS prev_year_revenue,
revenue - LAG(revenue) OVER (ORDER BY year) AS revenue_change
FROM annual_sales;
-- Running total
SELECT
order_date,
amount,
SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;
-- Moving average (last 3 months)
SELECT
month,
sales,
AVG(sales) OVER (
ORDER BY month
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS moving_avg_3m
FROM monthly_sales;Rarity: Very Common Difficulty: Hard
2. How do you optimize slow SQL queries?
Answer: Query optimization improves performance and reduces resource usage.
- Techniques:
- Indexing: Create indexes on frequently queried columns
- *Avoid SELECT : Select only needed columns
- Use WHERE efficiently: Filter early
- Optimize JOINs: Join on indexed columns
- Avoid subqueries: Use JOINs or CTEs instead
- Use EXPLAIN: Analyze query execution plan
- Partition tables: For very large tables
- Aggregate efficiently: Use appropriate GROUP BY
-- Bad: SELECT * and subquery
SELECT * FROM orders
WHERE customer_id IN (
SELECT customer_id FROM customers WHERE country = 'USA'
);
-- Good: Specific columns and JOIN
SELECT o.order_id, o.order_date, o.amount
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
WHERE c.country = 'USA';
-- Use EXPLAIN to analyze
EXPLAIN SELECT * FROM orders WHERE order_date > '2023-01-01';
-- Create index for better performance
CREATE INDEX idx_order_date ON orders(order_date);
-- Use covering index (includes all needed columns)
CREATE INDEX idx_orders_covering ON orders(customer_id, order_date, amount);
-- Partition large tables
CREATE TABLE orders_2023 PARTITION OF orders
FOR VALUES FROM ('2023-01-01') TO ('2024-01-01');Rarity: Very Common Difficulty: Hard
3. What are CTEs (Common Table Expressions) and when would you use them?
Answer: CTEs create temporary named result sets that exist only during query execution.
- Benefits:
- Improve readability
- Enable recursion
- Reuse in same query
- Better than subqueries for complex logic
-- Basic CTE
WITH high_earners AS (
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 80000
)
SELECT * FROM high_earners
WHERE first_name LIKE 'J%';
-- Multiple CTEs
WITH
sales_summary AS (
SELECT
product_id,
SUM(quantity) AS total_quantity,
SUM(amount) AS total_revenue
FROM sales
GROUP BY product_id
),
product_info AS (
SELECT product_id, product_name, category
FROM products
)
SELECT
p.product_name,
p.category,
s.total_quantity,
s.total_revenue
FROM sales_summary s
JOIN product_info p ON s.product_id = p.product_id
ORDER BY s.total_revenue DESC;
-- Recursive CTE (organizational hierarchy)
WITH RECURSIVE employee_hierarchy AS (
-- Base case: top-level employees
SELECT employee_id, first_name, manager_id, 1 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive case: employees reporting to previous level
SELECT e.employee_id, e.first_name, e.manager_id, eh.level + 1
FROM employees e
JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM employee_hierarchy
ORDER BY level, employee_id;Rarity: Common Difficulty: Medium
4. Explain the difference between UNION and UNION ALL.
Answer: Both combine results from multiple SELECT statements.
- UNION:
- Removes duplicate rows
- Slower (requires sorting/comparison)
- Use when duplicates should be eliminated
- UNION ALL:
- Keeps all rows including duplicates
- Faster (no deduplication)
- Use when duplicates are acceptable or impossible
-- UNION - removes duplicates
SELECT customer_id FROM orders_2022
UNION
SELECT customer_id FROM orders_2023;
-- Result: unique customer IDs from both years
-- UNION ALL - keeps duplicates
SELECT customer_id FROM orders_2022
UNION ALL
SELECT customer_id FROM orders_2023;
-- Result: all customer IDs (may have duplicates)
-- Performance comparison
-- UNION ALL is faster when you know there are no duplicates
SELECT 'Q1' AS quarter, revenue FROM q1_sales
UNION ALL
SELECT 'Q2', revenue FROM q2_sales
UNION ALL
SELECT 'Q3', revenue FROM q3_sales
UNION ALL
SELECT 'Q4', revenue FROM q4_sales;Rarity: Common Difficulty: Easy
5. How do you handle NULL values in SQL?
Answer: NULL represents missing or unknown data and requires special handling.
-- Check for NULL
SELECT * FROM employees
WHERE manager_id IS NULL; -- Not: = NULL
-- COALESCE: Return first non-NULL value
SELECT
first_name,
COALESCE(middle_name, '') AS middle_name,
COALESCE(bonus, 0) AS bonus
FROM employees;
-- NULLIF: Return NULL if values are equal
SELECT
product_name,
NULLIF(discount, 0) AS discount -- NULL if discount is 0
FROM products;
-- NULL in calculations (NULL propagates)
SELECT
salary,
bonus,
salary + bonus AS total -- NULL if bonus is NULL
FROM employees;
-- Handle NULL in aggregations
SELECT
department,
COUNT(*) AS total_employees,
COUNT(manager_id) AS employees_with_manager, -- Excludes NULLs
AVG(COALESCE(bonus, 0)) AS avg_bonus
FROM employees
GROUP BY department;
-- NULL in JOINs
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
WHERE d.department_id IS NULL; -- Employees without departmentRarity: Very Common Difficulty: Medium
6. What are subqueries and when would you use them vs JOINs?
Answer: Subqueries are queries nested within another query.
- Types:
- Scalar: Returns single value
- Row: Returns single row
- Table: Returns multiple rows/columns
- Use Subqueries when:
- Need to filter based on aggregated data
- Checking existence (EXISTS)
- Comparing to aggregated values
- Use JOINs when:
- Need columns from multiple tables
- Better performance (usually)
-- Scalar subquery
SELECT first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- Correlated subquery (runs for each row)
SELECT e1.first_name, e1.salary
FROM employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.department = e1.department
);
-- EXISTS (efficient for checking existence)
SELECT c.customer_name
FROM customers c
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.customer_id
AND o.order_date > '2023-01-01'
);
-- IN with subquery
SELECT product_name
FROM products
WHERE product_id IN (
SELECT DISTINCT product_id
FROM sales
WHERE sale_date > '2023-01-01'
);
-- JOIN alternative (often faster)
SELECT DISTINCT p.product_name
FROM products p
INNER JOIN sales s ON p.product_id = s.product_id
WHERE s.sale_date > '2023-01-01';Rarity: Very Common Difficulty: Medium
Statistical Analysis (4 Questions)
7. How do you perform cohort analysis?
Answer: Cohort analysis groups users by shared characteristics and tracks behavior over time.
- Common Use Cases:
- Customer retention
- User engagement
- Revenue trends by acquisition period
-- Cohort analysis: Monthly retention
WITH user_cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', first_purchase_date) AS cohort_month
FROM users
),
user_activities AS (
SELECT
user_id,
DATE_TRUNC('month', activity_date) AS activity_month
FROM activities
)
SELECT
uc.cohort_month,
ua.activity_month,
COUNT(DISTINCT ua.user_id) AS active_users,
COUNT(DISTINCT ua.user_id) * 100.0 /
COUNT(DISTINCT uc.user_id) AS retention_rate
FROM user_cohorts uc
LEFT JOIN user_activities ua ON uc.user_id = ua.user_id
GROUP BY uc.cohort_month, ua.activity_month
ORDER BY uc.cohort_month, ua.activity_month;
-- Revenue cohort analysis
SELECT
cohort_month,
months_since_cohort,
SUM(revenue) AS cohort_revenue,
AVG(revenue) AS avg_revenue_per_user
FROM (
SELECT
DATE_TRUNC('month', u.signup_date) AS cohort_month,
EXTRACT(MONTH FROM AGE(o.order_date, u.signup_date)) AS months_since_cohort,
o.revenue,
u.user_id
FROM users u
JOIN orders o ON u.user_id = o.user_id
) cohort_data
GROUP BY cohort_month, months_since_cohort
ORDER BY cohort_month, months_since_cohort;Rarity: Common Difficulty: Hard
8. Explain A/B test analysis and statistical significance.
Answer: A/B testing compares two versions to determine which performs better.
- Key Metrics:
- Conversion rate
- Statistical significance (p-value < 0.05)
- Confidence interval
- Sample size
- Process:
- Define hypothesis
- Determine sample size
- Run test
- Analyze results
- Make decision
-- A/B test results analysis
WITH test_results AS (
SELECT
variant,
COUNT(*) AS visitors,
SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) AS conversions,
SUM(CASE WHEN converted = 1 THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS conversion_rate
FROM ab_test_data
GROUP BY variant
)
SELECT
variant,
visitors,
conversions,
ROUND(conversion_rate, 2) AS conversion_rate_pct,
-- Calculate lift
ROUND((conversion_rate - LAG(conversion_rate) OVER (ORDER BY variant)) /
LAG(conversion_rate) OVER (ORDER BY variant) * 100, 2) AS lift_pct
FROM test_results;
-- Statistical significance calculation (chi-square test)
-- Typically done in Python/R, but can calculate components in SQL
SELECT
variant,
conversions,
visitors - conversions AS non_conversions,
visitors
FROM ab_test_data
GROUP BY variant;Rarity: Common Difficulty: Hard
9. How do you calculate and interpret percentiles?
Answer: Percentiles divide data into 100 equal parts.
- Common Percentiles:
- 25th (Q1), 50th (Median/Q2), 75th (Q3)
- 90th, 95th, 99th for outlier detection
- Use Cases:
- Salary benchmarking
- Performance metrics
- SLA monitoring
-- Calculate percentiles
SELECT
PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY salary) AS p25,
PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY salary) AS median,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY salary) AS p75,
PERCENTILE_CONT(0.90) WITHIN GROUP (ORDER BY salary) AS p90,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY salary) AS p95
FROM employees;
-- Percentile by group
SELECT
department,
PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY salary) AS median_salary,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY salary) AS p75_salary
FROM employees
GROUP BY department;
-- Assign percentile rank to each row
SELECT
employee_id,
salary,
PERCENT_RANK() OVER (ORDER BY salary) AS percentile_rank,
NTILE(4) OVER (ORDER BY salary) AS quartile
FROM employees;
-- Interquartile Range (IQR) for outlier detection
WITH quartiles AS (
SELECT
PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY salary) AS q1,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY salary) AS q3
FROM employees
)
SELECT
e.*,
CASE
WHEN e.salary < q.q1 - 1.5 * (q.q3 - q.q1) THEN 'Low Outlier'
WHEN e.salary > q.q3 + 1.5 * (q.q3 - q.q1) THEN 'High Outlier'
ELSE 'Normal'
END AS outlier_status
FROM employees e
CROSS JOIN quartiles q;Rarity: Common Difficulty: Medium
10. What is time series analysis and how do you handle seasonality?
Answer: Time series analysis examines data points collected over time to identify patterns.
- Components:
- Trend: Long-term direction
- Seasonality: Regular patterns (daily, weekly, yearly)
- Cyclical: Irregular fluctuations
- Random: Noise
- Handling Seasonality:
- Moving averages
- Year-over-year comparison
- Seasonal decomposition
- Seasonal adjustment
-- Moving average (smooth out seasonality)
SELECT
date,
sales,
AVG(sales) OVER (
ORDER BY date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS moving_avg_7day
FROM daily_sales;
-- Year-over-year comparison
SELECT
EXTRACT(MONTH FROM sale_date) AS month,
EXTRACT(YEAR FROM sale_date) AS year,
SUM(amount) AS monthly_sales,
LAG(SUM(amount), 12) OVER (ORDER BY sale_date) AS same_month_last_year,
(SUM(amount) - LAG(SUM(amount), 12) OVER (ORDER BY sale_date)) /
LAG(SUM(amount), 12) OVER (ORDER BY sale_date) * 100 AS yoy_growth
FROM sales
GROUP BY EXTRACT(MONTH FROM sale_date), EXTRACT(YEAR FROM sale_date);
-- Seasonal index calculation
WITH monthly_avg AS (
SELECT
EXTRACT(MONTH FROM date) AS month,
AVG(sales) AS avg_sales
FROM daily_sales
GROUP BY EXTRACT(MONTH FROM date)
),
overall_avg AS (
SELECT AVG(sales) AS overall_avg
FROM daily_sales
)
SELECT
m.month,
m.avg_sales,
o.overall_avg,
m.avg_sales / o.overall_avg AS seasonal_index
FROM monthly_avg m
CROSS JOIN overall_avg o
ORDER BY m.month;Rarity: Medium Difficulty: Hard
Data Modeling & ETL (4 Questions)
11. Explain star schema vs snowflake schema.
Answer: Both are data warehouse design patterns.
- Star Schema:
- Fact table surrounded by denormalized dimension tables
- Simple queries (fewer joins)
- Faster query performance
- More storage (redundant data)
- Snowflake Schema:
- Normalized dimension tables
- Less storage (no redundancy)
- More complex queries (more joins)
- Slower query performance
Rarity: Common Difficulty: Medium
12. What is ETL and how do you design an ETL pipeline?
Answer: ETL (Extract, Transform, Load) moves data from sources to destination.
- Extract: Pull data from sources (databases, APIs, files)
- Transform: Clean, validate, aggregate, enrich
- Load: Insert into target (data warehouse, database)
- Design Considerations:
- Incremental vs Full Load
- Error handling and logging
- Data validation
- Performance optimization
- Scheduling and orchestration
-- Incremental load example
-- Extract: Get new/updated records
CREATE TEMP TABLE staging_customers AS
SELECT *
FROM source_customers
WHERE updated_at > (
SELECT MAX(last_updated)
FROM target_customers
);
-- Transform: Clean and standardize
UPDATE staging_customers
SET
email = LOWER(TRIM(email)),
phone = REGEXP_REPLACE(phone, '[^0-9]', '', 'g'),
country = UPPER(country);
-- Load: Upsert into target
INSERT INTO target_customers
SELECT * FROM staging_customers
ON CONFLICT (customer_id)
DO UPDATE SET
email = EXCLUDED.email,
phone = EXCLUDED.phone,
updated_at = EXCLUDED.updated_at;
-- Log the ETL run
INSERT INTO etl_log (table_name, records_processed, run_date)
VALUES ('customers', (SELECT COUNT(*) FROM staging_customers), CURRENT_TIMESTAMP);Rarity: Very Common Difficulty: Hard
13. How do you ensure data quality?
Answer: Data quality ensures data is accurate, complete, and reliable.
- Dimensions:
- Accuracy: Correct values
- Completeness: No missing data
- Consistency: Same across systems
- Timeliness: Up-to-date
- Validity: Conforms to rules
- Techniques:
- Data validation rules
- Automated tests
- Data profiling
- Anomaly detection
- Regular audits
-- Data quality checks
-- 1. Check for NULLs in required fields
SELECT COUNT(*) AS null_emails
FROM customers
WHERE email IS NULL;
-- 2. Check for duplicates
SELECT email, COUNT(*) AS duplicate_count
FROM customers
GROUP BY email
HAVING COUNT(*) > 1;
-- 3. Check for invalid formats
SELECT COUNT(*) AS invalid_emails
FROM customers
WHERE email NOT LIKE '%@%.%';
-- 4. Check referential integrity
SELECT COUNT(*) AS orphaned_orders
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
WHERE c.customer_id IS NULL;
-- 5. Check for outliers
SELECT COUNT(*) AS outlier_count
FROM orders
WHERE amount < 0 OR amount > 100000;
-- 6. Check data freshness
SELECT
MAX(updated_at) AS last_update,
EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - MAX(updated_at))) / 3600 AS hours_since_update
FROM customers;
-- Create data quality dashboard
CREATE VIEW data_quality_metrics AS
SELECT
'customers' AS table_name,
COUNT(*) AS total_records,
SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) AS null_emails,
SUM(CASE WHEN email NOT LIKE '%@%.%' THEN 1 ELSE 0 END) AS invalid_emails,
MAX(updated_at) AS last_updated
FROM customers;Rarity: Very Common Difficulty: Medium
14. What is data normalization and when would you denormalize?
Answer:
- Normalization: Organizing data to reduce redundancy
- 1NF, 2NF, 3NF, BCNF
- Benefits: Data integrity, less storage
- Drawback: More joins, slower queries
- Denormalization: Intentionally adding redundancy
- Benefits: Faster queries, simpler SQL
- Drawbacks: More storage, update anomalies
- Use for: Data warehouses, reporting, read-heavy systems
-- Normalized (3NF)
-- Orders table
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
quantity INT
);
-- Requires joins for reporting
SELECT
c.customer_name,
p.product_name,
o.quantity
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN products p ON o.product_id = p.product_id;
-- Denormalized (for reporting)
CREATE TABLE orders_denormalized (
order_id INT PRIMARY KEY,
customer_id INT,
customer_name VARCHAR(100), -- Denormalized
customer_email VARCHAR(100), -- Denormalized
product_id INT,
product_name VARCHAR(100), -- Denormalized
product_category VARCHAR(50), -- Denormalized
quantity INT,
unit_price DECIMAL(10,2) -- Denormalized
);
-- Simpler, faster query
SELECT customer_name, product_name, quantity
FROM orders_denormalized;Rarity: Common Difficulty: Medium
Dashboard & Visualization (3 Questions)
15. How do you design an effective dashboard?
Answer: Effective dashboards provide actionable insights at a glance.
- Principles:
- Know your audience: Executives vs analysts
- Focus on KPIs: Most important metrics first
- Use appropriate visualizations: Right chart for data type
- Maintain consistency: Colors, fonts, layout
- Enable interactivity: Filters, drill-downs
- Optimize performance: Pre-aggregate data
- Tell a story: Logical flow
- Layout:
- Top: Key metrics/KPIs
- Middle: Trends and comparisons
- Bottom: Details and breakdowns
Rarity: Very Common Difficulty: Medium
16. How do you optimize dashboard performance?
Answer: Slow dashboards frustrate users and reduce adoption.
- Optimization Techniques:
- Data aggregation: Pre-calculate metrics
- Materialized views: Store query results
- Incremental refresh: Update only new data
- Limit data: Use filters, date ranges
- Optimize queries: Indexes, efficient SQL
- Extract data: Move to faster data source
- Reduce visualizations: Fewer charts per dashboard
- Use extracts: Tableau/Power BI extracts
-- Create materialized view for dashboard
CREATE MATERIALIZED VIEW daily_sales_summary AS
SELECT
DATE_TRUNC('day', order_date) AS date,
product_category,
region,
COUNT(*) AS order_count,
SUM(amount) AS total_revenue,
AVG(amount) AS avg_order_value
FROM orders
GROUP BY DATE_TRUNC('day', order_date), product_category, region;
-- Create index for faster filtering
CREATE INDEX idx_daily_sales_date ON daily_sales_summary(date);
-- Refresh materialized view (scheduled job)
REFRESH MATERIALIZED VIEW CONCURRENTLY daily_sales_summary;
-- Dashboard query (fast, uses pre-aggregated data)
SELECT * FROM daily_sales_summary
WHERE date >= CURRENT_DATE - INTERVAL '30 days'
AND region = 'North America';Rarity: Common Difficulty: Medium
17. What metrics would you track for different business functions?
Answer: Different departments need different metrics.
- Sales:
- Revenue, conversion rate, average deal size
- Sales cycle length, win rate
- Customer acquisition cost (CAC)
- Marketing:
- ROI, cost per lead, lead conversion rate
- Website traffic, engagement rate
- Customer lifetime value (CLV)
- Operations:
- Order fulfillment time, error rate
- Inventory turnover, capacity utilization
- On-time delivery rate
- Finance:
- Profit margin, cash flow, burn rate
- Revenue growth, EBITDA
- Accounts receivable aging
- Customer Success:
- Customer satisfaction (CSAT), Net Promoter Score (NPS)
- Churn rate, retention rate
- Support ticket resolution time
Rarity: Common Difficulty: Easy
Business Strategy & Communication (3 Questions)
18. How do you prioritize analytics projects?
Answer: Prioritization ensures maximum business impact.
- Framework:
- Impact: Potential business value
- Effort: Time and resources required
- Urgency: Time sensitivity
- Stakeholder alignment: Executive support
- Prioritization Matrix:
- High Impact, Low Effort: Do first
- High Impact, High Effort: Plan carefully
- Low Impact, Low Effort: Quick wins
- Low Impact, High Effort: Avoid
- Questions to Ask:
- What business problem does this solve?
- What's the expected ROI?
- Who are the stakeholders?
- What data is available?
- What are the dependencies?
Rarity: Common Difficulty: Medium
19. How do you handle conflicting stakeholder requirements?
Answer: Managing stakeholders is crucial for senior analysts.
- Approach:
- Understand needs: Ask clarifying questions
- Find common ground: Shared objectives
- Prioritize: Based on business impact
- Communicate tradeoffs: Explain constraints
- Propose alternatives: Win-win solutions
- Escalate if needed: Get executive alignment
- Document decisions: Clear record
- Example:
- Marketing wants real-time dashboard
- IT says real-time is too expensive
- Solution: Near real-time (15-min refresh) balances needs and cost
Rarity: Common Difficulty: Medium
20. How do you measure the success of your analytics work?
Answer: Demonstrating value is essential for career growth.
- Metrics:
- Business Impact:
- Revenue increase
- Cost reduction
- Efficiency improvement
- Better decision making
- Adoption:
- Dashboard usage
- Report distribution
- Stakeholder feedback
- Quality:
- Data accuracy
- Timeliness
- Actionability of insights
- Business Impact:
- Documentation:
- Track projects and outcomes
- Quantify impact when possible
- Collect testimonials
- Present case studies
Rarity: Medium Difficulty: Medium




