Läsa in faktatabeller
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