This project documents a long-running tradition with my friends from Esat Mahallesi, where we have been playing weekly football matches for more than 15 years. The purpose of this project was to track, organize, and analyze our games in a structured way. I wanted to capture not only the scores, but also the captains, teams, match dates, and locations in order to create a fun, competitive system that keeps everyone engaged.
Every week, the winning captain becomes the captain again for the following match. If a captain manages to win five matches in a row, they receive a special reward. At the end of the year, there are additional awards such as the loyalty prize for the player who attended the most games, and a prize for the player who finishes first in the league table. These rewards, along with the detailed statistics, make our weekly matches more exciting and motivating
1- Data Recording in Excel
I created a structured system in Excel, where each sheet records the details of a match.
For every game, I documented:
A Team and B Team player lists
The score of the match
The captains of each team
The date of the game
The field/location where the match was played
You can access the excel file from the GitHub link or image below.
2- Data Transformation with Power Query
Using Power Query, I transformed the raw sheets into structured tables.
We combined multiple sheets into a single dynamic dataset that automatically updates when a new match is added.
Custom logic was applied to identify each team’s captain (the first player listed), and we created clean tables with consistent columns for analysis.
This step ensured the data was always standardized and ready for further use in Power BI.You can access the excel file from the GitHub link or image below.
You can access the power query table from the GitHub link or images below.
3- Analysis & Visualization with Power BI
In this stage, I designed multiple dashboard sections in Power BI, each focusing on a different aspect of match and player performance. The goal was to move beyond raw statistics and build meaningful visualizations that tell a story about individual and team contributions.
This section provides a high-level snapshot of the dataset:
Attendance per Player – shows how many matches each player attended.
Unique Player Count – number of different players who participated.
Match Count – total matches played.
Earliest Match Date – when the first match was played.
Highest & Lowest Scoring Matches – dates of the matches with the most and fewest goals.
Match Location Distribution – a pie chart showing the percentage of games played at different venues.
Goal Distribution Over Time – a line chart visualizing how goals were scored historically.
This section introduces a custom points table using a non-standard scoring rule:
Win = +1 point, Draw = 0 points, Loss = -1 point.
Players were ranked based on their accumulated points.
A separate ranking highlighted players by their Unbeaten Percentage ((Wins + Draws) / Total Matches).
Another visualization ranked players by their Unbeaten Count (total matches without a loss).
Finally, I designed a “Most Losses Ranking” table, where players with the highest loss count appeared at the top, providing insight into negative trends.
This section tracks player statistics over time and provides individual career summaries:
Performance Trend Line – each player’s performance visualized chronologically.
Matches Played – total appearances for each player.
Unbeaten Percentage – percentage of matches without a defeat.
Unbeaten Count – total matches without a loss.
Points Table Score – player’s current points using the custom scoring system.
First & Last Match Dates – timeline of player participation.
Lowest-Scoring Match Date – when the player was involved in the least goal-heavy match.
Highest-Scoring Match Date – when the player participated in the most goal-heavy match.
This section focuses exclusively on leadership impact:
Captaincy Count – number of times each player served as captain.
Captaincy Distribution Pie Chart – percentage breakdown of captaincies across all players.
Win Percentage as Captain – players ranked by their win ratio while serving as captain.
Unbeaten Percentage as Captain – highlighting which captains led their teams to the most stable results.
To power these insights, I developed several custom measures in DAX, including but not limited to:
Result Calculation (Win/Draw/Loss):
Win Count = CALCULATE(COUNTROWS('FootballData'), 'FootballData'[Result] = "Win")
Draw Count = CALCULATE(COUNTROWS('FootballData'), 'FootballData'[Result] = "Draw")
Loss Count = CALCULATE(COUNTROWS('FootballData'), 'FootballData'[Result] = "Loss")
Custom Points Table:
Points = [Win Count] * 1 + [Draw Count] * 0 + [Loss Count] * -1
Unbeaten Percentage:
Unbeaten % = DIVIDE([Win Count] + [Draw Count], [Total Matches], 0)
Captaincy Unbeaten %:
Captain Unbeaten % = DIVIDE([Captain Wins] + [Captain Draws], [Captaincy Count], 0)
Date Calculations: Used MINX, MAXX, and CALCULATE to dynamically return first/last match dates, as well as dates of highest- and lowest-scoring matches.
Through these dashboards, the analysis revealed:
Clear comparisons between players in terms of consistency, reliability, and leadership.
Unique insights such as which captains had the strongest unbeaten records, which players accumulated the most points, and who suffered the most losses.
Chronological visualizations that allowed tracking performance trends over time.
You can access the Power BI file from the GitHub logo below
Since the website includes a GitHub link, the following items were uploaded to a public repository:
You can access the full repository from the GitHub logo below.