This project is an end-to-end fitness analytics dashboard built using real-world workout data collected over multiple months.
The goal of this project was to analyze training consistency, muscle group performance, and strength progression using proper data modeling and business intelligence practices.
Unlike guided tutorial projects, this dashboard was designed and implemented entirely from scratch — from raw data collection to final visualization.
Tracking workouts manually provides limited insight into:
- Training consistency over time
- Muscle group balance
- Exercise-wise workload
- Strength progression
This project aims to answer key questions:
- How consistent is the training routine?
- How many days were skipped?
- Which muscle groups receive the most focus?
- How does strength progress over time for specific exercises?
- Python (Pandas) – Used for data cleaning, normalization, feature creation, and preparing fact & dimension tables for analysis.
- MySQL – Served as the analytical database to store the star schema and perform exploratory data analysis using SQL.
- Power BI – Used to build interactive, multi-page dashboards with drill-downs, slicers, and navigation for storytelling.
- DAX – Implemented custom measures for sessions, adherence %, volume calculations, and strength estimation (Epley 1RM).
- SQL – Used to query, validate, and analyze workout data across fact and dimension tables.
- Data Modeling (Star Schema) – Designed a scalable fact–dimension model to enable efficient filtering, aggregation, and analytics.
- Source: Personal workout log
- Time Period: July 2023 – May 2024
- Size: 4,000+ rows
- Granularity: One row per exercise set
- Date
- Exercise
- Muscle Group
- Weight
- Reps
- Distance / Time (where applicable)
A star schema was designed to support efficient analysis and scalability.
f_workouts- One row per exercise set
- Measures: reps, weight, volume
d_calendar– Date intelligence with custom date keyd_exercise– Canonical exercise namesd_muscle_part– Muscle parts (e.g., Lats, Upper Back)d_muscle_group– High-level muscle groups (Chest, Back, Legs, etc.)
This structure allows flexible slicing by:
- Time
- Muscle group
- Muscle part
- Exercise
- Cleaned and standardized raw workout data
- Created surrogate keys for dimensions
- Normalized data into fact and dimension tables
- Loaded all dimension and fact tables
- Performed exploratory data analysis (EDA)
- Answered analytical questions around volume, frequency, and consistency
Some of the core analytical concepts implemented:
- Workout Sessions: Distinct workout days
- Adherence %: Workout days vs planned days (excluding Sundays)
- Total Volume: Weight × Reps
- Strength Estimation: Epley 1RM formula
- Exercise Distribution: Sets and volume by exercise and muscle group
(Custom SQL and DAX logic intentionally not shared publicly.)
The dashboard consists of two interactive pages:
- Planned workout days
- Total workouts completed
- Days skipped
- Adherence percentage
- Muscle group navigation using visual selectors
- Total sessions
- Total training volume
- Estimated 1RM (Epley)
- Volume distribution by muscle part
- Sets by exercise
- Progression trends over time
All visuals are fully interactive and filter-driven.
- Designing scalable data models matters more than visuals alone
- Clean dimensions simplify complex analysis
- DAX measures should reflect business logic, not just calculations
- Good dashboards tell a story, not just show charts
- Add true workout session identifiers
- Include bodyweight and cardio metrics
- Automate data ingestion
- Deploy as a web-based fitness analytics app
This project was built as part of my journey into Data Analytics, focusing on real-world problem solving and end-to-end ownership of data projects.
Feedback and suggestions are always welcome.

