Data Analyst · SQL · Tableau · Power BI

Hi, I'm Victoria — welcome to my portfolio.

I'm a data analyst who turns messy, real-world data into dashboards people actually trust — across fraud, telecom, retail, and healthcare. Take a look around and see what I've been building.

Portrait of Victoria Benjamin
STATUS: OPEN TO WORK
0 Projects Built
0 Industries Covered
0K+ Rows of Data Cleaned
0 Dashboard Pages Built
0 Tools & Languages Used
FILE_01 / PROFILE

About me

Data Analyst with hands-on experience using SQL, Excel, Tableau, and Power BI to clean, analyze, and visualize real-world business data. I transform raw data into actionable business insights through interactive dashboards, business intelligence reporting, and analytical problem-solving.

"A dashboard is only as honest as the cleaning behind it."

My portfolio showcases practical experience across telecom analytics, fraud and risk analytics, sales analytics, and healthcare analytics, where I have applied data cleaning, SQL querying, dashboard development, and data visualization to solve business problems and support informed decision-making.

Quick file

Based inLagos, Nigeria
FocusData Analytics & BI
Core toolsSQL · Tableau · Power BI
BackgroundClient-facing & support roles
Available forRemote & freelance work
FILE_02 / CAPABILITIES

What I bring to a data team

Tools I use daily, and the kind of thinking I apply with them.

Tools

Excel
Power BI
SQL
Tableau
Design

Data Preparation

Data Cleaning
Data Validation
Standardization
Duplicate & Null Handling

Analysis & Delivery

Dashboard Design
Business Intelligence
KPI Design
Data Storytelling
FILE_03 / CASE STUDY

Apex Trust Bank — Fraud & Risk Intelligence

A full workflow from raw transaction data to a fraud-monitoring dashboard: SQL cleaning, KPI design, and business recommendations.

Apex Bank Fraud & Risk Intelligence Tableau dashboard, showing transaction KPIs, fraud trend over time, fraud by channel, fraud type, account type, state map, and transaction type
Final Tableau Dashboard — Fraud & Risk Intelligence Data period: Jan 2024 – Jul 2026
RoleData Analyst
ToolsExcel, MySQL, Tableau
Dataset~2,000 transactions
TimeframeJan 2024 – Jul 2026

01 The business problem

Apex Trust Bank processes thousands of transactions across mobile, internet banking, ATM, POS, USSD and branch channels. Every channel that makes banking more convenient also opens another door for fraud. Management needed a way to monitor transactions continuously and spot suspicious activity early, rather than reviewing it after the fact.

The brief wasn't just "build a dashboard." It was to turn raw, uncleaned transaction records into something reliable enough for the bank to act on.

02 Objectives

  • Clean and validate the raw banking transaction data in SQL
  • Identify fraudulent transactions and calculate core fraud KPIs
  • Analyze fraud trends over time, by channel, account type and state
  • Build an interactive Tableau dashboard for ongoing monitoring
  • Turn the findings into concrete, actionable recommendations

03 Cleaning the data in SQL

The dataset came in with the usual real-world problems: inconsistent text formatting, missing values in fields like merchant category and channel, transaction IDs that looked duplicated, and dates in mixed formats. Rather than deleting anything by default, each issue was investigated first.

SQL_Cleaning_Script.sql
-- Flag invalid ages as NULL rather than deleting the record
UPDATE apex_bank
SET customer_age = NULL
WHERE age_flag = 'invalid_age';

-- Sanity-check the cleaned range
SELECT MIN(customer_age), MAX(customer_age)
FROM apex_bank
WHERE customer_age IS NOT NULL;

-- Catch inconsistent spacing before standardizing text fields
SELECT DISTINCT customer_gender
FROM apex_bank
WHERE customer_gender != TRIM(customer_gender);
Suspected duplicate transaction IDsOn inspection, these were different transactions with matching IDs — not true duplicates, so nothing was removed.
What I didInvestigated each flagged group individually before deciding, instead of running a blanket de-dupe.
Missing values across several fieldsMerchant category, channel, currency and some customer fields had gaps.
What I didLabeled them "Unknown" or "Not Applicable" instead of deleting rows, to preserve the transaction record.
Inconsistent date formatsTransaction and account-opening dates were stored inconsistently.
What I didRebuilt clean, standardized DATE columns so trend analysis in Tableau would actually be reliable.

04 Dashboard & KPIs

KPI cards sit at the top for a five-second read on bank health, with charts arranged to guide a reviewer from "how much fraud" down to "where, how, and when."

1,986
Total transactions
₦1.25B
Total transaction value
120
Fraudulent transactions
6%
Fraud rate
37.7K
Average risk score
16%
Failure / reversal rate

05 Key insights

Card cloning and mule accounts lead fraud types — 34 and 24 cases respectively, well ahead of every other category.

Mobile App and Internet Banking are the leading channels for fraudulent transactions, pointing to where digital controls matter most.

Current accounts record the highest fraud cases, followed by domiciliary accounts.

Lagos and Abuja emerged as the highest fraud hotspots, useful for targeting regional monitoring.

Fraud incidents peaked in February and September — signal for seasonal or cyclical review windows.

Transfers and POS payments contribute the largest share of fraud cases by transaction type.

06 Recommendations

  • 01 Increase fraud monitoring on high-risk channels and transaction types, especially Mobile App and Internet Banking.
  • 02 Deploy automated alerts for transactions with unusually high risk scores.
  • 03 Run periodic reviews of states with consistently high fraud activity, starting with Lagos and Abuja.
  • 04 Improve transaction validation to bring down the 16% failure/reversal rate.
  • 05 Keep the dashboard live for continuous monitoring rather than periodic snapshots.
  • 06 Update fraud detection rules regularly as fraud patterns shift.

07 Reflection

The real lesson from this project wasn't Tableau's chart library — it was patience with the cleaning stage. Every shortcut I was tempted to take (deleting the "duplicate" IDs, dropping rows with missing values) would have quietly distorted the fraud numbers downstream. Effective analytics isn't about a dashboard that looks good; it's about giving decision-makers a number they can trust enough to act on.

SQL data cleaning Data validation Tableau dashboarding KPI design Fraud & risk analysis Business storytelling
FILE_03B / SECOND CASE STUDY

Emerald Properties — Sales Lead Performance Dashboard

An Excel dashboard built to track how property leads move through the sales pipeline, from first contact to closed sale, across two branches.

Emerald Properties Sales Dashboard in Excel, showing total leads, sales agent performance, gender split, property type breakdown, sales status, state comparison, and inspection status
Excel Dashboard — Sales & Lead Performance Reporting period: July 2023
RoleData Analyst
ToolsExcel, Power Query, PivotTables
Dataset778 lead records
BranchesLagos & Rivers

01 The business problem

Emerald Properties has six sales agents splitting leads across Residential, Commercial and Industrial listings in two branches. Management could see leads coming in, but they couldn't easily answer the questions that actually matter for running the sales team: which agents are converting, which property type is worth the marketing spend, and why so many leads stall out at "too expensive."

The brief was to build something the sales manager could open every month, filter by agent or branch, and get a straight read on performance without waiting on a manual report.

02 Objectives

  • Consolidate monthly lead records into one clean, structured dataset
  • Track lead volume and conversion rate by sales agent and branch
  • Break down leads by property type, gender and inspection status
  • Build an interactive Excel dashboard with slicers for ongoing use
  • Surface patterns the sales team could actually act on

03 Preparing the data

The raw lead log came in as a flat list — client ID, gender, sales agent, date given, sales status, state, property type and inspection outcome — with 778 rows across several months. Before anything went near a chart, I pulled it through Power Query to standardize it: consistent date formatting, trimmed text fields, and status values that matched exactly across the sheet (so "Paid" and "paid " didn't get counted as two different things).

Power Query editor showing the cleaned Emerald Properties lead dataset with Month Name, Client ID, Client Gender, Sales Person, Date Given, Sales status, State, Property Type and Inspection columns, 778 rows loaded
Power Query — cleaned lead dataset before load 778 rows loaded

Once the fields were clean, I loaded the query into the data model and built the dashboard on top of PivotTables, so every card and chart updates together when a slicer changes.

04 Dashboard & KPIs

The dashboard opens on total leads, then lets the manager slice by sales person, sales status or state without touching a formula. Cards sit up top for the numbers that matter first — volume and conversion — with the breakdowns underneath.

193
Total leads (July)
84
Leads converted to sales
43.5%
Conversion rate
50
Lost to "too expensive"
96
Residential leads
111
Leads inspected

05 Key insights

Inspection drives conversion. Leads that went through a property inspection were far more likely to close — inspection is the single biggest lever the sales team has.

Industrial properties generate leads but no sales. 36 leads came in for Industrial listings and none converted, despite being the third-largest property type by volume.

Residential is carrying the branch. Nearly half of all leads (96 of 193) are Residential, and it's the strongest-converting category.

Male leads convert at a higher rate than female leads, even though female leads made up the larger share (104 vs. 89) — a gap worth investigating on the marketing side.

"Too expensive" is the top objection, cited by 50 leads — more than "not interested" and "next time" combined.

Lagos and Rivers are close to even (102 vs. 91 leads), so branch performance isn't the differentiator — agent and property type are.

06 Recommendations

  • 01 Push inspection bookings harder at the point of first contact — it's the strongest predictor of a closed sale in this data.
  • 02 Revisit Commercial and Industrial pricing before investing more marketing spend there; the "too expensive" objection is concentrated in these categories.
  • 03 Give agents below the team average targeted coaching on negotiation, since lead volume across agents is fairly even but conversion isn't.
  • 04 Dig into why female leads convert at a lower rate than male leads — this looks like an engagement gap, not a demand gap.
  • 05 Keep doubling down on Residential while treating Industrial as a lead-generation problem, not a sales-execution one.
  • 06 Re-run this dashboard monthly rather than as a one-off report, so trends show up before they become a full quarter's problem.

07 Reflection

This project was less about the dashboard and more about the plumbing underneath it. Getting six months of loosely-formatted lead entries into one query that actually matched on gender, status and property type consistently took longer than building every chart combined — and it's exactly the part that doesn't show up in the final screenshot. If that step is sloppy, every slicer on top of it is just filtering bad data faster.

Power Query Data cleaning PivotTables & PivotCharts Slicers KPI design Sales performance analysis
FILE_03C / THIRD CASE STUDY

Breast Cancer Patient Outcomes Dashboard

An end-to-end breast cancer analytics project: SQL/MySQL was used to clean and validate the raw patient records, and Power BI was used to build the final analysis and dashboard.

Breast Cancer Analytics Dashboard in Power BI showing KPI cards for total patients, alive patients, dead patients, average age, insurance paid and survival rate, plus tumour stage, patient status, surgery type and age group charts
Power BI Dashboard — Breast Cancer Analytics | 2017 – 2019 334 patient records
RoleData Analyst
ToolsSQL (MySQL), Power BI
Dataset334 analysis-ready patient records
Period2017 – 2019

01 The business problem

Healthcare data can contain useful information about patient outcomes, treatment patterns, and resource use, but raw records are difficult to interpret without proper cleaning and visualization. This project transformed breast cancer patient data into an interactive dashboard to make key outcome, demographic, treatment, and insurance patterns easier to monitor.

02 Objectives

  • Clean and validate the raw patient dataset using SQL/MySQL
  • Prepare an analysis-ready dataset for Power BI
  • Monitor patient outcomes and survival status
  • Analyze tumour-stage and age-group patterns
  • Understand surgery-type distribution
  • Track insurance expenditure
  • Build an interactive dashboard for easier analysis and monitoring
  • Translate findings into practical healthcare planning recommendations

03 Preparing the data

The raw dataset contained 1,338 patient records across 16 fields. Work in MySQL Workbench covered exploring the raw data, inspecting the table structure, checking for duplicate records, validating patient IDs, checking for missing values, standardizing categorical and date fields, and preparing the insurance-paid figures for analysis. The final analytical dataset was reduced to 334 unique patient records across 9 analysis-ready fields, validated for completeness before moving into Power BI.

MySQL result grid showing the cleaned breast cancer dataset with patient_id, Age, Gender, Tumour_Stage, Insurance_Paid, Surgery_type, Date_of_Surgery, Date_of_Last_Visit and Patient_Status columns
MySQL — cleaned, analysis-ready dataset 334 rows

The original SQL script used during this workflow is no longer available, but the screenshot above shows the structured result of that cleaning process, ready for Power BI.

04 Dashboard & KPIs

The dashboard opens on six KPI cards covering patient volume, survival, average age, and insurance cost, then breaks the data down by tumour stage, patient status, surgery type, and age group, with filters for surgery type, patient status, age group, tumour stage, and date of surgery.

334
Total patients
255
Alive patients
66
Dead patients
59
Average age
₦4.7M
Insurance paid
79.4%
Survival rate

05 Key insights

334 patients were analyzed, with 255 recorded as Alive and 66 recorded as Dead.

The survival rate among patients with specified outcomes was 79.4% (255 Alive out of 255 Alive + 66 Dead).

Stage II was the largest tumour-stage category, accounting for 189 of 334 patients, ahead of Stage III (81) and Stage I (64).

Patients aged 50–59 represented the largest age group in the dataset.

"Other" was the most frequent surgery category with 105 procedures, followed by Modified Radical Mastectomy (96), Simple Mastectomy (67), and Lumpectomy (66).

Approximately ₦4.7 million in insurance payments were recorded across the analyzed patient records.

06 Recommendations

  • 01 Track survival and mortality trends regularly to identify changes in patient outcomes.
  • 02 Use age-group and tumour-stage patterns to support screening and early-detection planning.
  • 03 Monitor surgery-type patterns to support surgical capacity and resource planning.
  • 04 Use insurance expenditure patterns to support healthcare budgeting and resource allocation.
  • 05 Refresh the dashboard regularly as new patient records become available.

07 Reflection

The findings here point to opportunities to monitor rather than firm conclusions — the dashboard highlights where Stage II diagnoses and the 50–59 age group concentrate, but it doesn't establish why, and it doesn't predict outcomes for any individual patient. As with the other projects in this portfolio, most of the real effort went into the SQL stage: getting 1,338 raw records with duplicates, inconsistent categories, and messy dates down to 334 validated, analysis-ready rows before a single visual was built in Power BI.

SQL Data Cleaning Data Validation Data Transformation Power BI Dashboard Development KPI Development Healthcare Analytics Data Storytelling
FILE_03D / FOURTH CASE STUDY

NexaTel Communications — Customer Churn & Retention Analytics

An end-to-end telecom analytics project: SQL/MySQL was used to clean and model the raw customer, activity, support, and campaign data, and Power BI was used to build a four-page churn & retention dashboard with a full DAX measure layer.

NexaTel Communications Executive Overview dashboard in Power BI showing total customers, churned customers, average monthly bill, active customers, churn rate and retention rate KPIs alongside churn rate by contract type and internet service charts
Power BI Dashboard — Executive Overview | 2023 – 2025 15K customer records
RoleData Analyst
ToolsSQL (MySQL), Power BI, DAX
Dataset4 linked tables, 400K+ rows
Period covered2023 – 2025

01 Project overview

NexaTel Communications is a fictional Nigerian telecom operator built for this portfolio project to reflect realistic telecom market dynamics. The project follows the full analytics workflow — from raw, messy multi-table data through SQL cleaning to a four-page Power BI dashboard — covering customer churn, revenue impact, and retention campaign performance. It is intended as the flagship project in this portfolio, demonstrating data modeling, DAX measure design, and business-focused dashboard storytelling.

02 Business problem

NexaTel is losing a significant share of its customer base to churn, which directly erodes revenue and increases the cost of acquiring replacement customers. Leadership needed a clear, data-driven view of who is churning, why they are churning, how much revenue is at stake, and whether the retention campaigns already running are actually working — so that retention budget could be focused on the segments and interventions with the best return.

03 Business questions

  • What is the overall customer churn rate, and how has it moved month over month?
  • Which customer tenure stage, contract type, and internet service carry the highest churn risk?
  • Which customer segment (Consumer, SME, Enterprise) is losing the most revenue to churn?
  • What are customers most commonly citing as their reason for leaving?
  • How much revenue has churn cost the business, and what is the customer lifetime value by segment?
  • Are the retention campaigns generating a positive return, and which campaign types perform best?

04 Dataset & data sources

The project uses a synthetic four-table relational dataset built specifically for this case study, grounded in Nigerian geography and realistic telecom pricing and usage patterns, totaling 400,000+ rows:

  • Customer_Master — customer profile, segment, contract type, internet service, and churn status
  • Monthly_Customer_Activity — monthly billing and usage records per customer
  • Customer_Support_Interactions — support tickets and reported churn reasons
  • Retention_Campaigns — campaign type, cost, customer response, and retention outcome

These four tables were linked together to support cross-table analysis of churn drivers, revenue impact, and campaign effectiveness.

05 Data cleaning & preparation

All four tables were cleaned in MySQL Workbench before any visual was built in Power BI. Cleaning work included:

  • Standardizing mixed date formats across tables into a consistent format
  • Fixing inconsistent text casing in categorical fields (segment, contract type, churn reason, etc.)
  • Stripping currency symbols and correcting billing fields that had been stored as text
  • Identifying and removing duplicate records
  • Handling structural nulls left by the original data generation process

As with the other projects in this portfolio, this stage took up most of the effort — validating and reshaping four linked tables before they were analysis-ready in Power BI.

06 SQL analysis

With MySQL Workbench, the cleaned tables were queried to validate row counts, check referential integrity across the four tables, and confirm that churn status, billing figures, and campaign outcomes were consistent before the data was loaded into Power BI.

customer_cleaning.sql
-- Standardize casing and trim whitespace on categorical fields
UPDATE customer_master
SET customer_segment = TRIM(UPPER(customer_segment)),
    contract_type   = TRIM(UPPER(contract_type)),
    internet_service = TRIM(UPPER(internet_service));

-- Remove duplicate customer records, keeping the first occurrence
DELETE c1 FROM customer_master c1
INNER JOIN customer_master c2
WHERE c1.customer_id = c2.customer_id
  AND c1.row_id > c2.row_id;

07 Power BI data modeling & DAX

In Power BI, the four cleaned tables were connected through a star-style model, with a dedicated Dim_Date table built for consistent time-intelligence across all four dashboard pages, and a standalone _Measures table used to hold every DAX measure separately from the data tables. Measures were built to cover churn rate, retention rate, revenue lost to churn, customer lifetime value (CLV), average revenue per user (ARPU), monthly recurring revenue (MRR), campaign success rate, and retention ROI.

4
Linked source tables
4
Dashboard pages
1
Dedicated Dim_Date table

08 Dashboard

The final dashboard is built across four pages — Executive Overview, Customer & Churn Drivers, Revenue & Customer Value, and Retention Campaign Performance — using a dark design system for readability and a consistent visual identity across the portfolio.

Customer and Churn Drivers dashboard page in Power BI showing average customer tenure, churn rate by tenure group, churn rate by customer segment, churn rate by internet plan, and churned customers by churn reason
Page 2 — Customer & Churn Drivers Understanding the factors influencing customer churn
Revenue and Customer Value dashboard page in Power BI showing revenue lost to churn, CLV, ARPU, MRR, average customer tenure, and revenue breakdowns by customer segment
Page 3 — Revenue & Customer Value Understanding revenue impact and customer value across segments
Retention Campaign Performance dashboard page in Power BI showing retention ROI, revenue saved, total retention cost, customers retained, campaign success rate, and campaign performance by campaign type
Page 4 — Retention Campaign Performance Evaluating campaign effectiveness to guide future retention strategy

09 Key insights

NexaTel has 15K customers, with 11K currently active and approximately 4K churned — a 25.41% churn rate and a 74.59% retention rate overall.

Churn is heavily concentrated among newer customers, reaching 82.77% within the first 6 months, compared with just 4.95% among customers with 25–36 months of tenure.

Month-to-month contracts churn the most at 46.8%, versus 30.04% for one-year and 23.16% for two-year contracts.

Unexpected billing charges and high monthly charges are the top two reported reasons for churn, ahead of switching to a cheaper competitor.

NexaTel has lost approximately $222.73K in revenue to churn, with the Consumer segment responsible for the largest share at about $162K.

Retention campaigns show a 42.92x return on the $198K spent, saving an estimated $8.72M in revenue and retaining roughly 7K customers, though success rates vary sharply by campaign type — from 47% for High Value Customer campaigns down to 29% for Win Back campaigns.

10 Business recommendations

  • 01 Focus retention efforts on customers in their first 0–6 months, since this group carries by far the highest churn risk (82.77%).
  • 02 Scale up High Value, Loyalty, and Contract Renewal campaigns, which are delivering the best success rates of all campaign types.
  • 03 Address billing transparency directly, since unexpected and high billing charges are the top reported reasons customers leave.
  • 04 Prioritize the Consumer segment in retention planning, as it accounts for the largest share of revenue lost to churn.

11 Tools & technologies

MySQL / SQL Power BI DAX Data Modeling Power Query Data Cleaning Dashboard Design

12 Project outcome

The result is a four-page, business-ready Power BI dashboard that gives NexaTel leadership a clear, at-a-glance view of churn, revenue impact, and retention campaign performance — grounded in a fully cleaned and modeled four-table dataset. It stands as the most complete end-to-end project in this portfolio, spanning raw multi-table data through SQL cleaning, Power BI data modeling, DAX measure design, and final dashboard delivery.

13 Project files

The full project write-up, cleaning documentation, SQL scripts, and Power BI file for this case study will be published to GitHub shortly.

GitHub repository — coming soon
FILE_03E / FIFTH CASE STUDY

VertaMart — E-Commerce Operations & Profitability Analysis

A capstone supply chain and e-commerce analytics project: SQL/MySQL was used to design, clean, and validate a nine-table relational dataset, and Tableau was used to build a three-page dashboard connecting profitability, inventory, supplier, and fulfilment performance for a modelled Nigerian e-commerce retailer.

VertaMart Operations and Profitability Overview dashboard in Tableau showing gross margin by warehouse, delivery on-time performance by region, fulfilment rate, and a year selector parameter
Tableau Dashboard — Operations & Profitability Overview | 2023 – 2025 396K+ rows across 9 tables
RoleData Analyst
ToolsSQL (MySQL), Tableau
Dataset9 linked tables, 396K+ rows
Period covered2023 – 2025

01 Project overview

VertaMart is a modelled Nigerian e-commerce retailer built for this portfolio project as its capstone case study. The project follows the full analytics workflow — from a nine-table relational schema through SQL cleaning to a three-page Tableau dashboard — connecting profitability, inventory, supplier, and fulfilment data that most retail dashboards report separately. It is intended as the most operationally complete project in this portfolio, demonstrating schema design, multi-table SQL cleaning, and cross-functional business analysis.

02 Business problem

Is VertaMart actually capturing the profit its revenue suggests, or are operational issues across fulfilment, delivery, inventory, suppliers, and returns quietly working against reported performance? Most retail dashboards stop at revenue and order counts. This project connects the full operational chain back to profitability to answer that question for leadership.

03 Business questions

  • How is profit and revenue distributed across products, categories, and warehouses?
  • How healthy is inventory across the network, and where is stockout risk concentrated?
  • How reliable are suppliers, and how do lead times vary across the supplier base?
  • How well is each warehouse fulfilling and delivering orders on time?
  • Which return patterns are affecting the most profitable product categories?

04 Dataset & data sources

The project uses a synthetic nine-table relational dataset designed specifically for this case study, modelling five distribution centres, nine departments, and 40 suppliers across three years, totaling 396,000+ rows:

  • Customers — customer profile, segment, and acquisition channel
  • Orders & Order Items — order-level and line-level sales, delivery, and profit data
  • Products — department, category, subcategory, supplier, and inventory thresholds
  • Suppliers & Purchase Order Items — supplier reliability and purchase order fulfilment
  • Warehouses & Inventory Snapshots — warehouse-level stock and stockout tracking
  • Returns — return reasons, quantities, and refund values

These nine tables were linked together to support cross-table analysis of profitability, inventory health, supplier reliability, and fulfilment performance.

05 Data cleaning & preparation

All nine tables were cleaned and validated in MySQL using an Identify → Investigate → Validate → Fix → Document workflow before any visual was built in Tableau. Cleaning work included:

  • Fixing a stockout flag that hadn't been set correctly wherever closing stock reached zero
  • Standardizing inconsistent state and city name casing across customer and order records
  • Resolving a duplicate category label caused by inconsistent naming
  • Backfilling missing first-order dates for customers, while correctly distinguishing "never ordered" from a genuine data gap
  • Investigating and documenting flagged anomalies — such as safety stock exceeding reorder level for some products — that turned out to be reasonable variation, not errors

The cleaned tables were joined and exported into a flat file for Tableau, with a separate pre-aggregated export built to support accurate inventory turnover calculations without row-level duplication from the join.

06 SQL analysis

With MySQL, the cleaned tables were queried to validate stockout logic, standardize categorical fields, backfill missing dates from source data, and confirm the profit formula held across the order table before the data was exported for Tableau.

02_data_cleaning.sql
-- IDENTIFY: rows where closing_stock = 0 but stockout_flag was still 0
SELECT
    SUM(CASE WHEN closing_stock = 0 AND stockout_flag != 1 THEN 1 ELSE 0 END) AS stock_zero_flag_not_set
FROM inventory_snapshots;

-- FIX: set stockout_flag = 1 wherever closing_stock is 0
UPDATE inventory_snapshots
SET stockout_flag = 1
WHERE closing_stock = 0 AND stockout_flag != 1;

07 Tableau dashboard build

In Tableau, the pre-joined dataset was used to build calculated fields, LOD expressions, and an interactive Year Selector parameter across three connected pages. The build includes custom 3D polygon bar charts, lollipop charts for lead time by supplier, and KPI tiles styled to a consistent navy-and-amber brand identity built for VertaMart.

9
Linked source tables
3
Dashboard pages
10
KPIs tracked

08 Dashboard

The final dashboard is built across three pages — Operations & Profitability Overview, Inventory & Supply Performance, and Fulfilment & Returns — using a dark navy-and-amber design system for readability and a consistent visual identity across the portfolio.

VertaMart Inventory and Supplier Performance dashboard in Tableau showing stockout rate by warehouse, supplier on-time delivery rate, and average lead time by supplier
Page 2 — Inventory & Supply Performance Stockout rate, supplier lead time, and turnover by department
VertaMart Fulfilment and Returns dashboard in Tableau showing fulfilment rate, return rate by product category, and delivery performance breakdowns
Page 3 — Fulfilment & Returns Fulfilment rate, delivery on-time rate, and return rate by category

09 Key insights

Gross margin sits at 31.7%, with Port Harcourt DC leading all warehouses at 32.5% margin — but no single warehouse leads on both margin and delivery performance at once.

Delivery on-time performance is weak network-wide, ranging only from 75% (Ibadan) to 77% (Lagos, Abuja) — a narrow, consistently low band pointing to a shared process issue rather than one underperforming site.

Fulfilment Rate sits at 81.5%, meaning close to 1 in 5 orders were not successfully fulfilled — the biggest gap between what the business is capable of and what customers experience.

Inventory and supplier performance are current strengths: stockouts are rare network-wide (0.9%) and supplier on-time delivery is solid (83.4%) against a 12-day average lead time.

Ibadan DC is the one compounding risk site, carrying both the highest stockout rate in the network (1.7%) and the weakest delivery on-time rate (75%) at the same time.

High-profit categories carry above-average return rates — TVs & Audio (6.1%) and Laptops (7.0%) sit well above the 3.4% network average, meaning reported category profit may overstate what the business actually retains.

10 Business recommendations

  • 01 Audit delivery promise-setting and carrier performance at the network level, since every warehouse underperforms by a similar margin rather than one outlier site.
  • 02 Open a focused operational review of Ibadan DC — the only warehouse weak on both inventory and delivery at once.
  • 03 Reconcile profit-by-category figures against return rates before reporting them as standalone wins, particularly for TVs & Audio and Laptops.
  • 04 Investigate Skincare (10.9%) and Toys (9.8%) return rates specifically, since both run roughly double the next-highest category.

11 Tools & technologies

MySQL / SQL Tableau LOD Expressions Schema Design Data Cleaning Dashboard Design

12 Project outcome

The result is a three-page, business-ready Tableau dashboard that gives VertaMart leadership a connected view of profitability, inventory, supplier, and fulfilment performance — grounded in a fully designed and cleaned nine-table dataset. As the capstone project in this portfolio, it spans schema design, multi-table SQL cleaning, Tableau dashboard development, and business analysis that ties operational execution back to the profit figures leadership cares about most.

13 Project files

The full project write-up, cleaning documentation, and SQL scripts for this case study are available on GitHub.

GitHub repository →
FILE_04 / PROJECTS

More in the case file

A growing set of dashboard and analytics projects across telecom, fraud, sales, and healthcare data.

Live case study

VertaMart — E-Commerce Operations & Profitability Analysis

A three-page Tableau dashboard built on a nine-table, 396K+ row e-commerce and supply chain dataset — connecting profitability, inventory, supplier, and fulfilment performance.

SQL / MySQL Tableau
View project →
Live case study

NexaTel Communications — Customer Churn & Retention Analytics

A four-page Power BI dashboard built on a four-table, 400K+ row telecom dataset — covering churn drivers, revenue impact, and retention campaign ROI.

SQL / MySQL Power BI DAX
View project →
Live case study

Apex Trust Bank — Fraud & Risk Intelligence Dashboard

A full SQL-to-dashboard workflow analyzing 1,986 bank transactions to flag fraud patterns, risk scores, and regional hotspots.

SQL Tableau Excel
View project →
Live case study

Emerald Properties Sales Dashboard

A lead-distribution dashboard tracking sales performance, client demographics, and inspection status for a property leads team.

Excel
View project →
Live case study

Breast Cancer Patient Outcomes Dashboard

An end-to-end healthcare analytics project using SQL and Power BI to clean, validate, analyze, and visualize breast cancer patient outcomes, treatment patterns, and insurance expenditure.

SQL / MySQL Power BI Healthcare Analytics
View project →
FILE_05 / CERTIFICATIONS

Certifications

Formal training backing up the hands-on project work.

Certified Data Analyst

Excel, SQL, Tableau & Power BI

Skill Ahead Academy
FILE_06 / CONTACT

Let's talk about your data.

Open to remote data analyst, BI analyst, and freelance dashboard work. If you've got messy data and a decision to make, I'd like to hear about it.