Oluwashola Adebisi

Analyst

Data analyst building retail, logistics, and quality work in Excel and SQL

Scores reflect independent, automated grading of simulated business tasks completed on DataSimHQ.

Graded projects
10
Average best score
89/100
Career level
Analyst
Core tool stack
Excel (9) · SQL (1)

About

Working through retail and logistics scenarios, I have built live formula-driven summaries, multi-condition revenue calculations, and duplicate-detection audits in Excel. Tasks ranged from a SUMIFS-based October revenue reconciliation for a CFO to a hub-risk analysis that normalised complaint volume across eight hubs using per-1,000-shipment rates.

On the SQL side, I explored order-status distributions to support a revenue discrepancy investigation, combining GROUP BY aggregation with revenue context. Each submission was independently graded, and the work reflects what I can produce from a brief, a raw dataset, and a spreadsheet.

Skills

SQL

  • SQL GROUP BY aggregation
  • SQL SUM and COUNT with aliased columns

Excel formulas

  • SUMIFS with multi-condition date and status filters
  • COUNTIF and COUNTIFS for frequency and cross-sheet counts
  • INDEX/MATCH for cross-sheet lookups
  • AND logic for multi-condition boolean columns
  • Dynamic narrative formulas using INDEX/MATCH/MAX and TEXT
  • AVERAGEIFS and SUMIFS for channel performance analysis

Analytical techniques

  • Per-unit normalisation (complaints per 1,000 shipments)
  • Multi-condition boolean columns
  • COUNTIFS for cross-sheet counts

Excel formatting and structure

  • Conditional formatting with expression-based rules
  • Currency formatting with custom number formats
  • PivotTable-style summary sheet construction

Retail · Excel

Duplicate customer audit with verified-match scoring for an investor summary

Independent grading: 97/100(verify, opens in a new tab)

Problem

Chidi Okafor's team at Meridian Retail (simulated retailer) needed to validate whether the system's duplicate flags were reliable. The specific question was how many name matches were genuine duplicates caught by the system versus coincidental matches involving different people sharing a name.

What I did

To answer this, I added a Name Match Count column using COUNTIF anchored to the full customer range, then a Verified Duplicate column using an AND formula that combined the name-match count with the is_duplicate flag. Using TRUE() rather than the text string 'TRUE' avoided a common comparison pitfall. A Duplicate Summary sheet then pulled five metrics using COUNTIF and COUNTIFS, covering total customers, system-flagged duplicates, name matches, verified duplicates, and unflagged coincidental matches. Beyond the core requirements, I built a Channel Performance sheet with COUNTIFS, AVERAGEIFS, and SUMIFS that excluded duplicate records from channel-level figures.

Finding

The system flagged 200 duplicates, all 200 were confirmed by name-match overlap, and 240 additional name matches were coincidental rather than missed duplicates, demonstrating 100 percent recall with no false negatives among the name-pattern group.

Outcome

The Duplicate Summary sheet gave Chidi a clear, investor-ready table distinguishing genuine duplicates from coincidental name collisions, removing the risk of misrepresenting system accuracy in the presentation.

Next step

A useful next step would be to break the 240 unflagged name matches down by registration channel to see whether coincidental duplicates cluster in any particular sign-up path.

  • COUNTIF and COUNTIFS for frequency and cross-sheet counts
  • AND logic for multi-condition boolean columns
  • Conditional formatting with expression-based rules
  • AVERAGEIFS and SUMIFS for channel performance analysis
  • PivotTable-style summary sheet construction

Retail · SQL

Order status enumeration to support a revenue discrepancy investigation

Independent grading: 62/100(verify, opens in a new tab)

Problem

Nura Ibrahim (CFO) at Meridian Retail (simulated retailer) flagged a revenue discrepancy and needed a first look at the orders table before deeper investigation. The question was which order statuses existed and how many orders and how much gross value each status carried.

What I did

The query groups orders by status and produces a count and a summed revenue figure for each group. Adding SUM(total_order) alongside COUNT was a deliberate choice to surface the financial weight of each status, not just its frequency. The query also includes a plain-language comment to document intent. The reviewer noted, however, that a date filter referencing a non-existent column was included, which may have broken execution, so the revenue and count values were not confirmed as correct.

Finding

The query structure correctly enumerates statuses with counts and gross amounts per group, though the date filter on a non-existent column means the actual output cannot be treated as reliable without a corrected run.

Outcome

The approach established a reusable pattern for status-level aggregation that can be applied to the confirmed schema once the invalid column reference is removed.

SELECT
 status,
 COUNT(*) AS order_count,
 SUM(total_order) AS gross_amount
FROM orders
WHERE order_date >= '2023-10-01'
 AND order_date < '2023-11-01'
GROUP BY status
ORDER BY gross_amount DESC;

The GROUP BY with COUNT and SUM correctly aggregates by status; the WHERE clause references a column that does not exist in the table, which the reviewer flagged as potentially breaking the query.

Next step

The immediate correction is to rerun the query against the confirmed date column name to produce verified counts, then compare gross amount by status against the Finance system figure Nura flagged.

  • SQL GROUP BY aggregation
  • SQL SUM and COUNT with aliased columns

Logistics · Excel

Complaint category breakdown with a dynamic board talking point for FlowRoute logistics

Independent grading: 97/100(verify, opens in a new tab)

Problem

Funmi Alade, Head of Customer Experience at FlowRoute Logistics (simulated logistics company), needed a board-ready summary of the full complaints record. She asked for a total complaint count, a percentage breakdown by category sorted most to least common, and a single sentence identifying which category to lead with.

What I did

The total was calculated with COUNTA referencing the full complaints column, returning 64,737 records. Category counts used COUNTIF against each category label, with percentages derived by dividing each count by the anchored total cell rather than hardcoding any figure. For the board talking point, an INDEX/MATCH/MAX combination identifies the top category dynamically, and a TEXT function embeds the percentage, meaning the cell updates automatically if the underlying data changes. All counts and percentages were verified to sum correctly.

Finding

The four complaint categories were closely distributed, with lost items the most common, and no single category dominated by a margin that would suggest a systemic failure in one area alone.

Outcome

Funmi received a fully live summary sheet where every figure recalculates from the source data, giving her team a reusable template rather than a one-off snapshot.

Next step

Breaking complaint counts by month within each category would show whether the lost-items rate is stable or worsening over time, which would sharpen the board message considerably.

  • COUNTIF and COUNTIFS for frequency and cross-sheet counts
  • Dynamic narrative formulas using INDEX/MATCH/MAX and TEXT
  • Currency formatting with custom number formats
  • PivotTable-style summary sheet construction

Logistics · Excel

Hub risk ranking with normalised complaint rates to identify operational pressure points

Independent grading: 95/100(verify, opens in a new tab)

Problem

Funmi Alade at FlowRoute Logistics needed to know which hubs posed the greatest operational risk. She asked for delivery rate, raw complaint count, and a volume-normalised complaint rate per hub, with an honest verdict rather than a manufactured ranking.

What I did

Hub attributes were pulled via INDEX/MATCH against the Hub_Performance sheet rather than pasted in, so the table stays live. Complaint counts came from COUNTIF referencing the full Complaints sheet column, and the per-1,000-shipments rate divided each hub's complaint count by its own total shipments figure to remove volume bias. MIN and MAX formulas in a summary spread table made the narrow range across hubs visible at a glance. The verdict explicitly named both the lowest delivery rate hub and the highest complaint-rate hub, and stated that the two signals disagreed, resisting the urge to pick a single scapegoat.

Finding

Delivery rates and complaint rates across all eight hubs fell within a tight band, with no hub clearly worse on both metrics simultaneously, meaning no single hub warranted urgent escalation above the others.

Outcome

The analysis gave Funmi a defensible, evidence-backed answer she could take to stakeholders without overstating risk at any one hub.

Next step

Segmenting the complaint-rate calculation by complaint category per hub would reveal whether certain hubs are disproportionately responsible for a specific failure type, such as lost items, even if their overall rate looks average.

  • COUNTIF and COUNTIFS for frequency and cross-sheet counts
  • INDEX/MATCH for cross-sheet lookups
  • Per-unit normalisation (complaints per 1,000 shipments)
  • Currency formatting with custom number formats

Retail · Excel

October gross and net revenue calculation to reconcile against Meridian's finance system

Independent grading: 97/100(verify, opens in a new tab)

Problem

Nura Ibrahim (CFO) at Meridian Retail (simulated retailer) needed October 2023 revenue calculated in Excel to cross-check against the Finance system. The specific requirement was to separate gross revenue across all statuses from net revenue after excluding cancelled, returned, and refunded orders, and to show the gap between the two.

What I did

Gross revenue used a SUMIFS formula targeting the total_naira column with a date boundary constructed from DATE functions, bounding the range to October 2023 only. Net revenue chained three additional criteria onto the same formula, each excluding one unwanted status with a not-equal operator. The gap in B6 is a live subtraction rather than a typed figure, so all three cells update together if the source data changes. Currency formatting used a custom code to display naira with thousand separators as required.

Finding

Gross October revenue came to NGN 56,876,792 and net revenue after removing cancelled, returned, and refunded orders came to NGN 38,450,382, a gap of NGN 18,426,410.

Outcome

Nura received three reconcilable figures, all matching the Finance system's expected values within rounding tolerance, giving her a confirmed baseline for the revenue discrepancy investigation.

=SUMIFS(Orders!$I:$I,Orders!$P:$P,">="&DATE(2023,10,1),Orders!$P:$P,"<"&DATE(2023,11,1))
=SUMIFS(Orders!$I:$I,Orders!$P:$P,">="&DATE(2023,10,1),Orders!$P:$P,"<"&DATE(2023,11,1),Orders!$H:$H,"<>cancelled",Orders!$H:$H,"<>returned",Orders!$H:$H,"<>refunded")

The first formula captures all October orders; the second chains three status exclusions onto the same date filter, producing net revenue in a single pass without needing a helper column.

Next step

Repeating the net revenue calculation at product-category level would show which categories drive the largest share of the NGN 18,426,410 cancellation and return gap, which could point Nura toward a specific fulfilment issue.

  • SUMIFS with multi-condition date and status filters
  • Currency formatting with custom number formats
  • PivotTable-style summary sheet construction

Additional projects

Customer Analytics

  • Acquisition channel performance summary · Excel · 97/100
  • Monthly customer acquisition trend chart · Excel · 95/100

Data Analysis

  • Data file exploration and structure review · Excel · 62/100

Data Quality

  • Customer count validation and deduplication audit · Excel · 91/100

Financial Reporting

  • Q4 revenue breakdown by order status · Excel · 92/100