ファクトテーブル とは?
- 売上金額・数量・回数など、集計対象となる数値(メジャー)を格納する
- スタースキーマの中心に位置し、周囲のディメンションテーブルと外部キーで結合する
- 行数が非常に多く、データウェアハウスの中で最もサイズが大きいテーブルになる
- 粒度(グレイン)の設計が重要で、1行が何を表すかを明確に定義する必要がある
ファクトテーブルって、何を入れるの?
「売上金額」「注文数量」「クリック回数」「滞在時間」みたいな、計算や集計の対象になる数値データを入れるんだよ。あとはディメンションテーブルへの外部キー(商品ID、日付ID、顧客IDなど)も持っていて、これで「誰が」「いつ」「何を」と紐付けるんだ
ディメンションテーブルとの違いがよくわからないな...
簡単に言うと、ファクトは「数字」でディメンションは「言葉」だよ。家計簿で例えると、ファクトが「1,200円」「3個」みたいな数字の部分で、ディメンションが「食費」「コンビニ」「4月7日」みたいな説明の部分。数字だけじゃ何のことかわからないし、説明だけじゃ分析できないから、両方セットで使うんだよ
粒度(グレイン)って何?
ファクトテーブルの1行が何を表すかという定義だよ。例えば「1注文1商品ごとに1行」なのか「1日1店舗ごとに1行」なのかで、分析の細かさが全然変わるんだ。粒度が細かいほど詳細な分析ができるけど、行数が爆発的に増える。設計の最初に粒度を決めるのがDWH設計の鉄則だよ
ファクトテーブルって行数がすごく多くなるの?
ファクトテーブルにはどんな種類があるの?
大きく3つあるよ。トランザクションファクト(1件1件の取引を記録)、スナップショットファクト(ある時点の残高や在庫を記録)、累積スナップショットファクト(注文→出荷→配達みたいなプロセスの進捗を記録)。用途に合わせて使い分けるんだ
ファクトレステーブルっていうのもある?
なるほど、ファクトテーブルって奥が深いんだね!
そうだよ。ファクトテーブルの設計がDWH全体の分析力を決めると言ってもいいくらいだよ。粒度を間違えると後から直すのが本当に大変だから、最初にしっかり「何を分析したいか」を考えて粒度を決めるのが成功の秘訣だよ