Ajiku Iyaniwura

Analyst

Data analyst building retail and business insights in SQL, Excel, and Power BI

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

Graded projects
18
Average best score
85/100
Career level
Analyst
Core tool stack
SQL (7) · Excel (6) · Power BI (5)

About

Working through retail and operations scenarios on DataSimHQ, I have practised connecting relational databases to Power BI, writing SQL queries that filter and aggregate real-world flag columns, and building Excel PivotTables with formatted outputs for stakeholder review. Each task was submitted independently and graded against a model answer.

Across these projects I have focused on getting the data foundation right before any visual layer: converting raw kobo values to naira in Power Query, excluding duplicate customer records at the query level, and structuring relationships so that downstream measures and charts draw from clean, unambiguous data. The result is a consistent habit of treating data preparation as part of the deliverable, not a preliminary step.

Skills

SQL

  • SQL GROUP BY with COUNT aggregation
  • SQL WHERE clause filtering on boolean flag columns
  • SQL ORDER BY for ranked output

Excel

  • Excel PivotTable with row, column, and value field layout
  • Excel date grouping by month in PivotTables
  • Naira currency formatting in Excel
  • Stacked bar chart creation from PivotTable data

Power BI and Power Query

  • PostgreSQL connection via Power BI Import mode
  • Power Query M code table transformations
  • Table.TransformColumns for unit conversion
  • Inactive relationship configuration in Power BI data model
  • Power Query duplicate filtering and calculated column creation

Retail · Power BI

Connecting Power BI to a PostgreSQL retail database with auto-detected relationships

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

Problem

Nura Ibrahim, a stakeholder at Meridian Retail (simulated retailer), needed a visual analysis of a revenue discrepancy. Before any reporting could begin, the Meridian PostgreSQL database had to be connected to Power BI Desktop with all required tables loaded and relationships in place.

What I did

Using Power Query M code, I connected to the PostgreSQL host and loaded all 8 tables from the retail schema using Import mode, which pulls data into the model rather than querying live. Each table was referenced directly via its schema and item name in PostgreSQL.Database(), keeping the M code consistent and easy to audit. Power BI automatically detected 9 relationships across the model; I verified the sessions-to-customers link was set as inactive to prevent ambiguous filter paths that would corrupt downstream aggregations.

Finding

All 8 required tables loaded correctly in Import mode, with 9 relationships detected and the potentially ambiguous sessions-to-customers relationship correctly marked inactive.

Outcome

Nura received a fully connected data model, including flag columns such as is_duplicate and is_first_order, ready for revenue analysis visuals to be built on top of it.

let
 Source = PostgreSQL.Database("ep-frosty-glade-ab4k8hyw-pooler.eu-west-2.aws.neon.tech", "meridian_retail"),
 retail_categories = Source{[Schema="retail",Item="categories"]}[Data]
in
 retail_categories

This M code pattern, repeated for each of the 8 tables, targets the correct PostgreSQL host and schema and loads each table by name into the Import mode model.

Next step

A useful next step would be to test whether the inactive sessions-to-customers relationship produces different totals when activated temporarily, to confirm the ambiguity concern is real and not just theoretical for this dataset.

  • PostgreSQL connection via Power BI Import mode
  • Power Query M code table transformations
  • Inactive relationship configuration in Power BI data model

Retail · SQL

Counting unique customers by acquisition channel to support investor reporting

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

Problem

Chidi Okafor at Meridian Retail (simulated retailer) needed a clean breakdown of customer volume by acquisition source ahead of an investor conversation. The specific question was which channels were bringing in the most customers, with duplicate records excluded from the count.

What I did

The customers table contains a boolean is_duplicate flag to mark known duplicate records, so I filtered those out in the WHERE clause before any aggregation. Grouping by acquisition_source and applying COUNT(*) then gave an accurate per-channel figure. Sorting descending by the count meant the highest-volume channels appeared first, matching exactly what Chidi described as investor-ready. The query is short but each clause does specific, required work.

Finding

Instagram was the leading acquisition channel with 237 unique customers, and the query returned all 10 channels in descending order for a complete picture.

Outcome

Chidi received a ranked, duplicate-free channel breakdown suitable for direct use in an investor conversation about acquisition strategy.

Next step

It would be worth breaking this down further by channel (online versus offline) within each acquisition source, to see whether Instagram's lead holds across both or is concentrated in one.

  • SQL GROUP BY with COUNT aggregation
  • SQL WHERE clause filtering on boolean flag columns
  • SQL ORDER BY for ranked output

Retail · Excel

Q4 2023 revenue breakdown by order status with stacked bar chart for trend review

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

Problem

Nura Ibrahim at Meridian Retail (simulated retailer) wanted to know whether cancellations were worsening across Q4 2023 or whether October had been an isolated spike. She asked for a PivotTable showing all seven order statuses across October, November, and December, formatted in naira, with a stacked bar chart to visualise the monthly split.

What I did

In a new sheet named Status Breakdown, I set up the PivotTable with status on rows, order_date grouped by month on columns, and Sum of total_naira as the value field, sourcing from the full Orders range. Grouping dates by month inside the PivotTable kept the layout clean without requiring helper columns. Naira currency formatting was applied using the NGN custom format code so values displayed consistently. A stacked bar chart was added directly beneath the PivotTable, referencing the pivot data to show the monthly revenue composition by status.

Finding

The October Grand Total came to NGN 56,876,792.48, and all seven order statuses were present across the three months, giving Nura the full Q4 view she needed for the cancellation trend comparison.

Outcome

Nura received a formatted, chart-backed PivotTable covering all order statuses across Q4 2023, ready for presentation or further review.

Next step

Calculating cancellations and refunds as a percentage of each month's Grand Total, rather than absolute naira values, would make the trend easier to read when monthly total revenue itself varies.

  • Excel PivotTable with row, column, and value field layout
  • Excel date grouping by month in PivotTables
  • Naira currency formatting in Excel
  • Stacked bar chart creation from PivotTable data

Retail · Power BI

Converting order item price columns from kobo to naira in Power Query

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

Problem

Nura Ibrahim at Meridian Retail (simulated retailer) identified that all price columns in the order_items table were stored in kobo, which would produce incorrect results in any downstream revenue or margin calculation. She asked for the unit price, discount, and line total columns to be converted to naira inside Power Query before any measures were built.

What I did

Each of the three columns was transformed using Table.TransformColumns, dividing by 100 and setting the output type to number. This approach handles all three conversions inside a single M step rather than chaining separate column replacements. The renamed columns, unit_price_(#), discount_(#), and line_total_(#), follow the naming convention Nura specified so downstream measures can reference them without ambiguity. Keeping the transformation in Power Query means the conversion happens at load time and does not need to be repeated in DAX.

Finding

All three price columns were correctly converted and renamed, and were confirmed present in the loaded table ready for revenue and margin calculations.

Outcome

Nura's team could build revenue and margin measures directly on the naira columns without any risk of kobo-scale errors propagating into reports.

Next step

It would be worth checking whether the orders table also contains any cent-denominated columns that need the same conversion, to avoid a situation where order-level and item-level revenue figures are on different scales.

  • Power Query M code table transformations
  • Table.TransformColumns for unit conversion
  • PostgreSQL connection via Power BI Import mode

Retail · Power BI

Cleaning the customer dimension in Power Query with duplicate filtering and tier classification

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

Problem

Before Chidi Okafor's customer dashboard could be built at Meridian Retail (simulated retailer), the customers table required preparation. Known duplicate records needed to be removed, and three calculated columns, Full Name, Acquisition Year, and Customer Tier, needed to be added, with tier logic defined as New for 0 to 1 orders, Regular for 2 to 9 orders, and Loyal for 10 or more.

What I did

The task required filtering, column addition, and conditional logic inside a single Power Query pipeline. Removing duplicates via the is_duplicate flag at the Power Query stage meant clean data flowed through to every visual built on the dimension, rather than requiring repeated filtering in each measure. Full Name and Acquisition Year are straightforward derived columns from existing fields. The Customer Tier column required a conditional column or custom column step with the three-tier threshold logic applied to total_orders.

Finding

The submission was accepted at full score, confirming the duplicate filter, derived columns, and tier logic were implemented correctly in Power Query.

Outcome

Chidi received a clean customer dimension with pre-classified tiers, removing the need for duplicate-exclusion logic in individual dashboard measures.

Next step

It would be useful to verify how customers with zero total_orders are distributed across acquisition sources, to check whether the New tier is dominated by a single channel or spread evenly.

  • Power Query duplicate filtering and calculated column creation
  • Power Query M code table transformations
  • PostgreSQL connection via Power BI Import mode

Additional projects

Customer Analytics

  • Monthly customer acquisition trend chart for investor deck · Excel · 78/100
  • Definitive customer count reconciliation · SQL · 72/100
  • Acquisition channel performance summary for investor deck · Excel · 72/100
  • 24 month new customer acquisition trend analysis · SQL · 72/100

Dashboard Development

  • October revenue by order status bar chart · Power BI · 88/100

Data Analysis

  • Order status distribution audit · SQL · 95/100

Data Quality

  • Meridian sales data familiarization and structure review · Excel · 52/100
  • Power Query data cleaning and currency normalization · Power BI · 72/100
  • Customer count validation and deduplication audit · Excel · 88/100

Financial Reporting

  • October 2023 revenue discrepancy investigation · SQL · 95/100
  • Orders table baseline summary for revenue investigation · SQL · 95/100
  • October gross vs net revenue reconciliation in Excel · Excel · 72/100
  • Cancelled order revenue impact analysis · SQL · 95/100