レストランの配達情報を含むデータウェアハウスを構築しています。データはSQLServer2005に格納されてから、SQL Server AnalysisServices2005キューブに配置されます。
配信情報は、次の表で構成されています。
FactDeliveres
- BranchKey
- DeliveryDateKey
- プロダクトキー
- InvoiceNumber(DD:縮退ディメンション)
- 量
- 単価
- ラインコスト
ノート:
- FactDeliveresの粒度は、請求書の各行です
- 製品ディメンションには、サプライヤー情報が含まれます
そして問題:ファクトテーブルの主キーがありません。主キーは、各配信とProductKeyを一意に識別するものである必要があります。しかし、配達を一意に識別する方法はありません。
ソースOLTPデータベースには、すべての配信に固有のDeliveryIDがありますが、これはユーザーにとって意味のない内部IDです。InvoiceNumberはサプライヤーの請求書番号です。これは手動で入力されるため、重複します。
キューブでは、FactDeliveresのInvoiceNumberフィールドのみに基づいてディメンションを作成しました。つまり、InvoiceNumberでグループ化すると、(誤って)同じInvoiceNumberを持っているという理由だけで、2つの配信が組み合わされる可能性があります。
DeliveryID(DeliveryKeyと呼ばれる)を含める必要があると感じましたが、その方法がわかりません。
私もそうです:
- これをInvoiceNumberディメンションの基になるキーとして使用しますか?
- 新しい配信があるたびに増加するDimDeliveryを作成しますか?これは、DeliveryDate、Supplier、InvoiceNumberなど、一部の属性がFactDeliveriesから出てDimDeliveryに入るということを意味している可能性があります。
結局のところ、私はあなたに尋ねることができます:ソースデータベースに次の情報がある場合、Deliveriesキューブを作成するにはどうすればよいですか?
DeliveryHeaders
- DeliveryID(PK)
- 配送日
- サプライヤーID(FK)
- InvoiceNumber(手動で入力)
配達の詳細
- DeliveryID(PK)
- ProductID(PK)
- 量
- 単価