runtime
73 / 88

lesson 73 Warehouse & reporting projects · advanced

Gold: dimensions, facts & quality gates

Build dimensions and facts with checks for trustworthy data.

the idea

Gold presents business entities and measures. A fact row is one sales line; its surrogate keys come from looking up the existing dimensions, not from numbering rows again. Quality gates reject lines with unknown keys, non-numeric or non-positive quantities and invalid dates, and the measure is recomputed by a declared rule (quantity × catalog price).

Dataset: Retail

The tables the challenges use, with their first 6 rows. Under each column name: the kind of value it holds, and which table it links to.

dim_customer5 columns · 848 rows
customer_keynumber · unique idcustomer_idtextcontact_nametextcountrytextregiontext
112347Arthur TurnerIcelandEurope
212353Harry TurnerBahrainRest of World
312359Theo TurnerCyprusEurope
412373Harry HillAustriaEurope
512374Emily HillAustriaEurope
612384Ava MooreSwitzerlandEurope
customer_keynumber · unique id
1
customer_idtext
12347
contact_nametext
Arthur Turner
countrytext
Iceland
regiontext
Europe
customer_keynumber · unique id
2
customer_idtext
12353
contact_nametext
Harry Turner
countrytext
Bahrain
regiontext
Rest of World
customer_keynumber · unique id
3
customer_idtext
12359
contact_nametext
Theo Turner
countrytext
Cyprus
regiontext
Europe
customer_keynumber · unique id
4
customer_idtext
12373
contact_nametext
Harry Hill
countrytext
Austria
regiontext
Europe
customer_keynumber · unique id
5
customer_idtext
12374
contact_nametext
Emily Hill
countrytext
Austria
regiontext
Europe
customer_keynumber · unique id
6
customer_idtext
12384
contact_nametext
Ava Moore
countrytext
Switzerland
regiontext
Europe

first 6 of 848 rows · your queries use all of them

dim_product5 columns · 4,902 rows
product_keynumber · unique idproduct_idtextdescriptiontextcategorytextpricedecimal
110002INFLATABLE POLITICAL GLOBEOther Gifts0.85
210002RROBOT PENCIL SHARPNERStationery & Gift Wrap5.17
310080GROOVY CACTUS INFLATABLEOther Gifts0.39
410109BENDY COLOUR PENCILSStationery & Gift Wrap0.42
510120DOGGY RUBBEROther Gifts0.21
610123CHEARTS WRAPPING TAPEStationery & Gift Wrap0.65
product_keynumber · unique id
1
product_idtext
10002
descriptiontext
INFLATABLE POLITICAL GLOBE
categorytext
Other Gifts
pricedecimal
0.85
product_keynumber · unique id
2
product_idtext
10002R
descriptiontext
ROBOT PENCIL SHARPNER
categorytext
Stationery & Gift Wrap
pricedecimal
5.17
product_keynumber · unique id
3
product_idtext
10080
descriptiontext
GROOVY CACTUS INFLATABLE
categorytext
Other Gifts
pricedecimal
0.39
product_keynumber · unique id
4
product_idtext
10109
descriptiontext
BENDY COLOUR PENCILS
categorytext
Stationery & Gift Wrap
pricedecimal
0.42
product_keynumber · unique id
5
product_idtext
10120
descriptiontext
DOGGY RUBBER
categorytext
Other Gifts
pricedecimal
0.21
product_keynumber · unique id
6
product_idtext
10123C
descriptiontext
HEARTS WRAPPING TAPE
categorytext
Stationery & Gift Wrap
pricedecimal
0.65

first 6 of 4,902 rows · your queries use all of them

bronze_sales6 columns · 2,526 rows
row_idnumber · unique idcustomer_idtextproduct_idtextquantitytextsalestextorder_datedate
12302715687233012439.602011-12-01
1230281568722623317.852011-12-01
1230291568720970415.002011-12-01
1230301568723562617.342011-12-01
1230311568771477415.802011-12-01
123032 15687 23407219.902011-12-01
row_idnumber · unique id
123027
customer_idtext
15687
product_idtext
23301
quantitytext
24
salestext
39.60
order_datedate
2011-12-01
row_idnumber · unique id
123028
customer_idtext
15687
product_idtext
22623
quantitytext
3
salestext
17.85
order_datedate
2011-12-01
row_idnumber · unique id
123029
customer_idtext
15687
product_idtext
20970
quantitytext
4
salestext
15.00
order_datedate
2011-12-01
row_idnumber · unique id
123030
customer_idtext
15687
product_idtext
23562
quantitytext
6
salestext
17.34
order_datedate
2011-12-01
row_idnumber · unique id
123031
customer_idtext
15687
product_idtext
71477
quantitytext
4
salestext
15.80
order_datedate
2011-12-01
row_idnumber · unique id
123032
customer_idtext
15687
product_idtext
23407
quantitytext
2
salestext
19.90
order_datedate
2011-12-01

first 6 of 2,526 rows · your queries use all of them

worked example

Run these steps in order to see the idea before you write your own query. The step marked “the pattern” is what the challenges ask for. Running the example does not count toward progress.

  1. Count sales with unknown products. Run this. Lines whose product_id does not match dim_product are rejects—inner joins to the dimension drop them unless you count them first.the pattern

    example.sql
    SELECT COUNT(*) AS unknown_products
    FROM bronze_sales b
    LEFT JOIN dim_product p ON p.product_id = TRIM(b.product_id)
    WHERE p.product_key IS NULL;
  2. Preview dimension keys for facts. Gold facts must reuse customer_key and product_key from these tables, not invent new ids from Bronze row numbers.

    step-2.sql
    SELECT customer_key, customer_id, country
    FROM dim_customer
    LIMIT 10;

common mistake

An inner join to the dimensions is itself a quality gate: lines with unknown customers or products disappear. Count the rejects so the batch reconciles.

challenge 1

Create TEMP table built_fact from bronze_sales: sale_key = row_id, customer_key and product_key from the dimensions (trimmed natural keys), quantity as an integer, sales = quantity × dim_product.price rounded to 2, and order_date.

Accept only rows with all-digit positive quantities and valid YYYY-MM-DD dates.

Return sale_key, customer_key, product_key, quantity, sales and order_date.

what to return

Columns
sale_keycustomer_keyproduct_keyquantitysalesorder_date in this order
Rows
any order
Also checked
TEMP / table changes from your script
challenge-1.sql
 
To master this lesson, solve both challenges without hints and pass the concept check. 3 of 3 to go.
Gold: dimensions, facts & quality gates — Warehouse & reporting projects · Runtime