Free sample · dbt + SQL portfolio project

Sports Equipment Pro Shop.

E-commerce orders, inventory, and revenue modeling project.

What a full portfolio project brief looks like on the platform. Business scenario, source tables, expected outputs, skills practiced, and what to ship to your GitHub. This is one of 22 projects in the course — the rest follow the same format.

The scenario

You just joined the data team.

Sports Equipment Pro Shop is a 40-person retail company selling soccer, basketball, and running gear through three channels: a direct-to-consumer website, six brick-and-mortar stores, and a wholesale line for teams and schools.

The analyst team has been hand-writing SQL against the raw operational database for two years. As of this week, you're the company's first analytics engineer. The CFO wants one daily-revenue dashboard the executive team can trust, and the head of merchandising wants a top-products-by-category report updated weekly. Your job is to build the warehouse layer that makes both possible — cleanly, with tests, and in a way the analysts can self-serve from.

Source tables

What you're given.

Four tables in the operational database. Realistic — like what you'd actually see joining a real company. Your dbt project sources from here.

Table
orders
  • order_idbigintPK
  • customer_idbigintFK → customers
  • order_datedate
  • channelvarcharweb | retail | wholesale
  • statusvarcharplaced | shipped | canceled | returned
Table
order_items
  • order_idbigintFK → orders
  • product_idbigintFK → products
  • quantityint
  • unit_pricedecimal
  • discountdecimal0–1
Table
products
  • product_idbigintPK
  • categoryvarchar
  • namevarchar
  • current_inventoryint
  • list_pricedecimal
Table
customers
  • customer_idbigintPK
  • signup_datedate
  • segmentvarcharindividual | team
  • regionvarchar
Expected outputs

What you'll build.

A small star schema with two fact tables and two dimensions — enough complexity to demonstrate the patterns hiring managers screen for, not so much that the project drags into a month-long slog.

  • fct_order_items

    Grain: one row per item per order. Includes net revenue (unit_price × quantity × (1 − discount)) and links to product and customer dimensions.

  • fct_daily_revenue

    Grain: one row per day per channel. Pre-aggregated for the dashboard so it doesn't scan the full fact table on every load.

  • dim_products

    Slowly-changing dimension (type 2) tracking changes to product category and list_price. Includes is_current flag.

  • dim_customers

    One row per customer with first_order_date, lifetime_orders, lifetime_revenue, and last_active_date pre-computed.

Skills practiced

What you'll be able to demonstrate.

  • Star-schema design with fact + dimension tables
  • Type-2 slowly-changing dimensions in dbt snapshots
  • Aggregating with window functions for cohort metrics
  • dbt tests: unique, not_null, relationships, accepted_values
  • Project structure: sources → staging → intermediate → marts
  • Producing a published dbt docs site as the deliverable
What you ship

The deliverables.

  1. 01

    GitHub repository

    A dbt project with the full sources → marts layering, configured tests, generated docs, and a clear README. Bonus points for a clean commit history (one logical commit per layer).

  2. 02

    Dashboard or notebook

    One screenshot or one published Looker Studio / Streamlit / Hex dashboard showing the top 3 outputs (daily revenue, top products by category, customer cohort retention).

  3. 03

    Project README

    Scenario, architecture diagram (source → staging → marts), how to run locally, what's tested, what you'd do differently. Two pages max — hiring managers won't read more.

How you'll talk about it in an interview
"I built an end-to-end dbt project on a fictional e-commerce dataset. Sources, staging, intermediate, and mart layers — with a star schema modeling orders, line items, products, and customers. Type-2 SCDs on products. Daily revenue and cohort retention models in the marts. Full test coverage, published dbt docs. The thing I'd change is adding incremental materialization on the orders fact — it's a full refresh today."

Open the full project.

This brief is one of 22 projects on the platform. The full version includes the dataset, step-by-step build, worked solution, and walkthrough of the dbt models, tests, and docs.

Also see

Want to see a sample lesson?

See what one of the 175 course lessons looks like — same prose + checkpoint format used throughout the curriculum.