ファクト テーブルを読み込む
一般に、通常のデータ ウェアハウスの読み込み操作では、ディメンション テーブルの後でファクト テーブルが読み込まれます。 この方法により、ファクトが関連付けられるディメンションがデータ ウェアハウスに既に存在することが保証されます。
ステージングされたファクト データには、通常、関連するディメンションのビジネス (代替) キーが含まれるため、データを読み込むロジックでは、対応する代理キーを検索する必要があります。 データ ウェアハウスでディメンションが緩やかに変化する場合は、ファクト テーブルに記録されたイベントと、ファクトが発生した時点のディメンションの状態を一致させるために、正しい代理キーが使われるよう、適切なバージョンのディメンション レコードを識別する必要があります。
多くの場合、ディメンションの最新の "現在の" バージョンを取得することができます。ただし、場合によっては、ディメンションの各バージョンの有効期間を示す DateTime 列に基づいて、正しいディメンション レコードを見つけることが必要になる場合があります。
次の例では、ディメンション レコードに増分代理キーがあり、特定のディメンション インスタンスの最後に追加されたバージョン (キー値が最も大きいもの) を使う必要があることが、想定されています。
INSERT INTO dbo.FactSales
SELECT (SELECT MAX(DateKey)
FROM dbo.DimDate
WHERE FullDateAlternateKey = stg.OrderDate) AS OrderDateKey,
(SELECT MAX(CustomerKey)
FROM dbo.DimCustomer
WHERE CustomerAlternateKey = stg.CustNo) AS CustomerKey,
(SELECT MAX(ProductKey)
FROM dbo.DimProduct
WHERE ProductAlternateKey = stg.ProductID) AS ProductKey,
(SELECT MAX(StoreKey)
FROM dbo.DimStore
WHERE StoreAlternateKey = stg.StoreID) AS StoreKey,
OrderNumber,
OrderLineItem,
OrderQuantity,
UnitPrice,
Discount,
Tax,
SalesAmount
FROM dbo.StageSales AS stg