【ファクトテーブル】

ファクトテーブル とは?

💡 データ分析の主役!「いくら」「何個」「何回」を記録する数字の倉庫
📌 このページのポイント
ファクトテーブルの3つの種類 トランザクション (1件ごとの記録) 注文#1 | 商品A | 3個 注文#2 | 商品B | 1個 注文#3 | 商品A | 5個 注文#4 | ... 注文#5 | ... 行数が最も多い スナップショット (ある時点の状態) 4/1 | 在庫: 500個 4/2 | 在庫: 480個 4/3 | 在庫: 520個 4/4 | ... 4/5 | ... 残高・在庫の推移 累積スナップショット (プロセスの進捗) 注文#1 注文日: 4/1 出荷日: 4/2 配達日: 4/4 返品日: - 各ステップの日付を記録 共通: 計測可能な数値(メジャー)+ ディメンションへの外部キー 粒度(グレイン)= 1行が何を表すかが設計の鍵
ファクトテーブルの3つの種類
ひよこ ひよこ

ファクトテーブルって、何を入れるの?

ペンギン先生 ペンギン先生

「売上金額」「注文数量」「クリック回数」「滞在時間」みたいな、計算や集計の対象になる数値データを入れるんだよ。あとはディメンションテーブルへの外部キー(商品ID、日付ID、顧客IDなど)も持っていて、これで「誰が」「いつ」「何を」と紐付けるんだ

ひよこ ひよこ

ディメンションテーブルとの違いがよくわからないな...

ペンギン先生 ペンギン先生

簡単に言うと、ファクトは「数字」でディメンションは「言葉」だよ。家計簿で例えると、ファクトが「1,200円」「3個」みたいな数字の部分で、ディメンションが「食費」「コンビニ」「4月7日」みたいな説明の部分。数字だけじゃ何のことかわからないし、説明だけじゃ分析できないから、両方セットで使うんだよ

ひよこ ひよこ

粒度(グレイン)って何?

ペンギン先生 ペンギン先生

ファクトテーブルの1行が何を表すかという定義だよ。例えば「1注文1商品ごとに1行」なのか「1日1店舗ごとに1行」なのかで、分析の細かさが全然変わるんだ。粒度が細かいほど詳細な分析ができるけど、行数が爆発的に増える。設計の最初に粒度を決めるのがDWH設計の鉄則だよ

ひよこ ひよこ

ファクトテーブルって行数がすごく多くなるの?

ペンギン先生 ペンギン先生

そうだよ。ECサイトなら注文明細が毎日何万件も増えるし、Webのアクセスログなら1日何百万件もある。ファクトテーブルが数十億行になることも珍しくないんだ。だからパーティショニングやカラムナーストレージで性能を確保するのが重要だよ

ひよこ ひよこ

ファクトテーブルにはどんな種類があるの?

ペンギン先生 ペンギン先生

大きく3つあるよ。トランザクションファクト(1件1件の取引を記録)、スナップショットファクト(ある時点の残高や在庫を記録)、累積スナップショットファクト(注文→出荷→配達みたいなプロセスの進捗を記録)。用途に合わせて使い分けるんだ

ひよこ ひよこ

ファクトレステーブルっていうのもある?

ペンギン先生 ペンギン先生

よく知ってるね!ファクトレスファクトテーブルは数値カラムを持たないファクトテーブルだよ。例えば「学生Aが4月7日にコースBに出席した」みたいな出来事の記録で、金額や数量はないけど「出席した」という事実を記録する。行数をCOUNTするだけで分析できるんだよ

ひよこ ひよこ

なるほど、ファクトテーブルって奥が深いんだね!

ペンギン先生 ペンギン先生

そうだよ。ファクトテーブルの設計がDWH全体の分析力を決めると言ってもいいくらいだよ。粒度を間違えると後から直すのが本当に大変だから、最初にしっかり「何を分析したいか」を考えて粒度を決めるのが成功の秘訣だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ファクトテーブル」って出てきたら「DWHの中心にある数値データ(売上・数量など)を格納するテーブル」と思えればだいたいOK!
📖 おまけ:英語の意味
「Fact Table」 = 事実テーブル
💬 Fact(事実)という名前の通り、「何がいくつ売れた」「いくらだった」という事実を記録するテーブルだよ
← 用語集にもどる