2

Customer テーブルと、Customer Id を含む他のいくつかのディメンション テーブルがあります。

私が欲しいのは、最上位の顧客の選択によってフィルター処理されたディメンション テーブルです。

だから私が持っている場合:

顧客
ID | 名前

ディメンション
A ID | 顧客 ID | 値 1
ID | 顧客 ID | 値 2

ディメンション
B ID | 顧客 ID | Value3
ID | 顧客 ID | 値4

ファクト
ID | DimensionBId | FactValue1 ...
ID | DimensionBId | FactValue2 ...

..CustomerId をフィルター処理し、ディメンション値を介してファクト テーブルにたどり着くことは可能ですか?

または、ディメンションの使用法で常に Customer を Fact に関連付ける必要がありますか? DimensionA を介して Customer を Fact に関連付ける方法はわかりますが、2 つ以上ではなく、1 つの中間テーブルにのみ関連付けることができます。

あるいは、実際に Fact テーブルにも CustomerId が必要ですか?

どんな助けでもありがたく受け取られます。

4

1 に答える 1

2

それはすべて、データウェアハウスに使用しているスキーマに依存します。

スタースキーマはあなたが持っている最良の選択肢だと思います。

これを使用する場合は、ファクトテーブルにcustomer_idがあり、ディメンションの使用法を介してそれらをリンクする必要があります。同じことがDimensionAとDimensionBにも当てはまります(つまり、ファクトテーブルにはディメンションAとディメンションBに対応するIDが必要です)。

このアプローチでこれを行う場合、ディメンションAとディメンションBのどちらにも顧客IDを設定する必要はありません。リンクはファクトテーブルを介して取得されます。

それ以外の場合は、これを考慮してください。本当に2次元が必要ですか?2つのディメンションはほぼ同じであるため、タイプという新しいフィールドを追加した方がよいのではないでしょうか。データソーステーブルのタイプはAとBで、階層にタイプを追加します。これにより、多くの問題が解決され、スキーマの一貫性が大幅に向上します。

これは、ラルフキンボールキンボールのサイトからのリンクです。's_Site_Linkは、私のものよりもはるかに優れた方法で説明しています。最後の段落は非常に有益です!

于 2012-10-23T10:40:31.443 に答える