Business Intelligence Exercises: 30 Hands-On Projects (Beginner → Advanced)

BI exercises dashboard
Spread the love
TL;DR: Use these business intelligence exercises to practice real analyst tasks with datasets, solution snippets (SQL/DAX), and shippable portfolio artifacts. Most take 30–90 minutes; capstones 2–3 hours.

 

Table of Contents

What counts as a BI exercise?

A great BI exercise mirrors a real stakeholder ask: a concrete question, a messy dataset, and a shippable output (metric, chart, or dashboard) with a short takeaway. Each exercise below gives you an objective, steps, and an artifact you can publish.

How to use this guide

  • Tools: Power BI or Tableau for dashboards; any SQL (PostgreSQL/MySQL); Excel/Sheets for validation; Python/R optional.
  • Datasets: Use public data (retail orders, taxi trips, flight delays, inspections). Swap in your industry data when applicable.
  • Delivery: Save a screenshot (or PDF) and a 3–5 sentence “Analyst Note” describing assumptions, insights, and next steps.

30 Business Intelligence Exercises

Beginner (1–10): Data basics, KPIs, and clear visuals

1) Data profiling & quality report

Level: Beginner • Time: 30–45m • Tools: Power Query / Tableau Prep • Dataset: Retail orders

Objective: Produce a profile (types, nulls, outliers) and list 3 fixes.

  1. Import CSV; inspect types, duplicates, and missing values.
  2. Summarize completeness & distinct counts per column.
  3. Fix types and obvious errors; document decisions.

Artifact: before/after screenshot + 1-page quality summary.

2) Clean & standardize dimensions

Level: Beginner • Time: 30–40m • Tools: Power Query • Dataset: Products & categories

Objective: Normalize category names and product IDs; export a clean DimProduct table.

3) Basic sales KPIs (Revenue, Orders, AOV)

Level: Beginner • Time: 30–45m • Tools: Power BI / Tableau • Dataset: Retail sales

-- Power BI (DAX)
Total Sales = SUM('Sales'[Amount])
Orders = DISTINCTCOUNT('Sales'[OrderID])
AOV = DIVIDE([Total Sales], [Orders])

Artifact: KPI card trio + note on business impact.

4) Time intelligence: MoM/YoY with a Date table

Level: Beginner • Time: 40–60m • Tools: Power BI • Dataset: Sales + Date

Sales LY = CALCULATE([Total Sales], DATEADD('Date'[Date], -1, YEAR))
YoY % = DIVIDE([Total Sales] - [Sales LY], [Sales LY])
Rolling 3M Sales = CALCULATE([Total Sales], DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -3, MONTH))

Artifact: line chart with YoY % + commentary.

5) KPI dashboard (executive one-pager)

Level: Beginner • Time: 60–90m • Tools: Power BI/Tableau • Dataset: Sales & customers

Objective: Print-friendly A4/Letter view with 5 KPIs + sparklines.

6) Dimensional modeling: star schema sketch

Level: Beginner • Time: 40–60m • Tools: Whiteboard + BI model • Dataset: Sales & lookups

Output: FactSales → DimDate/DimProduct/DimCustomer/DimStore with surrogate keys.

7) Visual best practices (declutter & annotate)

Level: Beginner • Time: 30–45m • Tools: Any BI tool • Dataset: Any

Objective: Rebuild a cluttered chart into a clear, annotated alternative.

8) Data joins: INNER vs LEFT

Level: Beginner • Time: 30–40m • Tools: SQL • Dataset: Orders + customers

-- Customers with at least one order
SELECT c.customer_id, c.name, COUNT(*) AS orders
FROM customers c
JOIN orders o ON o.customer_id = c.customer_id
GROUP BY 1,2;

9) Drill-through journey

Level: Beginner • Time: 30–45m • Tools: Power BI/Tableau • Dataset: Sales

Objective: Region → store → product drill-through with persistent filters.

10) Cohort split (new vs returning)

Level: Beginner • Time: 30–45m • Tools: SQL/BI • Dataset: Orders

-- Mark a customer's first purchase date, then bucket orders
WITH firsts AS (
  SELECT customer_id, MIN(order_date) AS first_date
  FROM orders GROUP BY 1
)
SELECT o.*, CASE WHEN o.order_date = f.first_date THEN 'New' ELSE 'Returning' END AS cohort
FROM orders o JOIN firsts f USING (customer_id);

Intermediate (11–22): Modeling, SQL windows, and alerting

11) Window functions: rank contributors

Level: Intermediate • Time: 40–60m • Tools: SQL • Dataset: Sales

SELECT product_id, SUM(amount) AS revenue,
       RANK() OVER (ORDER BY SUM(amount) DESC) AS rev_rank
FROM sales GROUP BY 1;

12) Retention with LAG()

Level: Intermediate • Time: 45–60m • Tools: SQL • Dataset: Monthly activity

WITH m AS (
  SELECT customer_id, DATE_TRUNC('month', activity_date) AS mth
  FROM events GROUP BY 1,2
),
r AS (
  SELECT customer_id, mth,
         LAG(mth) OVER (PARTITION BY customer_id ORDER BY mth) AS prev_mth
  FROM m
)
SELECT mth, COUNT(*) FILTER (WHERE prev_mth IS NOT NULL) AS returning,
       COUNT(*) AS active
FROM r GROUP BY 1 ORDER BY 1;

13) Row-Level Security (territories)

Level: Intermediate • Time: 45–60m • Tools: Power BI • Dataset: Sales + user-region map

-- RLS filter expression on DimRegion
[Region] IN
CALCULATETABLE(
  VALUES(RegionUsers[Region]),
  RegionUsers[UserEmail] = USERPRINCIPALNAME()
)

14) SCD Type 2 (product categories over time)

Level: Intermediate • Time: 60–90m • Tools: SQL/ETL • Dataset: Products

Objective: Maintain start/end dates and a current flag; join to fact by transaction date.

15) Pareto 80/20 analysis

Level: Intermediate • Time: 40–60m • Tools: DAX or SQL • Dataset: Sales

WITH p AS (
  SELECT product_id, SUM(amount) AS revenue
  FROM sales GROUP BY 1
),
r AS (
  SELECT product_id, revenue,
         revenue / SUM(revenue) OVER () AS pct,
         SUM(revenue) OVER (ORDER BY revenue DESC
                            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) /
         SUM(revenue) OVER () AS cum_pct
  FROM p
)
SELECT * FROM r;

16) Anomaly detection (z-score)

Level: Intermediate • Time: 45–60m • Tools: SQL/BI • Dataset: Daily sales

WITH s AS (
  SELECT d, SUM(amount) AS rev FROM sales GROUP BY d
),
z AS (
  SELECT d, rev,
         (rev - AVG(rev) OVER()) / NULLIF(STDDEV_POP(rev) OVER(),0) AS z
  FROM s
)
SELECT * FROM z WHERE ABS(z) > 3;

17) Forecast with ETS (baseline)

Level: Intermediate • Time: 45–60m • Tools: BI or Excel • Dataset: Monthly revenue

Output: Baseline forecast + error bands; list assumptions & limitations.

18) Marketing funnel dashboard

Level: Intermediate • Time: 60–90m • Tools: BI • Dataset: Sessions → leads → opps → wins

Metrics: conversion %, CPA, ROAS; annotate bottlenecks.

19) Inventory turns & reorder alerts

Level: Intermediate • Time: 45–60m • Tools: BI • Dataset: Stock & sales

Measure idea (DAX): Reorder Flag = IF([Days of Stock] <= [Lead Time Days], 1, 0)

20) Geographic benchmarking

Level: Intermediate • Time: 45–60m • Tools: BI + map • Dataset: Stores & regions

Objective: Heat map + table of under/over-performers vs national median.

21) What-if simulator (pricing)

Level: Intermediate • Time: 45–60m • Tools: BI • Dataset: Price/volume curve

Output: slider-driven price → margin → revenue chart; snapshot decision.

22) Data dictionary & lineage

Level: Intermediate • Time: 30–45m • Tools: Docs/BI • Dataset: Your model

Objective: Publish a mini catalog: tables, fields, sources, refresh cadence.

Advanced (23–30): End-to-end projects & ML-flavored insights

23) Churn early-warning dashboard

Level: Advanced • Time: 90–120m • Tools: SQL + BI • Dataset: Subscription events

Objective: Flag risky accounts by drop in usage vs baseline; show save actions.

24) Customer segmentation (K-means)

Level: Advanced • Time: 90–120m • Tools: Python/R + BI • Dataset: RFM features

Output: labeled segments + segment-specific actions and value.

25) Anomaly triage center

Level: Advanced • Time: 60–90m • Tools: SQL/BI • Dataset: Revenue/events

Objective: One page listing outliers with context; drill to source tables.

26) End-to-end sales pipeline (capstone)

Level: Advanced • Time: 120–180m • Tools: SQL + BI • Dataset: CRM & revenue

  1. Model tables (Leads → Opps → Wins); define stages & conversion logic.
  2. KPIs: win rate, cycle length, stage drop-off.
  3. Dashboard with filters (rep, region, segment); add decision notes.

27) Forecast vs actual with variance trees

Level: Advanced • Time: 90–120m • Tools: BI • Dataset: Plan & actuals

28) SLA/operations reliability

Level: Advanced • Time: 60–90m • Tools: SQL/BI • Dataset: Ticket/ops logs

29) Executive story deck

Level: Advanced • Time: 60–90m • Tools: BI + Slides • Dataset: Your best 3 exercises

Output: 6–8 slides: problem → evidence → decision; no raw charts without captions.

30) Personal data product (public)

Level: Advanced • Time: 90–180m • Tools: BI + lightweight DB • Dataset: Curated mash-up

Objective: Publish a public interactive dashboard or video walkthrough showcasing your strongest skills.

Pro tip: Every exercise gets a filename and a 3–5 sentence “Analyst Note.” That note is often what convinces a hiring manager.

Industry scenarios (swap into any exercise)

  • Retail/eCommerce: returns %, AOV, product affinity, promo lift, inventory turns.
  • Fintech/SaaS: MRR/ARR, churn risk, expansion, cohort retention, CAC payback.
  • Healthcare/Public: appointment no-shows, readmission rates, inspections/violations, wait times.

Portfolio rubric (self-assessment)

Dimension 1 3 5
Business framing Metric dump Clear KPIs Tied to decision
Data handling Unreproducible Documented steps Reusable model
Visual clarity Cluttered Readable Annotated & print-ready
Insight Descriptive Trends + variance Clear recommendation
Credibility No notes Assumptions listed Limitations + next step

30/60/90 learning plan

Days 1–30

  • Beginner (1–10): 1 per day or 5 per weekend; publish notes and screenshots.
  • Set up a clean repo/folder scheme; create a data dictionary skeleton.

Days 31–60

  • Intermediate (11–22): windows, RLS, SCD, variance, forecasting.
  • Refactor first dashboards; add tests/validations on joins & measures.

Days 61–90

  • Advanced (23–30): at least one capstone + one public demo/video.
  • Apply for roles with tailored portfolios; include your Analyst Notes.

FAQs

Which tools should I learn first?

Start with one BI tool (Power BI or Tableau) and SQL. Use Excel/Sheets for validation; add Python/R later for segmentation or automation.

How much time per exercise?

Most tasks take 30–90 minutes; capstones 2–3 hours. Ship small but complete artifacts rather than “perfect.”

How do I present exercises in a portfolio?

Create a single landing page listing each exercise with a thumbnail, a 3–5 sentence Analyst Note, and a link to the interactive report or PDF.

Next steps

Want companion files (sample CSVs and measure templates)? Offer a download bundle and link those files within each exercise. Add a clear CTA: newsletter, course, or demo—whichever matches your goals.

{
“@context”: “https://schema.org”,
“@type”: “ItemList”,
“name”: “30 Business Intelligence Exercises”,
“itemListElement”: [
{“@type”:”ListItem”,”position”:1,”name”:”Data profiling & quality report”},
{“@type”:”ListItem”,”position”:2,”name”:”Clean & standardize dimensions”},
{“@type”:”ListItem”,”position”:3,”name”:”Basic sales KPIs”},
{“@type”:”ListItem”,”position”:4,”name”:”Time intelligence: MoM/YoY”},
{“@type”:”ListItem”,”position”:5,”name”:”KPI dashboard (executive one-pager)”},
{“@type”:”ListItem”,”position”:6,”name”:”Dimensional modeling: star schema”},
{“@type”:”ListItem”,”position”:7,”name”:”Visual best practices”},
{“@type”:”ListItem”,”position”:8,”name”:”Data joins: INNER vs LEFT”},
{“@type”:”ListItem”,”position”:9,”name”:”Drill-through journey”},
{“@type”:”ListItem”,”position”:10,”name”:”Cohort split (new vs returning)”},
{“@type”:”ListItem”,”position”:11,”name”:”Window functions: rank contributors”},
{“@type”:”ListItem”,”position”:12,”name”:”Retention with LAG()”},
{“@type”:”ListItem”,”position”:13,”name”:”Row-Level Security (territories)”},
{“@type”:”ListItem”,”position”:14,”name”:”SCD Type 2 (categories over time)”},
{“@type”:”ListItem”,”position”:15,”name”:”Pareto 80/20 analysis”},
{“@type”:”ListItem”,”position”:16,”name”:”Anomaly detection (z-score)”},
{“@type”:”ListItem”,”position”:17,”name”:”Forecast with ETS (baseline)”},
{“@type”:”ListItem”,”position”:18,”name”:”Marketing funnel dashboard”},
{“@type”:”ListItem”,”position”:19,”name”:”Inventory turns & reorder alerts”},
{“@type”:”ListItem”,”position”:20,”name”:”Geographic benchmarking”},
{“@type”:”ListItem”,”position”:21,”name”:”What-if simulator (pricing)”},
{“@type”:”ListItem”,”position”:22,”name”:”Data dictionary & lineage”},
{“@type”:”ListItem”,”position”:23,”name”:”Churn early-warning dashboard”},
{“@type”:”ListItem”,”position”:24,”name”:”Customer segmentation (K-means)”},
{“@type”:”ListItem”,”position”:25,”name”:”Anomaly triage center”},
{“@type”:”ListItem”,”position”:26,”name”:”End-to-end sales pipeline (capstone)”},
{“@type”:”ListItem”,”position”:27,”name”:”Forecast vs actual with variance”},
{“@type”:”ListItem”,”position”:28,”name”:”SLA/operations reliability”},
{“@type”:”ListItem”,”position”:29,”name”:”Executive story deck”},
{“@type”:”ListItem”,”position”:30,”name”:”Personal data product (public)”}
]
}

{
“@context”:”https://schema.org”,
“@type”:”FAQPage”,
“mainEntity”:[
{“@type”:”Question”,”name”:”Which tools should I learn first?”,
“acceptedAnswer”:{“@type”:”Answer”,”text”:”Start with one BI tool (Power BI or Tableau) and SQL. Use Excel or Google Sheets for validation; add Python/R later for segmentation or automation.”}},
{“@type”:”Question”,”name”:”How much time per exercise?”,
“acceptedAnswer”:{“@type”:”Answer”,”text”:”Most tasks take 30–90 minutes; capstones 2–3 hours. Focus on shipping complete, small artifacts with a brief written takeaway.”}},
{“@type”:”Question”,”name”:”How do I present exercises in a portfolio?”,
“acceptedAnswer”:{“@type”:”Answer”,”text”:”Create a single landing page listing each exercise with a thumbnail, a 3–5 sentence Analyst Note, and a link to the interactive report or PDF.”}}
]
}

Leave a Comment

Your email address will not be published. Required fields are marked *