Basic Model: Retail Grocery
Store
Process: Retail Sales
Grain: POS line item
Dimensions: Date, Store, Product, Promotion
Facts: Sales Quantity, Sales Dollar Amount,
Cost Dollar Amount, Gross Profit Dollar
Amount.
Model
DATE
DateKey
Attributes
STORE
StoreKey
Attributes
POS FACT
DateKey
ProductKey
StoreKey
PromotionKey
POSTransactionNumber
SalesQuantity
SalesDollarAmount
CostDollarAmount
GrossProfitDollarAmount
PRODUCT
ProductKey
Attributes
PROMOTION
PromotionKey
Attributes
Possible Date Attributes
SQL date
Full date description
Day of week
Day of month
Day of calendar year
Day of fiscal year
Month of calendar year
Month of fiscal year
Calendar Quarter
Fiscal Quarter
Fiscal week
Year
Month
Fiscal year
Holiday ?
Holiday name
Day of holiday
Weekday ?
Selling season
Major event etc.
Possible Product Attributes
Description
SKU number
Brand description
Department
Package type
Package size
Fat content
Diet type
Weight
Weight units of measure
Storage type
Shelf unit type
Shelf width
Shelf height
Shelf depth
etc.
Possible Store Attributes
Store Name
Store Number
Street address
City
County
State
Zip
Manager
District
Region
Floor plan type
Photo processing type
Financial service type
Square footage
Selling square footage
First open date
Last remodel date
etc.
Possible Promotion Attributes
Promotion name
Price reduction type
Promotion media
Ad type
Ad agency
Display type
Coupon type
Promotion cost
Begin date
End date
etc.
Factless Fact Tables
In order to evaluate promotions that might have generated no sales we need another approach.
Promotion could generate another fact table
(or could be considered a fact table in itself).
That new fact table would have no additive attributes.
Conformed Dimensions:
Inventory Snapshot Model
Process: Store inventory
Grain: Daily inventory by product and store
Dimensions: Date, product, store
Fact: quantity-on-hand
Dimensional Model
DATE
DateKey
Attributes
Inventory Fact
ProductKey
DateKey
StoreKey
QuantityOnHand
QuantitySold
ValueAtCost
ValueAtSellingPrice
PRODUCT
ProductKey
Attributes
STORE
StoreKey
Attributes
Note: QuantityOnHand is semi-additive.
It is additive across product and store, but not across date. The other attributes are additive.
Conformed Dimensions
Common dimensions for different processes should be the same.
Note: Dimensions for roll-up or aggregated fact tables my add or eliminate attributes based on the aggregation Where attributes apply, they should mean the same thing.
The Bus Matrix
Date Product Store Promotion Warehouse Vendor Contract Shipper
Process
Retail Sales X
Retail Inventory X
Retail
Deliveries
X
Warehouse
Inventory
X
Warehouse
Deliveries
X
Purchase Orders X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X X X
Slowly Changing Dimensions
Attributes in a dimensional table that change over time. Three approaches
Type 1: overwrite the old value
Type 2: create a new dimensional record
Type 3: create a “previous value” attribute
Examples
Original
ProductKey Description Category
21553 LeapPad Education
Type 1
ProductKey
21553
Description Category
LeapPad Toy
Type 2
ProductKey
21553
44631
Description Category
LeapPad Education
LeapPad Toy
Type 3
ProductKey
21553
Description Category
LeapPad Toy
Hybrid
ProductKey
21335
44631
68122
Description Category
LeapPad Electronics
LeapPad
LeapPad
Electronics
Education
SKU
LP2105
SKU
LP2105
SKU
LP2105
LP2105
OldCat SKU
Education LP2105
OldCat SKU
Education LP2105
Toy LP2105
Electronics LP2105
More about dimensions
Views for dimensions used for different purposes
e.g. StartDate and EndDate
Junk dimensions for flags and miscellaneous categories removed from the fact table
Degenerate dimensions have no attributes
Usually reserved for order number or something similar
Accumulation Snapshot
State change summary that has one row per item.
Access rows on each update.
Multiple Granularities
Product sales vs. Annual quota
Line item cost vs. Order shipping cost