offdataai
Supply Chain & Logistics · data model template

Supply Chain Analytics data model

Kimball warehouse for supply chain: an accumulating order-fulfillment snapshot tracking order->pick->ship->deliver milestones, a daily inventory periodic snapshot, and a transaction-grain shipment fact over conformed product/warehouse/supplier/customer/carrier dimensions.

Supply chain analytics covering the order-to-deliver fulfillment lifecycle, daily inventory positions across distribution centers, and outbound shipments — a Kimball star schema with conformed product (SCD2), warehouse, supplier, customer, and carrier dimensions for perfect-order, fill-rate, and on-time-in-full reporting. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballSupply Chain & LogisticsSOXC-TPAT
13
tables
144
columns
21
relationships
5
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

order_fulfillmentinventorytransportationprocurementconformed_dimensions

Design decisions

  • Accumulating snapshot for order fulfillment

    An order line passes well-defined milestones (order, pick, ship, deliver) with measurable lags; an accumulating snapshot lets a single row be progressively updated to support cycle-time and OTIF analysis.

  • Daily inventory snapshot separate from movements

    On-hand stock is semi-additive and must be reported daily per product/warehouse for days-of-supply and stockout-risk independent of transaction volume.

  • Product modeled as SCD2

    Product attributes such as category, packaging, and hazmat class change over time and must be tied to the version in effect when each order or shipment occurred.

  • Carrier as its own conformed dimension

    Carrier performance (on-time %, mode, service level) is analyzed across both fulfillment and shipment processes, so it is conformed rather than degenerate.

Tables in the Supply Chain Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (4)

fct_order_fulfillment

Grain: one row per order line (accumulating snapshot order->pick->ship->deliver)

Accumulating snapshot of the order-to-deliver fulfillment lifecycle.

ColumnTypeKeys
order_fulfillment_keybigintPK
order_date_keybigint
product_keybigint
warehouse_keybigint
customer_keybigint
carrier_keybigint
order_status_keybigint
pick_date_keybigint
ship_date_keybigint
deliver_date_keybigint
order_numbervarchar
order_line_numbervarchar
ordered_quantityinteger
shipped_quantityinteger
delivered_quantityinteger
line_amountdecimal
order_to_pick_hoursdecimal
pick_to_ship_hoursdecimal
ship_to_deliver_hoursdecimal
is_on_timeboolean
is_in_fullboolean

fct_inventory_snapshot

Grain: one row per product per warehouse per day (periodic snapshot)

Daily inventory position snapshot — semi-additive stock levels.

ColumnTypeKeys
date_keybigint
product_keybigint
warehouse_keybigint
on_hand_quantityinteger
available_quantityinteger
allocated_quantityinteger
in_transit_quantityinteger
safety_stock_quantityinteger
reorder_pointinteger
inventory_valuedecimal
days_of_supplydecimal
is_below_safety_stockboolean

fct_shipment

Grain: one row per shipment line

Transaction-grain shipment fact for transportation analytics.

ColumnTypeKeys
shipment_keybigintPK
ship_date_keybigint
product_keybigint
warehouse_keybigint
customer_keybigint
carrier_keybigint
ship_mode_keybigint
delivery_date_keybigint
shipment_numbervarchar
tracking_numbervarchar
shipped_quantityinteger
shipment_weight_kgdecimal
freight_costdecimal
declared_valuedecimal
transit_dayssmallint
is_damagedboolean

fct_purchase_order

Grain: one row per purchase order line (accumulating snapshot)

Accumulating snapshot of inbound procurement from order to receipt.

ColumnTypeKeys
purchase_order_keybigintPK
order_date_keybigint
product_keybigint
supplier_keybigint
warehouse_keybigint
uom_keybigint
ship_mode_keybigint
expected_receipt_date_keybigint
actual_receipt_date_keybigint
po_numbervarchar
po_line_numbervarchar
ordered_quantityinteger
received_quantityinteger
unit_pricedecimal
line_amountdecimal
promised_lead_time_daysinteger
actual_lead_time_daysinteger
is_on_time_receiptboolean
is_complete_receiptboolean

Dimension tables (6)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_weeksmallint
month_numbersmallint
quartersmallint
yearsmallint
fiscal_periodvarchar
is_business_dayboolean
is_holidayboolean

dim_product

Grain: one row per product per SCD2 version

SCD type 2

ColumnTypeKeys
product_keybigintPK
product_idvarcharBK
skuvarchar
product_namevarchar
product_categoryvarchar
product_subcategoryvarchar
brandvarchar
unit_of_measurevarchar
unit_weight_kgdecimal
unit_volume_m3decimal
hazmat_classvarchar
is_perishableboolean
shelf_life_daysinteger
is_activeboolean

dim_warehouse

Grain: one row per warehouse / DC

ColumnTypeKeys
warehouse_keybigintPK
warehouse_idvarcharBK
warehouse_namevarchar
warehouse_typevarchar
address_line1varchar
cityvarchar
statevarchar
countryvarchar
postal_codevarchar
regionvarchar
total_capacity_unitsbigint

dim_supplier

Grain: one row per supplier per SCD2 version

SCD type 2

ColumnTypeKeys
supplier_keybigintPK
supplier_idvarcharBK
supplier_namevarchar
supplier_tiervarchar
countryvarchar
preferred_carriervarchar
contact_emailvarcharPII
contact_phonevarcharPII
lead_time_daysinteger
quality_ratingdecimal
is_approvedboolean

dim_customer

Grain: one row per ship-to customer per SCD2 version

SCD type 2

ColumnTypeKeys
customer_keybigintPK
customer_idvarcharBK
customer_namevarcharPII
customer_segmentvarchar
ship_to_addressvarcharPII
cityvarchar
statevarchar
countryvarchar
postal_codevarcharPII
sales_regionvarchar

dim_carrier

Grain: one row per freight carrier

ColumnTypeKeys
carrier_keybigintPK
carrier_idvarcharBK
carrier_namevarchar
carrier_modevarchar
scac_codevarchar
service_levelvarchar
on_time_pctdecimal

Lookup tables (3)

dim_order_status

Grain: one row per fulfillment status

ColumnTypeKeys
order_status_keybigintPK
status_codevarcharBK
status_namevarchar
status_groupvarchar

dim_uom

Grain: one row per unit of measure

ColumnTypeKeys
uom_keybigintPK
uom_codevarcharBK
uom_namevarchar
uom_typevarchar
base_conversion_factordecimal

dim_ship_mode

Grain: one row per shipping mode

ColumnTypeKeys
ship_mode_keybigintPK
ship_mode_codevarcharBK
ship_mode_namevarchar
service_classvarchar
is_expeditedboolean

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_order_fulfillment.order_date_key → dim_date (many-to-one)
  • fct_order_fulfillment.product_key → dim_product (many-to-one)
  • fct_order_fulfillment.warehouse_key → dim_warehouse (many-to-one)
  • fct_order_fulfillment.customer_key → dim_customer (many-to-one)
  • fct_order_fulfillment.carrier_key → dim_carrier (many-to-one)
  • fct_order_fulfillment.order_status_key → dim_order_status (many-to-one)
  • fct_inventory_snapshot.date_key → dim_date (many-to-one)
  • fct_inventory_snapshot.product_key → dim_product (many-to-one)
  • fct_inventory_snapshot.warehouse_key → dim_warehouse (many-to-one)
  • fct_shipment.ship_date_key → dim_date (many-to-one)
  • fct_shipment.product_key → dim_product (many-to-one)
  • fct_shipment.warehouse_key → dim_warehouse (many-to-one)
  • fct_shipment.customer_key → dim_customer (many-to-one)
  • fct_shipment.carrier_key → dim_carrier (many-to-one)
  • fct_shipment.ship_mode_key → dim_ship_mode (many-to-one)
  • fct_purchase_order.order_date_key → dim_date (many-to-one)
  • fct_purchase_order.product_key → dim_product (many-to-one)
  • fct_purchase_order.supplier_key → dim_supplier (many-to-one)
  • fct_purchase_order.warehouse_key → dim_warehouse (many-to-one)
  • fct_purchase_order.uom_key → dim_uom (many-to-one)
  • fct_purchase_order.ship_mode_key → dim_ship_mode (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time