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

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

Tech Leverages
March 04, 2025
58

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

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