The kickoff session for a student building a portfolio of end-to-end sports-business-operations analytics projects for internship interviews. It introduces the five-tool stack - SQL, Python, Power BI, Excel, and GitHub - giving the honest pros and cons of each, showing where each one fits in a project, and explaining how they hand off to one another to form a single pipeline that extracts, analyzes, presents, and publishes. Across 31 slides there are five tool sections, each with a strengths-and-limits breakdown and a tool-choice trap, two runnable examples (a ticket-revenue SQL query and an attendance EDA in pandas), an SVG pipeline diagram, the end-to-end recipe, a full worked sports project carried through all five tools, and two checks. No prior knowledge is assumed.
Subject: Business Analytics · 59 slides · applied lesson
Open the interactive version of this deck · Homework for this lesson
Title
First Session · Sports Business Analytics
SQL, Python, Power BI, Excel, and GitHub — what each one is for, where each falls short, and how they snap together into portfolio projects that get you the internship.
Objectives
This is a map session, not a deep dive. We're laying out the whole toolkit so every future session has a place to hang. By the end you can:
Warm-up
Discussion prompt
Before we open The Data Analyst's Toolkit — First Session (Sports Business): without looking back, what was the main idea of Decision Analysis — Oceanview Property Purchase, and what could you do by the end of it that you could not do before?
Hint: One sentence for the idea, one for the skill. If the second one is blank, that is the part to revisit.
Answer:
Master's-level walkthrough of the Oceanview Development property-purchase case (Camm et al., 4th ed., p. Builds the decision tree, folds it back to the no-research decision (bid; EV = $50,000), revises the referendum odds with Bayes' theorem from the survey's reliability, derives the conditional bid/don't-bid strategy (EV $229,268 if approval predicted, −$74,576 if rejection), and values the $15,000 study with EVSI = $44,000 against EVPI = $70,000 (efficiency 62.9%).
Section
Part 1
Concept
The goal isn't "learn five tools." It's 2–3 end-to-end projects you can show in an interview. An interviewer doesn't want a chart — they want to watch you take a messy business question and turn it into a decision.
end-to-end project — One project that spans the whole arc: a real question → the data pulled to answer it → the analysis → a presentation a non-technical boss understands → published proof anyone can review.
Concept
Each tool owns one stage. They're not competitors — they're a relay team. Here's the whole map on one slide:
| Tool | Stage | Its one job |
|---|---|---|
| SQL | Extract | Pull the exact rows you need from the database |
| Python | Analyze | Clean, explore, and forecast |
| Power BI | Present | Interactive dashboards for stakeholders |
| Excel | Present / model | Fast dashboards & models everyone can open |
| GitHub | Publish | Host the code + write-up interviewers click |
Comparison
Comparison matrix
From One question, five tools: refill the Stage column from what you know. The rest of the table is as it appeared.
| Tool | Stage | Its one job |
|---|---|---|
| SQL | Extract | Pull the exact rows you need from the database |
| Python | Analyze | Clean, explore, and forecast |
| Power BI | Present | Interactive dashboards for stakeholders |
| Excel | Present / model | Fast dashboards & models everyone can open |
| GitHub | Publish | Host the code + write-up interviewers click |
Intuition
Picture a 4×100 relay. No single runner wins it. Each runs one leg, then hands off the baton — and the baton here is your data.
SQL runs the first leg and hands a clean table to Python. Python runs its leg and hands a result to Power BI or Excel. They hand the finished story to GitHub, where the world sees the race.
Drop the baton at any handoff — a broken export, a messy column, a project that only lives on your laptop — and the whole run doesn't count. The handoffs are the skill.
Counterexample
Discussion prompt
Picture a 4×100 relay. No single runner wins it. Each runs one leg, then hands off the baton — and the baton here is your data.
That is stated as though it always holds. Do one of two things: produce a case where it fails, or say precisely what rules such a case out. "It just does" is not on the menu.
Hint: Hunt at the extremes first — zero, one, negative, empty, equal. If every extreme survives, the reason they survive is the proof.
Answer:
SQL runs the first leg and hands a clean table to Python. Python runs its leg and hands a result to Power BI or Excel. They hand the finished story to GitHub, where the world sees the race.
Section
Part 2 · Extract
Concept
SQL is how you talk to a database. You describe the rows you want — filtered, joined, and summed — and it hands them back. It is the front door to almost every real dataset in a sports org: ticketing, CRM, concessions, sponsorship.
query — A single statement that says which columns, from which tables, filtered how, grouped how, ordered how. One query is a repeatable, shareable definition of "the data."
Definition probe
Sort into buckets
Every line below is part of the definition of end-to-end project or of query — one or the other, never both. Put each where it belongs.
Concept
✅ Great at:
⚠️ Where it stops:
WHERE/GROUP BY and you'll drag home millions of rows you don't need.Ranking
Put in order
Put the moves of SQL in action: revenue per game by channel into the order they have to happen.
Why: These are the moves of the worked example in the order it makes them, and each one is set up by the one before it. Point at the right table and keep only last season's rows — before doing any math.
Worked example
Question: last season, which sales channel drove the most ticket revenue per game?
SELECT
channel,
COUNT(DISTINCT game_id) AS games,
SUM(tickets_sold) AS tickets,
ROUND(SUM(revenue) / COUNT(DISTINCT game_id)) AS rev_per_game
FROM ticket_sales
WHERE season = 2024
GROUP BY channel
ORDER BY rev_per_game DESC;FROM ticket_sales WHERE season = 2024
Why: Point at the right table and keep only last season's rows — before doing any math. Filtering first means the database scans far less data.
GROUP BY channel
Why: Collapse thousands of individual sales into one row per channel (Box Office, Web, Resale, Group Sales), so each aggregate is computed within a channel.
SELECT the aggregates, then ORDER BY rev_per_game DESC
Why: Sum revenue and divide by distinct games to get a fair per-game figure, then sort so the top channel is the first row you read.
| channel | games | rev_per_game |
|---|---|---|
| Group Sales | 41 | $182,400 |
| Box Office | 41 | $164,900 |
| Web | 41 | $151,250 |
| Resale | 41 | $38,600 |
Comparison
Comparison matrix
From SQL in action: revenue per game by channel: refill the rev_per_game column from what you know. The rest of the table is as it appeared.
| channel | games | rev_per_game |
|---|---|---|
| Group Sales | 41 | $182,400 |
| Box Office | 41 | $164,900 |
| Web | 41 | $151,250 |
| Resale | 41 | $38,600 |
Anomaly
Predict first
A student writes this, and it looks reasonable:
Pull everything and figure it out later.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: Excel caps near a million rows and chokes long before that; you've moved the database's own job onto a tool that can't do it.
Let SQL do what it's built for; export only the answer.
Why: Excel caps near a million rows and chokes long before that; you've moved the database's own job onto a tool that can't do it.
Trap
Pull everything and figure it out later.
SELECT * FROM ticket_sales;
-- 9.4 million rows -> Excel/Python
-- then filter, group, and total by handDrag 9.4M raw rows out, then group them in Excel
Why: Excel caps near a million rows and chokes long before that; you've moved the database's own job onto a tool that can't do it.
Let SQL do what it's built for; export only the answer.
SELECT channel, ROUND(SUM(revenue)) AS rev
FROM ticket_sales
WHERE season = 2024
GROUP BY channel;
-- 4 rows outAggregate at the source, pull 4 tidy rows
Why: Move the computation to the data. What leaves the database is small, clean, and ready for the next tool in the relay.
Error analysis
Annotate
Walk the callouts on Trap: doing the crunching in the wrong place. Each one is a place this is easy to get subtly wrong.
Section
Part 3 · Analyze
Concept
Python (with pandas) is your workshop for the messy middle: clean the SQL pull, slice it every which way to find what's true, and — when the question calls for it — build a simple forecast.
EDA (exploratory data analysis) — Poking the data to see what's there before you commit to an answer: distributions, group averages, outliers, trends. This is where most real insight is found.
Concept
✅ Great at:
pandas, matplotlib, scikit-learn) — one language for the whole analytic middle.⚠️ Where it stops:
Ranking
Put in order
Put the moves of Python in action: attendance by day of week into the order they have to happen.
Why: These are the moves of the worked example in the order it makes them, and each one is set up by the one before it. The relay handoff: Python starts from the small, clean table SQL exported — not from the raw database.
Worked example
Question: which game days pull the biggest crowds — so operations can staff and price accordingly?
import pandas as pd
games = pd.read_csv("games_2024.csv")
by_day = (games
.groupby("weekday")["attendance"]
.mean()
.sort_values(ascending=False))
print(by_day.round(0))read_csv(...) the tidy pull from SQL
Why: The relay handoff: Python starts from the small, clean table SQL exported — not from the raw database.
groupby("weekday")["attendance"].mean()
Why: Split the season by day of week, then average attendance within each — the split-apply-combine move that is the heart of pandas EDA.
sort_values(ascending=False) and print
Why: Rank the days so the pattern reads instantly: the answer, not just the numbers.
| weekday | avg attendance |
|---|---|
| Saturday | 18,240 |
| Friday | 16,980 |
| Sunday | 15,110 |
| Wednesday | 11,430 |
Comparison
Comparison matrix
From Python in action: attendance by day of week: refill the avg attendance column from what you know. The rest of the table is as it appeared.
| weekday | avg attendance |
|---|---|
| Saturday | 18,240 |
| Friday | 16,980 |
| Sunday | 15,110 |
| Wednesday | 11,430 |
Anomaly
Predict first
A student writes this, and it looks reasonable:
Do everything in Python, including the final report.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: You spend the afternoon fighting fonts and legends to rebuild what Power BI does in three clicks — and the VP still can't filter it themselves.
Use each tool for its leg of the relay.
Why: You spend the afternoon fighting fonts and legends to rebuild what Power BI does in three clicks — and the VP still can't filter it themselves.
Trap
Do everything in Python, including the final report.
Write 60 lines of matplotlib to hand-style the executive bar chart
Why: You spend the afternoon fighting fonts and legends to rebuild what Power BI does in three clicks — and the VP still can't filter it themselves.
Use each tool for its leg of the relay.
Explore & forecast in Python; export the clean result to Power BI/Excel
Why: Python finds the truth; the presentation tool makes it interactive and boardroom-ready. Right tool, right stage.
Section
Part 4 · Present
Concept
Power BI turns a finished dataset into an interactive dashboard: charts, KPI cards, and slicers a non-technical stakeholder clicks to explore themselves. It's the deliverable a front-office exec actually remembers.
✅ Great at: live filtering (by team, month, channel), auto-refreshing from a source, and a professional look with almost no design work.
⚠️ Where it stops: it's a display layer, not an analysis engine — it shows what you already found. Full features are Windows-first, and it won't fix bad inputs.
Intuition
Your SQL and Python are the engine under the hood. Nobody in the front office ever sees the engine. They see the dashboard — that's your whole analysis, wearing a suit.
So the dashboard has one job: let a busy decision-maker reach your finding in ten seconds, then poke it ("what about weekend games? just the rivals?") and trust what comes back.
Counterexample
Discussion prompt
Your SQL and Python are the engine under the hood. Nobody in the front office ever sees the engine. They see the dashboard — that's your whole analysis, wearing a suit.
That is stated as though it always holds. Do one of two things: produce a case where it fails, or say precisely what rules such a case out. "It just does" is not on the menu.
Hint: Hunt at the extremes first — zero, one, negative, empty, equal. If every extreme survives, the reason they survive is the proof.
Anomaly
Predict first
A student writes this, and it looks reasonable:
Plug raw data straight into Power BI and ship the good-looking result.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: Duplicated rows and a mislabeled channel are invisible once they're a smooth line.
Verify upstream; let the dashboard show a story you already trust.
Why: Duplicated rows and a mislabeled channel are invisible once they're a smooth line. Garbage in, beautiful garbage out — and you present it with confidence.
Trap
Plug raw data straight into Power BI and ship the good-looking result.
Skip the checking because the charts look clean
Why: Duplicated rows and a mislabeled channel are invisible once they're a smooth line. Garbage in, beautiful garbage out — and you present it with confidence.
Verify upstream; let the dashboard show a story you already trust.
Clean & sanity-check in SQL/Python first, then visualize
Why: The dashboard is the last mile, not the analysis. It should only ever display numbers you've already confirmed are real.
Break the constraint
Discussion prompt
The rule this trap just fixed:
The dashboard is the last mile, not the analysis. It should only ever display numbers you've already confirmed are real.
Now break it on purpose. Build a case that violates it and follow the consequences until something visibly fails. Where does the failure first show up — and would you have noticed it if you had not been looking?
Hint: The dangerous rules are the ones whose violation still produces an answer. If yours fails loudly, try to find one that fails quietly.
Answer:
Duplicated rows and a mislabeled channel are invisible once they're a smooth line. Garbage in, beautiful garbage out — and you present it with confidence.
Section
Part 5 · Present / Model
Concept
Excel is the language every business person already speaks. For quick dashboards, a scenario model, or a table you can hand to anyone, it's the fastest tool on Earth — no install, no login.
✅ Great at: instant pivots and charts, what-if models, and universal shareability — everyone can open an .xlsx.
⚠️ Where it stops: it breaks down past ~1M rows, and hand-built workbooks are error-prone and hard to reproduce or audit.
Anomaly
Predict first
A student writes this, and it looks reasonable:
Rebuild the report by copy-pasting fresh data in each week.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: No record of what you did, one wrong paste corrupts it silently, and next month you can't explain — or reproduce — how the number was made.
Keep the transformation in SQL/Python; let Excel just present the output.
Why: No record of what you did, one wrong paste corrupts it silently, and next month you can't explain — or reproduce — how the number was made.
Trap
Rebuild the report by copy-pasting fresh data in each week.
Paste new numbers over last week's, re-drag the formulas
Why: No record of what you did, one wrong paste corrupts it silently, and next month you can't explain — or reproduce — how the number was made.
Keep the transformation in SQL/Python; let Excel just present the output.
Excel consumes a clean, regenerated export
Why: The repeatable steps live in code; Excel is the friendly last-mile view. Re-run the query, refresh the sheet — same result every time.
Section
Part 6 · Publish
Concept
GitHub hosts your code and write-up at a public link, with a full history of every change. For your goal it matters for one blunt reason: it's the portfolio interviewers actually click.
repository (repo) — A project's home on GitHub: its code, its data-handling scripts, and — most importantly — its README, the front page that explains what the project is and what you found.
✅ Great at: proving the work is yours, showing your process, and version history. ⚠️ Where it stops: it's not analysis, and a repo with no README is a locked door.
Matching
Match the pairs
Match each term to the definition this lesson gave it — not the one you would guess from the word.
Why: These are the working definitions of query, EDA (exploratory data analysis), repository (repo) as The Data Analyst's Toolkit — First Session (Sports Business) uses them. Pairing them correctly is the test of whether you could state each one with the slide switched off.
Anomaly
Predict first
A student writes this, and it looks reasonable:
Push everything — data, secrets, no explanation.
It is wrong. Say what breaks — and say it before you turn the page.
Correct: You've leaked a credential, blown the size limit, and left a reviewer staring at files with no idea what the project even is.
Publish the story, not the mess.
Why: You've leaked a credential, blown the size limit, and left a reviewer staring at files with no idea what the project even is. That's a strike, not a portfolio piece.
Trap
Push everything — data, secrets, no explanation.
Commit a 500 MB data dump, a DB password, and 12 loose files
Why: You've leaked a credential, blown the size limit, and left a reviewer staring at files with no idea what the project even is. That's a strike, not a portfolio piece.
Publish the story, not the mess.
Add a .gitignore for data & secrets; write a README (question, method, finding)
Why: A stranger lands on the page and gets it in 30 seconds. That readable repo is the link you paste into every application.
Two truths and a lie
Sort into buckets
Some of these hold up and some are the exact mistakes this lesson is built to prevent. Sort them.
Section
Part 7
Picture it
Figure (svg): A left-to-right pipeline: a Business question feeds SQL, which feeds Python, which feeds Power BI and Excel, which feeds GitHub.
Discussion prompt
Read the picture before the words. What is this showing, and what is the one thing it is built to make obvious? Commit to an answer, then read on.
Hint: Name the parts, then say what changes between them — and if nothing changes, say what is being held still.
Answer:
Here's the whole relay on one track. The data is the baton; each tool runs one leg and passes it on.
Concept
Here's the whole relay on one track. The data is the baton; each tool runs one leg and passes it on.
Figure (svg): A left-to-right pipeline: a Business question feeds SQL, which feeds Python, which feeds Power BI and Excel, which feeds GitHub.
Ranking
Put in order
These are the steps of The end-to-end recipe, scrambled. Put them back in order before the next slide shows you.
Why: This is the order the recipe itself gives. Recalling the sequence without the slide in front of you is the difference between recognising the method and being able to run it — most of what goes wrong in practice is a step done out of turn.
Pattern
Every project you build this summer follows the same six steps. Memorize the shape — the topic changes, the shape doesn't:
Edge cases
Discussion prompt
The end-to-end recipe works on the cases you have just seen. Push it to the edge: what is the most degenerate input it still handles — empty, zero, one item, everything equal — and what is the first case where it stops being true? Name the case, not just "it breaks".
Hint: Try the smallest legal input, then the largest, then the one where two things collide. Methods are specified at their edges; the middle takes care of itself.
Answer:
Every project you build this summer follows the same six steps. Memorize the shape — the topic changes, the shape doesn't:
Ranking
Put in order
Put the moves of One project, all five tools into the order they have to happen.
Why: These are the moves of the worked example in the order it makes them, and each one is set up by the one before it. The warehouse holds millions of ticket rows; SQL filters to the ~120 home games and returns one tidy row per game — the baton.
Worked example
The question the front office actually asks: do our promo nights (giveaways, theme nights) grow paid attendance — or just move fans from one game to another?
SQL — pull per-game paid attendance, promo flag, opponent, and price tier for three seasons
Why: The warehouse holds millions of ticket rows; SQL filters to the ~120 home games and returns one tidy row per game — the baton.
Python — compare promo vs. non-promo games, adjusting for opponent strength and weekend effects
Why: A raw average is misleading (promos cluster on weekends vs. weak opponents). pandas controls for that, and can forecast next season's lift.
Power BI / Excel — dashboard: attendance lift per promo type, filterable by opponent and month
Why: The VP won't read your notebook — they'll click a dashboard. This is the deliverable they remember and share.
GitHub — publish the query, the notebook, and a README stating question, method, and finding
Why: This is the link you paste into an application. It turns "I know analytics" into "here's the proof."
Five tools, one baton, one story. That is an end-to-end project — and you'll have two or three of them.
Reverse engineer
Discussion prompt
Work backwards. The example finished here:
GitHub — publish the query, the notebook, and a README stating question, method, and finding
What was it asked to do, and what must it have been given? Reconstruct the problem from its answer.
Hint: Every quantity in the result had to enter somewhere. Account for each one.
Answer:
The question the front office actually asks: do our promo nights (giveaways, theme nights) grow paid attendance — or just move fans from one game to another?
Elimination
Eliminate the wrong options
You need last season's ticket sales for the three home rivals, already summed per game, out of a 10-million-row database. Which tool is the right first stop?
3 of these 4 are wrong. Strike them one at a time, and say what rules each one out before you strike the next. The survivor is the answer.
Survives elimination: A
Why: Extraction is the first stage, and SQL owns it. Filtering to three opponents and summing per game happens on the server, so only a handful of clean rows ever leave the database — exactly what the next tool wants.
Check
Think about the stage before you answer.
Check your understanding
You need last season's ticket sales for the three home rivals, already summed per game, out of a 10-million-row database. Which tool is the right first stop?
Answer: A
Why: Extraction is the first stage, and SQL owns it. Filtering to three opponents and summing per game happens on the server, so only a handful of clean rows ever leave the database — exactly what the next tool wants.
Elimination
Eliminate the wrong options
Your cleaning steps and forecast live in a Jupyter notebook on your laptop. Which move best turns that into portfolio proof an interviewer can actually evaluate?
3 of these 4 are wrong. Strike them one at a time, and say what rules each one out before you strike the next. The survivor is the answer.
Survives elimination: A
Why: Publishing is the last stage, and GitHub owns it. A public repo with a README lets a stranger see the question, follow your method, and trust the finding on their own time — that's what "reviewable" means and it's the link you send.
Check
An interviewer says, "show me your work." What makes the project reviewable?
Check your understanding
Your cleaning steps and forecast live in a Jupyter notebook on your laptop. Which move best turns that into portfolio proof an interviewer can actually evaluate?
Answer: A
Why: Publishing is the last stage, and GitHub owns it. A public repo with a README lets a stranger see the question, follow your method, and trust the finding on their own time — that's what "reviewable" means and it's the link you send.
Connect it up
Draw it
One page, no notation unless you need it: draw how these connect — The Big Picture · SQL — Get the Data · Python — Explore & Forecast · Power BI — Show the Story · Excel — The Universal Tool · GitHub — Publish the Proof. Put an arrow wherever one of them is what makes another possible, and label the arrow with why.
Recap
You can now place every tool in the relay and say what it's for:
| Stage | Tool | The one thing it does |
|---|---|---|
| Extract | SQL | Pull the exact rows from the database |
| Analyze | Python | Clean, explore, forecast |
| Present | Power BI / Excel | Dashboards a stakeholder understands |
| Publish | GitHub | The code + write-up interviewers click |
Next session: we pick your first project's question and write the SQL that pulls its data — leg one of the relay.
Want this taught 1-on-1? Alexander tutors Business Analytics — $55/session, free consultation.