Läsa in faktatabeller

Slutförd

Normalt läser en vanlig informationslagerinläsningsåtgärd in faktatabeller efter dimensionstabeller. Den här metoden säkerställer att de dimensioner som fakta ska vara relaterade till redan finns i informationslagret.

Mellanlagrade faktadata innehåller vanligtvis affärsnycklarna (alternativa) för de relaterade dimensionerna, så din logik för att läsa in data måste leta upp motsvarande surrogatnycklar. När informationslagret långsamt ändrar dimensioner måste lämplig version av dimensionsposten identifieras för att säkerställa att rätt surrogatnyckel används för att matcha händelsen som registrerats i faktatabellen med dimensionens tillstånd när det inträffade.

I många fall kan du hämta den senaste "aktuella" versionen av dimensionen. men i vissa fall kan du behöva hitta rätt dimensionspost baserat på DateTime-kolumner som anger giltighetsperioden för varje version av dimensionen.

I följande exempel förutsätts att dimensionsposterna har en inkrementell surrogatnyckel och att den senast tillagda versionen av en specifik dimensionsinstans (som har det högsta nyckelvärdet) ska användas.

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