Ładowanie tabel faktów
Zazwyczaj zwykła operacja ładowania magazynu danych ładuje tabele faktów po tabelach wymiarów. Takie podejście zapewnia, że wymiary, z którymi będą powiązane fakty, są już obecne w magazynie danych.
Dane faktów etapowych zwykle zawierają klucze biznesowe (alternatywne) dla powiązanych wymiarów, więc logika ładowania danych musi wyszukać odpowiednie klucze zastępcze. Gdy magazyn danych powoli zmienia wymiary, należy zidentyfikować odpowiednią wersję rekordu wymiaru, aby upewnić się, że prawidłowy klucz zastępczy jest używany do dopasowania zdarzenia zarejestrowanego w tabeli faktów ze stanem wymiaru w momencie wystąpienia faktu.
W wielu przypadkach można pobrać najnowszą "bieżącą" wersję wymiaru; ale w niektórych przypadkach może być konieczne znalezienie odpowiedniego rekordu wymiaru na podstawie kolumn DateTime, które wskazują okres ważności dla każdej wersji wymiaru.
W poniższym przykładzie przyjęto założenie, że rekordy wymiarów mają przyrostowy klucz zastępczy i że powinna zostać użyta ostatnio dodana wersja określonego wystąpienia wymiaru (które będzie mieć najwyższą wartość klucza).
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