Carregar tabelas de fatos
Normalmente, uma operação de carregamento de data warehouse regular carrega tabelas de fatos após tabelas de dimensões. Essa abordagem garante que as dimensões às quais os fatos estarão relacionados já estejam presentes no data warehouse.
Os dados de fatos preparadps geralmente incluem as chaves de negócios (alternadas) para as dimensões relacionadas, portanto, sua lógica para carregar os dados deve procurar as chaves alternativas correspondentes. No caso das dimensões variáveis lentas, a versão apropriada do registro de dimensão precisa ser identificada, a fim de garantir que a chave alternativa correta seja usada para fazer a correspondência entre o evento registrado na tabela de fatos e o estado da dimensão no momento em que o fato ocorreu.
Em muitos casos, você pode recuperar a última versão "atual" da dimensão, mas, em alguns casos, talvez precise encontrar o registro de dimensão certo de acordo com as colunas DateTime que indicam o período de validade de cada versão da dimensão.
O exemplo a seguir pressupõe que os registros de dimensão tenham uma chave alternativa incremental e que a versão adicionada mais recentemente de uma instância de dimensão específica (que terá o valor de chave mais alto) deve ser usada.
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