The Power BI Fellowship
Datasets & Labs · Library

Datasets and practice lab

Three tiers of practice data (small learning datasets, messy scenario files and a 100k–50M row enterprise generator) with each dataset's type, grain, scale, intended use and planted problems.

Data AnalystBI DeveloperSenior BI DeveloperBI EngineerPower BI DesktopSQL enginePythonChecked 2 Oct 2026
On this page (6)

Three tiers

TierSizePurposeWhere
Learning4–100 rows per tableSee every row, check every answer by eye, learn the concept without noiseThe 14 Northwind datasets below
ScenarioThousands of rows, realistic messReal problems: duplicates, late data, currencies, schema changes, conflicting definitionsCompany pack and scenario files used by Experience Mode and the tracks
Enterprise100 thousand to 50 million rowsDesign and performance: cardinality, partitions, incremental refresh, aggregationsGenerated on your machine

Every dataset is generated from a fixed seed, so every learner gets identical numbers and every expected result on this site can be checked automatically.

Learning datasets

All 14 tables describe one fictional company, Northwind Outdoors, and join to each other, so any exercise can grow into a full model. "Planted problems" are there to teach you something; the lessons that use them tell you what to look for.

DimDate

Type
Date dimension
Grain
One day
Scale
90 rows · 12 columns
Used for
Time intelligence; replacing it with a full DAX date table
Planted problems
Deliberately too short: only 90 days

Preview and download

DimProduct

Type
Dimension
Grain
One product
Scale
24 rows · 9 columns
Used for
Margin, category slicing, discontinued products
Planted problems
None: a clean table

Preview and download

DimCustomer

Type
Dimension
Grain
One customer
Scale
30 rows · 9 columns
Used for
Segments, cohorts by join date, loyalty tiers
Planted problems
None: a clean table

Preview and download

DimRegion

Type
Dimension
Grain
One sales region
Scale
4 rows · 6 columns
Used for
Region filters, targets, RLS
Planted problems
None: a clean table

Preview and download

DimEmployee

Type
Parent-child dimension
Grain
One employee
Scale
18 rows · 8 columns
Used for
PATH hierarchies, RLS by org position
Planted problems
None: a clean table

Preview and download

FactSales

Type
Transaction fact
Grain
One order line
Scale
100 rows · 12 columns
Used for
Modeling, DAX, RLS, role-playing dates
Planted problems
Returns as negative quantities; OrderDate ≠ ShipDate

Preview and download

FactBudget

Type
Periodic fact (plan)
Grain
Month × region × category
Scale
48 rows · 6 columns
Used for
Budget vs actual at a different grain
Planted problems
None: a clean table

Preview and download

FactInventory

Type
Periodic snapshot fact
Grain
Product × week (each product held in one warehouse)
Scale
80 rows · 5 columns
Used for
Semi-additive measures
Planted problems
Summing across weeks gives a wrong answer by design

Preview and download

RawOrdersExport (messy)

Type
Raw export
Grain
One order line, as exported
Scale
30 rows · 9 columns
Used for
Power Query cleaning
Planted problems
Header junk, mixed date formats, currency symbols, trailing spaces, inconsistent casing, a total row

Preview and download

SurveyWide (unpivot)

Type
Wide (pivoted) table
Grain
One row per store, one column per month
Scale
12 rows · 7 columns
Used for
Unpivot
Planted problems
The wrong shape for analysis, on purpose

Preview and download

UserRegionMapping (RLS)

Type
Security mapping
Grain
User × region
Scale
12 rows · 3 columns
Used for
Dynamic RLS
Planted problems
Multi-region users and one ALL user

Preview and download

ExchangeRates

Type
Rate table
Grain
Currency × week (Mondays)
Scale
39 rows · 3 columns
Used for
Last-known-rate currency conversion
Planted problems
None: a clean table

Preview and download

CustomerTargets (many-to-many)

Type
Target table
Grain
Quarter × segment × loyalty tier
Scale
20 rows · 4 columns
Used for
Relating facts at a non-unique grain
Planted problems
None: a clean table

Preview and download

WebEvents (sessions)

Type
Event fact
Grain
One click event
Scale
100 rows · 7 columns
Used for
Funnels, sessions, window functions
Planted problems
None: a clean table

Preview and download

Scenario files

Larger files used by the SQL, warehousing, testing and automation tracks and by the Experience Mode scenarios. The company pack is a realistic order system (orders, lines, returns, customers, products, regions and exchange rates) with real-world defects such as a re-exported batch of duplicate lines.

FileRowsWhat it is
orders.csv3715Company pack: one row per order header (Jan 2025 to Mar 2026).
order_lines.csv7252Company pack: order lines in the order currency. Contains the March re-export defect.
returns.csv343Company pack: returns linked to order lines, to 10 Apr 2026.
customers.csv421Company pack: customers with segment and home region.
products.csv24Company pack: the 24 products with cost and list price.
regions.csv5Company pack: five sales regions and their currency.
fx_rates.csv16Company pack: monthly average USD per EUR.
customer_changes.csv200CRM change feed for 120 customers: one row per effective change. Build SCD type 2 from it.
early_orders.csv4Orders that arrive before their customer exists in the dimension.
order_events.csv907Order lifecycle events (Placed, Picked, Shipped, Delivered) for March 2026, in UTC.
web_sessions_local.csv240Web sessions logged in local time with their UTC offset.
mini_sales.csv8Eight hand-checkable sales lines for known-input, known-output model tests.
slow_query.sqlThe 22-minute source query behind FactSales, with its execution plan summary.
groups.jsonMock GET /groups response: workspaces.
datasets.jsonMock datasets (semantic models) across all workspaces.
reports.jsonMock reports across all workspaces.
refreshes.jsonMock refresh history, one week per dataset.
activity_views.jsonMock activity events (ViewReport) for 90 days.

Enterprise scale

Small data teaches the logic; big data teaches the design. Generate realistic sales data with skewed customers, late-arriving rows, duplicates, several currencies and slowly changing customers, on your own machine with Node.js:

bash
node tools/generate-enterprise-data.js --rows 1000000
RowsWhat it teaches
100 thousandEverything still works; habits matter more than speed
1 millionColumn cardinality and model size become visible in VertiPaq Analyzer
10 millionIncremental refresh and query folding stop being optional
50 millionAggregations, partitions and capacity limits

The generator's defects are configurable and counted exactly, so you can check whether your cleaning caught all of them. See the generator guide.

Labs: break it, then fix it

The best way to understand a failure is to cause it on purpose:

LabBreakThen
Double countingAppend the March file twiceFind it with a row count per key; fix with a distinct key
Orphan factsDelete two products from DimProductFind the blank row; count orphans with an anti join
Bidirectional chaosSet every relationship to BothWatch a total change; explain why
FoldingAdd an index column before the date filterSee View Native Query disappear; move the step
RLS leakAdd a table not related to the security tableShow that a restricted user sees all of it
MemoryAdd a timestamp column with seconds to the 10M-row tableMeasure the size in VertiPaq Analyzer; split date and time

The testing track's Build it, break it topic turns these into graded assignments.

Scenarios by stage

TicketScenarioStageSkills
BI-1042Executive sales dashboardData Analystpower-query, modeling, dax, visuals, testing, communication
BI-1057Finance disputes the dashboardData Analystdax, modeling, testing, communication, power-query
REQ-301Four requests, zero requirementsData Analystcommunication, modeling, governance
UAT-017"The Region total doesn't match Excel"Data Analysttesting, modeling, communication
INC-2031A regional manager can see other regions' payrollBI Developersecurity, modeling, testing, governance, communication
BI-1103Three models, three RevenuesBI Developermodeling, governance, dax, service, communication, architecture
GOV-044Usage dropped 70%. Retire it?BI Developergovernance, service, communication
CR-118Four change requests to a working modelBI Developermodeling, dax, security, testing, communication
INC-2044The executive dashboard takes 18 secondsSenior BI Developerperformance, dax, modeling, testing, communication
INC-2071The board pack refresh failed at 06:17Senior BI Developerservice, power-query, communication, governance, testing
INC-2079Hotfix, rollback or wait?Senior BI Developerdeployment, testing, communication, architecture
COMM-12Explain it twiceSenior BI Developercommunication, performance
PR-214Two developers, one measureBI Engineerdeployment, testing, dax, communication
INC-2058Test is right, Production is wrongBI Engineerdeployment, service, testing, automation
PR-231Review Sam's pull requestBI Engineerdeployment, modeling, dax, performance, communication
ARCH-009Should Northwind move to Fabric, and how?BI Architect / Leadarchitecture, fabric, performance, governance, communication
ARCH-012Architecture review: 80 reports, 19 models, no ownerBI Architect / Leadarchitecture, governance, security, communication, service
GOV-050Governance maturity assessmentBI Architect / Leadgovernance, architecture, security

Something missing or out of date? Open an issue or edit content/toolkit/guides/practice-lab.md.