Structure measured from the live warehouse on every build. Guarantees read from the data contract, never inferred from today's rows. Meaning, ownership and sensitivity from a hand-written semantic layer.
| Column | State | Class | What it means | Type | Null | Values seen | Owner |
|---|---|---|---|---|---|---|---|
dim_customer 18,226 rows · 6 columns | |||||||
customer_sk | no findings | internal | Surrogate key generated by the warehouse build. | BIGINT | 0.0% | 1 to 18226 | growth |
customer_id | no findings | pii | Canonical customer identifier after identity resolution. | VARCHAR | 0.0% | 18,226 distinct (withheld) | growth |
signup_ts | no findings | pii | When the customer registered. | TIMESTAMP | 0.0% | 18,224 distinct (withheld) | growth |
channel | no findings | internal | Acquisition channel the customer arrived through. | VARCHAR | 0.0% | affiliate, email, organic, paid_search, referral, social | growth |
region | no findings | internal | Market the customer belongs to; the SEA markets the platform trades in. The live set is measured on every build and shown beside this row. | VARCHAR | 0.0% | ID, MY, PH, SG, TH, VN | growth |
merged_source_ids | incomplete | internal | How many raw source identities collapsed into this one customer. A count, despite the plural name.Watch out: The name reads like a list of ids; it is an integer count. Rename to merged_source_count at the next warehouse build. Also: a row count of dim_customer answers "how many accounts exist", not "how many people bought" - see active_buyers in the metric registry. | BIGINT | 0.0% | 1, 2 | growth |
dim_date 365 rows · 7 columns | |||||||
date_key | no findings | public | The calendar date. Primary key of the dimension. | DATE | 0.0% | 2025-07-01 to 2026-06-30 | data-platform |
year | incomplete | public | Calendar year. | BIGINT | 0.0% | 2025, 2026 | data-platform |
month | incomplete | public | Calendar month number. | BIGINT | 0.0% | 1, 2, 3, 4, 5, 6, 7, 8 (+4) | data-platform |
month_name | no findings | public | Full English month name. | VARCHAR | 0.0% | April, August, December, February, January, July, June, March (+4) | data-platform |
dow | incomplete | public | Day of week as an integer, counted from Monday. See the values column for the range actually present.Watch out: An integer, not a name. Formatting it for a report is the reader's job. | BIGINT | 0.0% | 0, 1, 2, 3, 4, 5, 6 | data-platform |
is_weekend | no findings | public | True for Saturday and Sunday. | BOOLEAN | 0.0% | False, True | data-platform |
is_november | no findings | public | True during November, the platform's peak trading month. | BOOLEAN | 0.0% | False, True | data-platform |
dim_merchant 400 rows · 6 columns | |||||||
merchant_sk | no findings | internal | Surrogate key generated by the warehouse build. | BIGINT | 0.0% | 1 to 400 | commercial |
merchant_id | no findings | internal | Business key in M#### form, used by every downstream join. | VARCHAR | 0.0% | 400 distinct | commercial |
source_key | no findings | internal | The merchant key as the source extract emits it (MER-#### form), kept for traceability back to the source system. | VARCHAR | 0.0% | 400 distinct | commercial |
category | no findings | internal | Trading category, normalized to the canonical set during ingestion.Watch out: The raw extract carries several spellings of each label. Only the normalized value belongs in a rollup. | VARCHAR | 0.0% | Apparel, Beauty, Electronics, Grocery, Home & Living, Pet Supplies, Sports & Outdoor, Toys & Kids | commercial |
tier | no findings | internal | Commercial tier, which sets the merchant's terms. | VARCHAR | 0.0% | enterprise, premium, standard | commercial |
onboarded_at | no findings | internal | Date the merchant went live on the platform. | DATE | 0.0% | 2022-03-21 to 2025-05-31 | commercial |
dim_product 5,000 rows · 4 columns | |||||||
product_sk | no findings | internal | Surrogate key generated by the warehouse build. | BIGINT | 0.0% | 1 to 5000 | commercial |
product_id | no findings | internal | Business key for the product listing. | VARCHAR | 0.0% | 5,000 distinct | commercial |
merchant_id | no findings | internal | Merchant that owns the product listing. This is a catalogue fact, not a fulfilment fact - use fact_orders.merchant_id for revenue rollups. | VARCHAR | 0.0% | 400 distinct | commercial |
catalog_price | no findings | internal | Current list price held in the catalogue. | DOUBLE | 0.0% | 1.5 to 5379.2 | commercial |
fact_orders 107,841 rows · 16 columns | |||||||
txn_id | no findings | internal | Surrogate identifier for the line item. The true primary key. | VARCHAR | 0.0% | 107,841 distinct | data-platform |
order_id | no findings | internal | The basket the line belongs to. Many lines share one order_id.Watch out: COUNT(*) is a line count, not an order count. Use COUNT(DISTINCT order_id), and apply the delivered filter the metric registry requires for order_count. | VARCHAR | 0.0% | 50,000 distinct | data-platform |
order_ts | no findings | internal | When the order was placed. Stored in UTC.Watch out: Philippines payments arrive in local time upstream and are shifted to UTC during ingestion. Anything reading the raw export sees the bug. | TIMESTAMP | 0.0% | 2025-07-01 08:19:22 to 2026-06-30 22:52:11 | data-platform |
date_key | no findings | internal | Calendar date of the order, the join key into dim_date. | DATE | 0.0% | 2025-07-01 to 2026-06-30 | data-platform |
status | no findings | internal | Fulfilment state of the line. Finance recognizes 'delivered' only.Watch out: Match the casing shown in the values column exactly. A near-miss returns an empty result rather than an error, which reads as a quiet month. | VARCHAR | 0.0% | cancelled, delivered, paid, shipped | data-platform |
customer_id | no findings | pii | Canonical customer after identity resolution. Null means the line could not be attributed to any known customer.Watch out: Nullable by design - orphans are flagged, not dropped. An inner join to dim_customer silently removes them. | VARCHAR | 1.0% | 18,226 distinct (withheld) | data-platform |
merchant_id | no findings | internal | The merchant that fulfilled the line. Authoritative for every merchant rollup on this fact.Watch out: Not guaranteed equal to dim_product.merchant_id, which is the merchant that OWNS the listing. They differ wherever a line is fulfilled by anyone but the listing owner. Join through this column, not that one. | VARCHAR | 0.0% | 400 distinct | data-platform |
product_id | no findings | internal | The product sold. Null where the line references a product in no catalogue. | VARCHAR | 2.5% | 5,000 distinct | data-platform |
qty | no findings | internal | Units of the product sold on this line. | BIGINT | 0.0% | 1, 2, 3 | data-platform |
unit_price | no findings | internal | Price actually charged per unit at the time of sale. | DOUBLE | 0.0% | 1.23 to 5379.2 | data-platform |
catalog_price | no findings | internal | List price of the product as held in the catalogue snapshot.Watch out: A snapshot, not point-in-time. It is the current list price, not the price that was listed on the order date. | DOUBLE | 2.5% | 1.5 to 5379.2 | data-platform |
price_gap | no findings | internal | unit_price minus catalog_price. Non-zero exposes the stale snapshot. | DOUBLE | 2.5% | -968.26 to 0.0 | data-platform |
discount | no findings | internal | Discount applied to the line, as a fraction of gross value.Watch out: 0.2 means twenty percent. It is not a percentage column. | DOUBLE | 0.0% | 0.0, 0.05, 0.1, 0.2 | data-platform |
net_amount | no findings | internal | Merchandise value of the line after discount. Summed over delivered lines this is GMV, what buyers paid merchants. It is NOT platform revenue.Watch out: Platform revenue is net_amount times the take rate, per the metric registry. Reporting net_amount as revenue overstates the P&L line by about 9x. | DOUBLE | 0.0% | 0.98 to 16137.6 | data-platform |
is_orphan_product | no findings | internal | True where product_id resolves to no row in dim_product. | BOOLEAN | 0.0% | False, True | data-platform |
is_orphan_customer | no findings | internal | True where customer_id resolves to no row in dim_customer. | BOOLEAN | 0.0% | False, True | data-platform |