Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ディメンショナルモデリングを軽く語る

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Tech Leverages Tech Leverages
March 04, 2025
5.7k

 ディメンショナルモデリングを軽く語る

Avatar for Tech Leverages

Tech Leverages

March 04, 2025
Tweet

More Decks by Tech Leverages

Transcript

  1. 何のためにデータ分析するの? 
 • 様々なビジネスプロセスを評価する
 ◦ 様々な切り口を元に、定量的にデータを比較する
 ◦ 課題の抽出、現状の把握、未来の行動のために意思決定をする
 • ビジネスプロセスとは、我々が行う日々の業務である


    ◦ 皆さんも日々の業務、何かしらの数字を見て意思決定してますよね
 • データドリブンな意思決定をするために欠かせないですね
 
 今日はデータ分析しやすいデータモデリング について話していくよ!
 10

  2. ディメンショナルモデリングに登場する概念 
 • ファクトとは計測値である
 ◦ 売上高、面談数、内定数など。加算可能なもの
 ◦ レコード数が多い傾向にある
 • ディメンションとは切り口である


    ◦ 期間(月、週、日、会計期間など)
 ◦ 学歴区分、志望業界、流入経路
 ◦ 5W1H(いつ、誰、どこで、どのように)が切り口になりやすい
 ◦ レコード多くないが、切り口そのものの値の変化に追従すると大変
 25

  3. OLAPでのデータ分析 
 • factテーブルとdimensionテーブルをまず作り、分析軸でjoinさせる
 • joinするのは結合キーで。あとで詳しく話す
 32
 内定fact
 
 月


    学歴区分 
 
 
 
 学生dimension
 大学dimension
 学歴区分 
 企業dimension
 業界dimension
 日付dimension
 月

  4. OLAPでのデータ分析 
 33
 • 利用者はfactとdimensionを選んで集計するだけで済む
 • joinが少ないのでSQLがシンプル
 ◦ 結果的にOLTPでのワイドテーブルと同じになっても、作るまでの工程がシンプ ルに表現しやすい

    
 • 分析の切り口追加など、分析要求に対して柔軟に対応できる
 • dimensionを非正規化することで、join減らせる
 • 様々なテーブルjoinが不要なので、大規模処理に向いてる
 

  5. データモデリングの方法 
 1. ビジネスプロセスの選定
 2. 粒度を決める 
 ◦ 複数のファクトを横断する際に、粒度が揃ってないと分析しづらい
 ◦

    データの最小単位で設計するのがやりやすい
 ◦ dailyをmonthlyに丸めるのはできるが、monthlyをdailyには出来ない
 3. ディメンションを特定
 4. ファクトを特定
 39

  6. データモデリングの方法 
 1. ビジネスプロセスの選定
 2. 粒度を決める
 3. ディメンションを特定 
 ◦

    分析の切り口、データの属性情報、5W1Hが選ばれやすい
 ◦ dimensionは奥が深い(後述します)
 4. ファクトを特定
 40

  7. ここまでの整理 
 • 様々な意思決定のためデータ分析が必要で、分析しやすいモデリングが重要
 • OLTPとOLAPでデータモデリングが違う
 ◦ OLTPはデータ整合性担保のため、第三正規化がよく使われる
 ◦ OLAPは大量のデータを分析しやすいよう、dimensional

    modelingが良い
 • ディメンショナルモデリングは、ビジネスプロセスの可視化に向いてる
 ◦ ファクト(計測値) とディメンション(切り口) 
 ◦ これらをリレーショナルデータベースで実装したのがスタースキーマ
 • ディメンショナルモデリングのステップとして、ビジネスプロセスの理解大事
 43

  8. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension
 • 
 45

  9. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー 
 • Factless Fact Table
 •

    Slow Change Dimension
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension
 • 
 46

  10. スタースキーマの結合キー 
 • ナチュラルキーだけでなくサロゲートキー を適切に作るのが重要
 • サロゲートキーとは
 ◦ システムにより生成された、意味を持たないキー
 ◦

    ディメンションのレコードを一意に識別するために使われる
 • ナチュラルキーとは
 ◦ 意味を持つキー。ユーザIDとか、商品マスタIDとか
 47

  11. スタースキーマの結合キー 
 • なぜサロゲートキーが必要?
 • この図を見るに、それぞれのナチュラルキーでjoinしてることね?
 48
 内定fact
 
 志望業界

    
 学歴区分 
 
 
 
 学生dimension
 大学dimension
 学歴区分ID 
 企業dimension
 業界dimension
 志望業界ID 
 日付dimension

  12. スタースキーマの結合キー 
 • dimensionの 変更履歴に追従しやすい のが理由。以下雑な例
 • ユーザID=10が引っ越して「東京都」から「愛知」にかわった場合
 ◦ 大体のシステムって更新すると「上書き」されますよね


    • user_idでレコードを識別しながら、dimとfactをjoinすると
 ◦ user_id=10に「愛知」が上書きされたので、過去の履歴を追えない
 ◦ サロゲートキーを使えば、過去の履歴追える
 ◦ でもサロゲートキー使わなくても、ナチュラルキーとバージョン日付等で履歴を追 うことはできる
 49

  13. スタースキーマの結合キー 
 • 個人的には、サロゲートキーはmustではないと思う 
 • サロゲートキーはコミュニケーションコストが高い
 ◦ user_id=10でキャッチボールしたほうがわかりやすいよね
 ◦

    xxx_key=aaa-bbb-cccって誰やねん
 • ナチュラルキーと履歴判定するカラムで対応はできるっちゃできる。トレードオフ。
 • ビジネスルールの変更によってナチュラルキーの扱いが変わると、ナチュラルキー運 用は崩れちゃう!
 50

  14. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table 
 •

    Slow Change Dimension
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension
 • 
 51

  15. Factless Fact Table 
 • 測定値を持たないファクト テーブル
 ◦ ??どういうこと???
 •

    「あるキャンペーンで、売れなかった商品」を扱いたいケースで発揮する
 ◦ ビジネスプロセスは「このプロモーションで商品が売れた」である
 ◦ 「売れなかった」というファクトは無い
 52

  16. Factless Fact Table 
 • 全商品を1レコードずつfactless factテーブルにいれる。もちろん測定値は無い
 • 以下2段階プロセスで「売れなかった商品」を特定
 ◦

    特定のキャンペーンに関係する商品を、factless factテーブル全商品から特定す る
 ◦ 通常のfactから、売れた商品を特定する
 ◦ 上記の差集合で導き出す
 • 個人的に使ったことないので、ぶっちゃけわからん笑
 ◦ ディメンションの粒度が同じファクトを2つ用意すれば、差集合ができる。つまりディ メンションの粒度設計って大事なんかな〜?
 53

  17. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension 
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension
 • 
 54

  18. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension
 • Degenerate Dimension 
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension
 • 
 59

  19. Degenerate Dimension 
 • 注文ファクトにおける「注文ユーザID」「注文番号」を考えてみる
 ◦ 注文ユーザIDは、ディメンションあるから外部キーになりえる
 ◦ 注文番号は、ディメンションテーブルは無いので、外部キーにはならない
 ◦

    注文番号は、分析の切り口にならないので粒度決めない
 ◦ 注文番号って、注文トランザクションの詳細情報でしかない
 • 個人的にはあんまり意識出来ていない。
 ◦ 分析軸にならない、factテーブルにあるdimensionぐらいのノリじゃね
 ◦ 詳細分析時のドリルダウン時に使うかも?
 61

  20. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension
 • Degenerate Dimension
 • Junk Dimension 
 • Conformed Dimension
 • Outrigger Dimension
 • 
 62

  21. Junk Dimension 
 • 個々のdimensionはカラム少ないけど、joinめっちゃする
 64
 注文ファクト
 
 注文id 


    手段id 
 発送id 
 注文形式 dimension
 購入手段
 dimension
 発送状況 dimension

  22. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension 
 • Outrigger Dimension
 • 
 66

  23. Conformed Dimension 
 • これも日本語わかってない。適合されたディメンション?
 • 複数のファクトに共有されるディメンション 。超重要!
 ◦ 複数のファクトを比較できるので、一貫性のある分析ができる


    ◦ 同じようなディメンションを複数用意しなくて良い
 • 雑な例
 ◦ 日付ディメンション。会計期間、営業日などをまとめたディメンション
 • 結局ディメンションの粒度設計が重要 。結局ディメンションの幅が分析の柔軟性を広 げる
 67

  24. ディメンショナルモデリングの深堀り集 
 • スタースキーマの結合キー
 • Factless Fact Table
 • Slow

    Change Dimension
 • Degenerate Dimension
 • Junk Dimension
 • Conformed Dimension
 • Outrigger Dimension 
 • 
 68