Carregar tabelas de fatos

Concluído

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