Возможно, я неправильно вас проблемой, однако:
Таблица фактов может или не может иметь автоинкрементный ПК, как правило, ПК в таблице фактов является составным из нескольких FKS ссылающихся таблиц измерений ,
Таблица размеров должна иметь автоинкрементный ПК.
Новый клиент должен «приземлиться» в таблицу размеров клиента до того, как факт транзакции достигнет DW (или, по крайней мере, таблицы фактов).
Таблица размеров должна иметь BusinessKey, который однозначно идентифицирует клиентскую электронную почту, полное имя + контактный или аналогичный.
В строке входящей транзакции должно быть также поле CustomerKey клиента - так мы идентифицируем клиента.
Используйте BusinessKey для поиска клиента PrimaryKey из таблицы размеров клиента, прежде чем вставлять транзакцию в таблицу фактов.
EDIT
Если новые данные клиента в комплекте с транзакцией, найти способ извлечения данных клиентов и направлять его на ДГ впереди сделки.
UPDATE:
нагрузки dimCustomer первый, решение о BusinessKey - так размер будет выглядеть следующим образом:
CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith
В процессе загрузки измерения, вы должны разделять входящие строки INT два потока, существующих и новые клиенты. Строки из потока «существующего клиента» обновляют тусклую таблицу (тип 1 SCD), в то время как строки из потока «новый клиент» вставлены. В потоке строк, которые вставляются, не должно быть дубликатов; вы можете выполнить это, вставив их в промежуточную таблицу и удалив там дубликаты непосредственно перед окончательной вставкой в таблицу измерений. Вы также можете извлекать дубликаты и перенаправлять их обратно в процесс загрузки для обновления записей клиентов; они могут содержать более новые данные - например, обновленные номера телефонов или аналогичные.
Как только клиент находится, загрузите факты.
Тот факт, таблица должна выглядеть примерно так:
DateKey (PK)
CustomerKey
OrderNumber (PK)
Total
Я использовал составной первичный ключ DateKey и ORDERNUMBER, что позволяет порядковый номер для того, чтобы сбросить время от времени.
Во время процесса загрузки, изменить факт записи смотреть что-то вроде:
DateKey CustomerBusinessKey OrderNumber Total
20100201 john_smith_101 111 500
20100301 john_smith_101 222 600
На этом этапе нам нужно заменить CustomerBusinessKey с CustomerKey из таблицы измерений, используя поиск. Итак, после поиска поток будет выглядеть так:
DateKey CustomerKey OrderNumber Total
20100201 12345 111 500
20100301 12345 222 600
Это можно вставить в таблицу фактов.
Я также немного обманул - не искал ключ даты из dimDate и не искал существующие строки в таблице фактов. При загрузке таблицы фактов вы можете искать существующую комбинацию (DateKey, OrderNumer) перед загрузкой или вы можете оставить ее до первичного ключа для защиты дубликатов дубликатов - по вашему выбору. В любом случае убедитесь, что попытка повторной загрузки одних и тех же данных в таблицу фактов не выполняется.
Что такое СУБД, которыми вы пользуетесь на вашем складе? –