A personal, non-commercial Power BI portfolio project that turns a movie spreadsheet exercise into a reproducible analytics pipeline and semantic model. The project began with a multi-page starter Excel workbook with only ~500 movies, restructured its data into fact and dimension tables, and then expanded and enriched the dataset with the The Movie Database (TMDb) API. The current analytical sample contains 2,371 movies released from 2010 to 2025 and 7,007 credited people.
Power BI file: Download MoviesDashboard.pbix
The overview summarizes movie count, revenue, profit and ROI, with comparisons across genres, directors or actors, release months, budgets and box-office revenue. All visuals respond to the release-year filter.
The genre page compares movie volume, revenue, profit and ROI. Multi-select genre controls support comparisons across release timing, financial scale and average return.
The director page combines financial KPIs with a selected director's profile, biography and filmography. The movie table includes budget, revenue, profit, ROI and rating.
The cast page provides the same person-level experience for actors, linking a profile and biography to the movies and financial results available in the curated dataset.
Hover tooltips add a compact movie snapshot with title, tagline, overview and poster without requiring a separate report page.
block-beta
columns 7
space A["Kaggle starter<br/>Excel"] space B["Cleaned and<br/>restructured tables"] space C["Fact-dimension<br/>semantic model"] space
space space space space space space space
space F["Power BI<br/>report"] space E["TMDb person-detail<br/>enrichment"] space D["TMDb movie expansion<br/>and enrichment"] space
A --> B
B --> C
C --> D
D --> E
E --> F
classDef phase font-size:18px
class A,B,C,D,E,F phase
The project was developed in phases:
- The starter workbook was profiled and reshaped into staging, fact, dimension and bridge tables.
- TMDb became the primary source for a larger, cleaner movie sample, including movie details, credits, genres, posters and external identifiers.
- Person details were added separately so biographies, birth information and profile images could enrich the Director and Cast pages without widening the core person dimension.
- The generated CSV tables were loaded into a Power BI semantic model and used to build the interactive report.
The model separates movie performance measures from descriptive dimensions.
Bridge tables resolve the many-to-many relationships between movies and genres
and between movies and credited people. Optional person details connect to
dim_person through person_key.
Power BI loads these model tables from data/processed/:
dim_movie.csvfact_movie_performance.csvdim_genre.csvbridge_movie_genre.csvdim_person.csvdim_person_detail.csvbridge_movie_credit.csvdim_date.csv
movie_identity_map.csv is retained as an optional matching and QA reference.
The generated dataset is a curated TMDb sample covering releases from
2010-2025.
- Movies:
2,371 - Target depth:
150clean, revenue-sorted movies per year - Current exception:
2020contains121movies after cleaning - Deduplication: one movie per
tmdb_id - Minimum budget:
$1M - Required movie fields: title, release date, runtime, revenue, budget, genre, director and cast
- Enriched people:
7,007
This is a clean analytical sample rather than a complete movie catalog.
TMDb responses are cached locally, normalized into staging CSVs and transformed into stable Power BI tables. The raw workbook and API cache remain local. More detail is available in source notes and the data dictionary.
Create the environment and add a TMDb bearer token to a local .env file:
mamba env create -f environment.yml
conda activate movie-dashboardTMDB_BEARER_TOKEN=your_token_here
Run the TMDb-first pipeline:
python -m src.load_tmdb_seed
python -m src.build_model
python -m src.enrich_tmdb
python -m src.build_model
python -m src.enrich_tmdb_people
python -m src.validateThe original starter-workbook loader remains available for comparison or backfill work:
python -m src.load_seed
python -m src.build_model
python -m src.validateassets/ Power BI file, report screenshots and logo assets
data/manual/ reviewed corrections and TMDb match overrides
data/processed/ generated CSV tables for Power BI
data/raw/ local-only workbook and TMDb API cache
docs/ data dictionary and source notes
src/ ingestion, enrichment, modeling and validation code
tests/ focused pipeline tests
.env,data/raw/and the TMDb API cache are not committed.- Generated publishable CSVs are stored in
data/processed/. - The raw starter workbook is excluded because redistribution rights are unclear.
- The PBIX file is provided as a report artifact; the Python pipeline is the reproducible source for the underlying dataset.






