Carga de tablas de hechos

Completado

Normalmente, una operación de carga de almacenamiento de datos normal carga las tablas de hechos después de las tablas de dimensiones. De esta forma, se garantiza que las dimensiones con las que se relacionarán los hechos ya están presentes en el almacenamiento de datos.

Los datos de hechos almacenados provisionalmente suelen incluir las claves empresariales (alternativas) para las dimensiones relacionadas, por lo que la lógica para cargar los datos debe buscar las claves suplentes correspondientes. En el caso de las dimensiones de variación lenta del almacenamiento de datos, se debe identificar la versión adecuada del registro de dimensión para asegurarse de que se usa la clave suplente correcta de forma que coincida con el evento registrado en la tabla de hechos con el estado de la dimensión en el momento en que se produjo el hecho.

En la mayoría de los casos, puede recuperar la versión "actual" más reciente de la dimensión; pero, en algunos casos, es posible que tenga que encontrar el registro de dimensión correcto en función de las columnas DateTime que indican el período de validez de cada versión de la dimensión.

En el ejemplo siguiente se supone que los registros de dimensión tienen una clave suplente incremental y que se debe usar la versión agregada más recientemente de una instancia de dimensión específica (que tendrá el valor de clave más 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