Я строю хранилище данных, которое включает информацию о доставке для ресторанов. Данные хранятся в SQL Server 2005, а затем помещаются в куб SQL Server Analysis Services 2005.
Информация о поставках состоит из следующих таблиц:
FactDeliveres
- BranchKey
- DeliveryDateKey
- ProductKey
- InvoiceNumber (DD: вырожденный размер)
- Количество
- UnitCosT
- Linecost
Примечание:
- Детализация FactDeliveres - это каждая строка в счете
- Размер продукта включает информацию о поставщике
И проблема: нет первичного ключа для таблицы фактов. Первичный ключ должен быть чем-то, что однозначно идентифицирует каждую доставку плюс ProductKey. Но у меня нет возможности однозначно определить доставку.
В исходной базе данных OLTP есть идентификатор доставки, который уникален для каждой доставки, но это внутренний идентификатор, который не имеет смысла для пользователей. InvoiceNumber - это номер счета поставщика, который вводится вручную, поэтому мы получаем дубликаты.
В кубе я создал измерение, основываясь только на поле InvoiceNumber в FactDeliveres. Это означает, что когда вы группируете по InvoiceNumber, вы можете объединить 2 доставки только потому, что они (по ошибке) имеют один и тот же InvoiceNumber.
Я чувствую, что мне нужно включить DeliveryID (чтобы он назывался DeliveryKey), но я не уверен, как.
Итак, могу ли я:
- Использовать это в качестве основного ключа для измерения InvoiceNumber?
- Создать DimDelivery, которая растет каждый раз, когда появляется новая доставка? Это может означать, что некоторые атрибуты исходят из FactDeliveries и входят в DimDelivery, например DeliveryDate, Supplier, InvoiceNumber.
После всего этого я могу просто спросить вас: как мне создать куб Deliveries, когда в моей исходной базе данных есть следующая информация
DeliveryHeaders
- DeliveryID (PK)
- DeliveryDate
- SupplierID (FK)
- InvoiceNumber (вводится вручную)
DeliveryDetails
- DeliveryID (PK)
- ProductID (PK)
- Количество
- UnitCosT