スタースキーマの設計について:ファクトテーブルfact_table (insert_date, trade_date, close_date ...)
に3つの日付列があります。また、作成する日付ディメンションの数がわかりません。
ケース1:Dim A。つまり、@ fact_tableの1つの行には、Aに対して3つのFKがあります。
ケース2:Dim A(insert_dateの場合)、Dim B(trade_date)、Dim C(close_date)。つまり、1つの行@fact_tableには、1つのFKからA、1つのFKからB、1つのFKからCがあります。
質問:いくつの日付ディメンションを作成する必要がありますか?
ディメンションは情報のカテゴリを表します。日付、製品...あなたの場合、同じ分析軸を参照するファクトテーブルに 'DATE'の3つの属性があるため、スタースキーマを使用している場合、1つの日付ディメンションのみが必要ですこれはディメンションロールプレイングの実装です。
2つの次元のロールプレーイング実装があります。
table alias typeは、使用ごとにエイリアスを割り当てることにより、SQLステートメントでディメンションを複数回使用します。
データベースビュータイプでは、ファクトのディメンションに必要なロールの数と同じ数のビューを作成します。
たとえば、1つの日付ディメンションのみが必要です:
日付ディメンションの「タイプ」は、上記のファクトテーブルで言及されます。
更新しました :
モデリングの日付と時刻のディメンション
すべてのファクトとディメンションテーブル全体で、日付ディメンションと時間ディメンションが1つだけ存在する必要があります。すべての日時フィールドを日時ディメンションにマップする必要はありませんでした。ディメンションから追加の属性が必要な場合にのみ、日時フィールドを日付または時間ディメンションにマップします。
通常、日付ディメンションの最小粒度は日であり、時間ディメンションの最小粒度は秒です。多くのウェアハウスは時間ディメンションを必要としませんが、日付ディメンションは事実上すべてのデータウェアハウスシステムで使用されます。
通常は、日付と時刻に個別のディメンションを作成します。
1日の境界を越える連続した時間のチャンクを抽出する必要がある場合(例:11/24/2000 10 p.m. to 11/25/2000 6 a.m.
)の場合、時間と日が同じディメンションにある方が簡単です。それ以外の場合、Date
とTime
の個別のディメンションは、管理とクエリが簡単です。
日付と時刻が別々のディメンションである場合、周期的で繰り返し発生する毎日のイベントを分析する方が簡単です。
例:今週の午前9時にアクティブな会議の数。これは、日付と時刻が別々の場合の簡単なクエリです。日付と時刻を1つのディメンションに組み合わせると、はるかに複雑になります。以下は、日付と時刻のディメンションを1つの日付/時刻ディメンションにまとめることの問題です。
問題#1:
- 日付と時刻を単一のディメンションに結合すると、特に秒を粒度として使用する場合、非常に大きなディメンションが作成されます。結合されたテーブルの粒度として時間を使用する場合、問題はそれほど大きくありません。
- 10年間のデータの日付と時刻のディメンションのカーディナリティ(分離)日付のディメンション:10 * 365 = 3650時間のディメンション(粒度:
秒):24 * 60 * 60 = 86400- 10年間のデータの日付と時刻のディメンション(結合)のカーディナリティDateTimeディメンション(粒度の時間単位):10 * 365 * 24 = 87600
DateTimeディメンション(粒度秒):10 * 365 * 24 * 60 * 60 =
315,360,000
DateTimeディメンションのレコードが多いほど、クエリのパフォーマンスが低下します。
問題#2
日付と時刻の両方のディメンションを同じディメンションに含めると、1日の粒度を持つファクトテーブルで解釈の問題が発生する可能性があります。ディメンションテーブルの細分性が高いため、同じ日にファクトテーブルに2つのレコードを誤って入力するのは簡単です。
さらに検索: source
答えを見つけました。
この概念は、ロールプレイングディメンションと呼ばれます
単一の物理ディメンションは、ファクトテーブルで複数回参照できます、各参照は、ディメンションの論理的に異なる役割にリンクしています。たとえば、ファクトテーブルには複数の日付を含めることができ、それぞれの日付は日付ディメンションへの外部キーによって表されます。参照が独立するように、各外部キーが日付ディメンションの個別のビューを参照することが重要です。これらの個別のディメンションビュー(一意の属性列名を持つ)はロールと呼ばれます。
mmarie 回答 stack-overflow から。
例