Bashirat Oyekunle

Senior Analyst

Data analyst specialising in sales performance, operations, and customer analytics using SQL, Power BI, and Excel

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

Graded projects
44
Average best score
93/100
Career level
Senior Analyst
Core tool stack
SQL (23) · Power BI (13) · Excel (6) · email (2)

About

Working through pharmaceutical, logistics, and retail scenarios, I have built end-to-end analytical deliverables: star-schema data models with full DAX measure suites, multi-page executive reports in Power BI, and validated customer count summaries in Excel. The work spans requirement intake through to stakeholder-facing output, with an emphasis on measure-driven numbers and clear visual hierarchy.

On the SQL side, logistics complaint analysis sharpened my ability to use window functions to produce percentage distributions in a single query pass, and to frame findings at the level of decision-makers rather than data consumers. Across 44 graded tasks, my average best score is 93, reflecting consistent accuracy in both technical execution and business communication.

Skills

SQL

  • Window functions (SUM OVER) for percentage-of-total in SQL
  • GROUP BY with COUNT and ROUND for complaint distribution queries

Excel

  • COUNTA, COUNTIF, COUNTIFS for multi-methodology customer counting
  • Boolean-as-text criterion handling in COUNTIF
  • Power Query unpivot to convert wide targets tables to long format

Power BI and DAX

  • SUMX with RELATED for computed revenue measures
  • TOTALYTD and DATEADD for year-to-date and prior-year time intelligence
  • SAMEPERIODLASTYEAR for same-period comparisons
  • DIVIDE with variable guards for MoM percentage measures
  • Star schema modelling with single-direction dimension-to-fact relationships
  • Brand-aligned report layout with drill-down hierarchies in Power BI

Pharma · Power BI

Two-page executive sales and marketing report for a pharmaceutical board

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

Problem

Dr. Ingrid Hoffmann at Forggith Pharmaceuticals (simulated pharmaceutical company) needed a brand-aligned two-page Power BI report ready for board presentation. Page 1 required eight KPI cards, a map, a drill-down channel chart, and a product-class breakdown with four slicers. Page 2 required rep- and team-level achievement views, all measures driving the numbers rather than implicit column aggregations.

What I did

Every visual on both pages is connected to the DAX measure suite built in a prior task, so the numbers respond correctly to slicer selections rather than pulling raw column totals. For the channel visual, I built a parent-child drill-down hierarchy so the board can move from channel to sub-channel without switching pages. The Page 2 team matrix places Actual Revenue, Achievement %, and Actual Volume side by side, and the achievement bar chart is sorted ascending so underperforming products appear first, directly answering the board's anticipated question about laggards. Brand colours are applied consistently: burgundy for primary series, dark blue for secondary visuals, and the Forggith logo on both page headers.

Finding

Overall revenue achievement came in at 109.7% of target year-to-date, while Analgesics, the highest-revenue product class at USD 2.25bn, posted an achievement rate of 99.2%, making it the one class worth flagging to the board despite its revenue lead.

Outcome

The board received a self-contained report where any slicer combination surfaces rep- or product-level underperformance without additional data preparation.

Next step

A useful next step would be isolating the bottom-performing sales representatives by team to determine whether underperformance is concentrated in one team or spread evenly across all four.

  • Brand-aligned report layout with drill-down hierarchies in Power BI
  • Star schema modelling with single-direction dimension-to-fact relationships
  • TOTALYTD and DATEADD for year-to-date and prior-year time intelligence
  • SUMX with RELATED for computed revenue measures
  • DIVIDE with variable guards for MoM percentage measures

Logistics · SQL

Complaint category distribution analysis to prioritise board messaging

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

Problem

Funmi Alade, Head of Customer Experience at FlowRoute Logistics (simulated logistics company), needed to know the size and shape of the complaint problem before a board presentation. The specific question was which single category to lead with and why, based on a count and percentage breakdown across all complaint categories.

What I did

Rather than using a subquery to calculate the total, I used a window function, SUM(COUNT(*)) OVER (), to compute the grand total in the same pass as the per-category counts. ROUND at one decimal place kept the output readable without additional formatting steps. Sorting by complaint count descending put the most common category first, matching the order Funmi would naturally read the results. The key analytical move was looking past the leading category to note that all four categories cluster between 24.7% and 25.6%, which reframes the finding from a single-point failure to a systemic pattern.

Finding

Lost items ranks as the leading complaint category, but the distribution across all four categories is effectively uniform, indicating a systemic delivery reliability problem rather than one isolated failure type.

Outcome

Funmi received a one-query result with counts, percentages, and a clear analytical verdict, structured so the board communication could distinguish between a surface finding and the deeper operational signal.

SELECT
 Category,
 COUNT(*) AS ComplaintCount,
 SUM(COUNT(*)) OVER () AS TotalComplaints,
 ROUND(
 COUNT(*) * 100.0
 / SUM(COUNT(*)) OVER (),
 1
 ) AS PercentageTotal
FROM logistics.complaints
GROUP BY Category
ORDER BY ComplaintCount DESC;

The window function SUM(COUNT(*)) OVER () computes the grand total within the same GROUP BY pass, avoiding a subquery and making the percentage calculation self-contained in a single query.

Next step

Segmenting complaint counts by delivery region or route would reveal whether the uniform distribution holds everywhere or whether specific corridors drive disproportionate volumes in any single category.

  • Window functions (SUM OVER) for percentage-of-total in SQL
  • GROUP BY with COUNT and ROUND for complaint distribution queries

Retail · Excel

Customer count reconciliation across marketing, operations, and finance definitions

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

Problem

Chidi Okafor at Meridian Retail (simulated retail company) needed to explain to investors why marketing, operations, and finance each report a different customer count. The task was to replicate all three counting methodologies in Excel, label each result clearly, and produce an investor-facing summary that explains the funnel logic in plain terms.

What I did

Three live formulas in a dedicated Customer Count Validation sheet produce each team's number. COUNTA across the customer ID column, minus the header row, gives the raw marketing total. COUNTIF targets the text string "FALSE" in the is_duplicate column rather than a logical boolean, because the database export encodes booleans as text labels, and using a logical FALSE as the criterion would return zero. COUNTIFS adds a second condition on total_orders greater than zero to isolate finance's active-customer definition. The output table includes a Target Team column, a Validated Count column, and an Investor Explanation column so the story is readable without opening a single formula.

Finding

Marketing counts 2,331 total signups, operations counts 2,131 after removing duplicates, and finance counts 2,105 after further removing 26 non-duplicate profiles with no completed orders, three legitimate counts of the same dataset under three different business definitions.

Outcome

Chidi received a single investor-ready sheet where each count is live, labelled, and accompanied by a plain-language explanation of why it differs from the others.

Next step

Examining the 26 zero-order non-duplicate profiles by signup date and channel would show whether they represent a specific acquisition cohort or campaign that consistently fails to convert.

  • COUNTA, COUNTIF, COUNTIFS for multi-methodology customer counting
  • Boolean-as-text criterion handling in COUNTIF

Logistics · Email

Plain-language briefing on a corrected delivery failure rate for executive escalation

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

Problem

Funmi Alade at FlowRoute Logistics needed to brief an executive named Emeka on a data quality finding without using technical language. The ask was a sub-150-word email covering three points: what went wrong with the reported failure numbers, the two specific rates before and after correction, and a clear statement on whether the issue was ongoing.

What I did

The email answers Funmi's three numbered questions in the exact order she asked them, so she can read it straight through without reorganising the information. Replacing the technical term ghost attempts with extra delivery retries on old orders keeps the explanation accurate without requiring systems knowledge. Citing the March 15, 2023 cutoff date gives Funmi a concrete piece of evidence to repeat, rather than a vague assurance that the patch held. The final sentence, that the real failure rate is still nearly 10%, was included because stopping at the corrected number would leave Emeka thinking the problem is resolved.

Finding

The reported failure rate of 9.99% overstated the true rate of 9.80% by 0.19 percentage points, and while the reporting glitch is confirmed closed as of March 15, 2023, a near-10% operational failure rate remains the substantive issue.

Outcome

Funmi received a self-contained 150-word brief she could relay to the executive verbatim, with the corrected figures, the evidence of closure, and the remaining operational risk all in place.

Next step

Tracking whether the 9.80% true failure rate has moved in the months since March 2023 would determine whether the operational problem is improving, stable, or worsening.

  • Plain-language stakeholder communication of statistical findings

Pharma · Power BI

Full DAX measure suite and star schema model for a pharmaceutical sales report

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

Problem

Dr. Ingrid Hoffmann at Forggith Pharmaceuticals needed ten DAX measures to power both pages of an executive report, with no stored revenue column available in either the sales or targets fact table. The model also required the wide targets table to be restructured before any measures could reference it.

What I did

Because revenue exists nowhere as a column, Total Revenue and Total Target Revenue are both built with SUMX, iterating row by row and pulling price from the products dimension via RELATED. Year-to-date measures use TOTALYTD over the marked date table, and prior-year comparisons use CALCULATE with DATEADD at the year interval rather than hard-coded year filters, so the measures stay slicer-responsive. Revenue MoM % captures current and prior month revenue in named variables before passing them to DIVIDE, which guards against divide-by-zero without a separate IF branch. The wide FactTargets table was unpivoted in Power Query from a format where years were column headers into a long format with a constructed TargetDate column, making it joinable to DimDate on a single key.

Finding

All ten measures return values consistent with the Forggith dataset, with SUMX confirming that revenue computed through iteration matches expected totals, and SPLY shifting exactly 12 months when tested against known slices.

Outcome

The measure suite provides the complete computational layer for both report pages, with every KPI card, achievement percentage, and time-comparison metric driven by a named, auditable measure rather than an implicit aggregation.

Total Revenue =
 SUMX(FactSales, FactSales[Quantity] * RELATED(DimProducts[ProductPrice]))

Revenue MoM % =
 VAR CurrentMonthRev = [Total Revenue]
 VAR PreviousMonthRev = CALCULATE([Total Revenue], DATEADD(DimDate[Date], -1, MONTH))
 RETURN DIVIDE(CurrentMonthRev - PreviousMonthRev, PreviousMonthRev)

Achievement % =
 DIVIDE([Revenue YTD], [Target Revenue YTD])

These three measures illustrate the core patterns in the suite: SUMX for row-by-row revenue computation, named variables with DATEADD for month-on-month change, and DIVIDE for safe ratio calculation.

Next step

Adding row-level security roles scoped to individual sales teams would make the same report usable for team managers without exposing cross-team performance data.

  • SUMX with RELATED for computed revenue measures
  • TOTALYTD and DATEADD for year-to-date and prior-year time intelligence
  • SAMEPERIODLASTYEAR for same-period comparisons
  • DIVIDE with variable guards for MoM percentage measures
  • Power Query unpivot to convert wide targets tables to long format
  • Star schema modelling with single-direction dimension-to-fact relationships

Additional projects

Customer Analytics

  • Acquisition channel performance summary · Excel · 92/100
  • Monthly customer acquisition trend chart · Excel · 91/100
  • Customer and account baseline count · SQL · 95/100
  • 2024 monthly customer onboarding volume and risk segmentation · SQL · 78/100
  • Top 10 branches by customer assignment · SQL · 95/100
  • Customer complaints briefing for leadership review · Email · 92/100
  • Active customer concentration by industry · SQL · 97/100

Dashboard Development

  • Meridian brand theme implementation in Power BI · Power BI · 100/100
  • Sales performance report mockup and page layout design · Power BI · 91/100
  • October 2023 revenue by status bar chart · Power BI · 92/100
  • Hub delivery performance dashboard page · Power BI · 92/100
  • Complaints overview dashboard initial build · Power BI · 90/100

Data Analysis

  • Account portfolio composition by type and status · SQL · 95/100
  • Order status distribution audit · SQL · 95/100
  • Meridian data file structure review · Excel · 88/100
  • Orders table baseline summary for revenue investigation · SQL · 95/100
  • Pharmaceutical distribution data discovery · Power BI · 92/100

Data Modeling

  • Pharmaceutical sales star schema model · Power BI · 92/100
  • Power BI connection to Meridian database · Power BI · 95/100

Data Quality

  • Power Query transformation for orders monetary values · Power BI · 78/100
  • Power Query transformation for order items pricing columns · Power BI · 95/100
  • Customer dimension deduplication in Power Query · Power BI · 97/100
  • Definitive customer count audit · SQL · 92/100
  • Delivery attempt cap compliance audit · SQL · 97/100

Financial Reporting

  • Top payers by claim volume for October 2024 · SQL · 95/100
  • Gross vs net revenue reconciliation · Excel · 95/100
  • Revenue gap analysis by order status · SQL · 88/100
  • October 2024 claims and collections snapshot · SQL · 97/100
  • Quarterly revenue by order status breakdown · Excel · 95/100
  • October 2023 revenue reconciliation by status · SQL · 96/100
  • Monthly collections trend for 2024 · SQL · 95/100

Operations Analytics

  • Hub performance ranking by delivery and complaints · SQL · 92/100
  • True shipment failure rate analysis · SQL · 97/100
  • Active clinic inventory for Texas operations · SQL · 97/100
  • Banker headcount and active staff snapshot by role · SQL · 95/100
  • Active provider headcount by specialty · SQL · 95/100
  • Top 10 clinics by patient volume in 2024 · SQL · 92/100
  • Appointment status breakdown and no-show rate analysis · SQL · 97/100
  • Branch footprint analysis by region · SQL · 95/100