Carregar tabelas de fatos
Normalmente, uma operação de carga de data warehouse regular carrega tabelas de fatos após tabelas de dimensão. Esta abordagem garante que as dimensões com as quais os factos estarão relacionados já estão presentes no armazém de dados.
Os dados de fatos em estágios geralmente incluem as chaves de negócios (alternativas) para as dimensões relacionadas, portanto, sua lógica para carregar os dados deve procurar as chaves substitutas correspondentes. Quando o data warehouse muda lentamente de dimensões, a versão apropriada do registro de dimensão deve ser identificada para garantir que a chave substituta correta seja usada para corresponder o evento registrado na tabela de fatos com o estado da dimensão no momento em que o fato ocorreu.
Em muitos casos, você pode recuperar a versão "atual" mais recente da dimensão; mas, em alguns casos, talvez seja necessário encontrar o registro de dimensão correto com base nas colunas DateTime que indicam o período de validade para cada versão da dimensão.
O exemplo a seguir pressupõe que os registros de dimensão tenham uma chave substituta incremental e que a versão adicionada mais recentemente de uma instância de dimensão específica (que terá o maior valor de chave) deva 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