Загрузка таблиц фактов
Как правило, обычная операция загрузки в хранилище данных загружает сначала таблицы измерений, а затем таблицы фактов. Этот подход гарантирует, что измерения, к которым будут связаны факты, уже присутствуют в хранилище данных.
Промежуточные данные фактов обычно содержат альтернативные ключи (бизнес-ключи) для связанных измерений, поэтому логика загрузки данных должна проверять соответствующие суррогатные ключи. При медленно меняющемся измерении хранилища данных необходимо определить соответствующую версию записи измерения, чтобы убедиться, что правильный суррогатный ключ используется для сопоставления события, записанного в таблице фактов с состоянием измерения в момент возникновения факта.
Во многих случаях можно получить последнюю "текущую" версию измерения; но в некоторых случаях может потребоваться найти правильную запись измерения на основе столбцов DateTime, указывающих период действия для каждой версии измерения.
В следующем примере предполагается, что записи измерений содержат суррогатный ключ с приращением и вам нужно использовать самую последнюю добавленную версию конкретного экземпляра измерения (с наибольшим значением ключа).
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