Caricare tabelle dei fatti
In una normale operazione di caricamento del data warehouse, le tabelle dei fatti vengono in genere caricate dopo quelle delle dimensioni. Con questo approccio si ha la certezza che le dimensioni a cui saranno correlati i fatti siano già presenti nel data warehouse.
I dati dei fatti di staging includono in genere le chiavi business (alternative) per le dimensioni correlate e pertanto la logica per caricare i dati deve cercare le chiavi sostitutive corrispondenti. In caso di dimensioni a modifica lenta del data warehouse, è necessario identificare la versione appropriata del record di dimensione per assicurarsi che venga usata la chiave sostitutiva corretta per stabilire la corrispondenza dell'evento registrato nella tabella dei fatti con lo stato della dimensione nel momento in cui si è verificato il fatto.
Nella maggior parte dei casi, è possibile recuperare la versione "corrente" più recente della dimensione, ma talvolta può essere necessario trovare il record di dimensione corretto, in base alle colonne di tipo data e ora che indicano il periodo di validità per ogni versione della dimensione.
Nell'esempio seguente si presuppone che i record di dimensione abbiano una chiave sostitutiva incrementale e che venga usata la versione aggiunta più di recente di un'istanza di dimensione specifica (che avrà il valore di chiave più alto).
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