Slide 1

Slide 1 text

ビジネスプロセスから始めるデータモデリング ファクトとディメンションの前に考えること Data Engineering Study #36「"良いデータモデル "は、どこから生まれるのか」 10X 水谷優斗 (@tenajima) 10X, Inc. ALL RIGHTS RESERVED

Slide 2

Slide 2 text

AI 時代にデータモデリングはなぜ大切なのか ● ● AI 時代においても変わらないこと ○ garbage in, garbage out. ○ 人間が読んで難しいクエリは、AI が読んでも難しい(再現しづらい) AI 時代になって変わりうること ○ 汎用的な大福帳マートの価値が相対的に下がる ○ AI は理解しやすいルールに従って成果物を積み上げることは人間よりもうまい 10X, Inc. ALL RIGHTS RESERVED 2

Slide 3

Slide 3 text

AI 時代にデータモデリングはなぜ大切なのか AI 時代においても変わらないこと ● garbage in, garbage out. ● 人間が読んで難しいクエリは、AI が読んでも難しい(再現しづらい) 10X, Inc. ALL RIGHTS RESERVED 出典:モデリングはキラキラ技術より地味だが役に立つ (pei0804) デリングはキ 3 ラキラ技術より地味だが役に立つ

Slide 4

Slide 4 text

AI 時代にデータモデリングはなぜ大切なのか AI 時代になって変わりうること ● 汎用的な大福帳マートの価値が相対的に下がる ○ いろんな分析をするためにいろんな情報が紐づいた大福帳マートを提供して、分析できる人 はそれで分析してきたのが今までの世界 ○ データエンジニア的にもこれは一定苦渋の決断だったはず(メンテが大変すぎる...) ■ ○ マートの要件を固めて実装する速度がビジネスが必要とする速度に追いつかなかった 「SQL を書く」ハードルが劇的に下がったので、dimensional modeling された状態のもので もデータユーザーが扱えるようになったのがこれからの世界 10X, Inc. ALL RIGHTS RESERVED 4

Slide 5

Slide 5 text

AI 時代にデータモデリングはなぜ大切なのか AI 時代になって変わりうること ● AI は理解しやすいルールに従って成果物を積み上げることは人間よりもうまい ○ 提供されたデータ(dimensional modelingなどでモデリングされたもの)が一定のルールにした がっているのであればそれを淡々と積み上げてくれる ○ 人間だと書くのが嫌になる同じ書き味の CTE と jon が何回続いても嫌な顔せずに書いてく れる ○ 一定のルールに従って作られたものの価値が上がる 10X, Inc. ALL RIGHTS RESERVED 5

Slide 6

Slide 6 text

AI 時代にデータモデリングはなぜ大切なのか AI 時代になって変わりうること ● 構成要素が少なくても(大福帳テーブルでも) where や qualify を組み合わせればいろんな情報を取 り出せることの価値が下がる ● 構成要素が多くても(fact や dimension に別れていても) 一定のルールにしたがえば任意のものを取 り出せることの価値が上がる 10X, Inc. ALL RIGHTS RESERVED 6

Slide 7

Slide 7 text

AI 時代にデータモデリングはなぜ大切なのか AI 時代になって変わりうること ● 構成要素が少なくても(大福帳テーブルでも) where や qualify を組み合わせればいろんな情報を取 り出せることの価値が下がる ● 構成要素が多くても(fact や dimension に別れていても) 一定のルールにしたがえば任意のものを取 り出せることの価値が上がる つまりモデリングチャンスだよね 10X, Inc. ALL RIGHTS RESERVED 7

Slide 8

Slide 8 text

今日持ち帰って欲しいこと ● ビジネスイベントとビジネスオブジェクトを改めて考え直してみよう ● なぜ今: 実装は自動化される時代。「何をどうモデリングするか」の設計思想が効いてくる ● どうやって: 実装に入る前に以下を整理する ○ どんなコトが起きるのか ○ どんなモノが登場するのか 10X, Inc. ALL RIGHTS RESERVED 8

Slide 9

Slide 9 text

今日話すこと 話すこと ● ● 話さないこと 分析用データモデルを設計する時に考えている ● 具体的な dbt / SQL の書き方 こと ● 履歴管理の具体例 ビジネスイベント / ビジネスオブジェクトの捉 ● 既存基盤からの移行戦略 え方 10X, Inc. ALL RIGHTS RESERVED 9

Slide 10

Slide 10 text

言葉の定義 ビジネスプロセスとは? 業務の集まり 注文受付の業務があり、梱包業務 があり、配達業務がある 10X, Inc. ALL RIGHTS RESERVED 10

Slide 11

Slide 11 text

言葉の定義 ビジネスイベントとは? 各業務もビジネスプロセスとして 分解できる 注文受付業務もプロセスとして、 注文完了、注文変更、注文確定の 一連の集まりである これ以上分割できない業務の最小 単位の出来事 10X, Inc. ALL RIGHTS RESERVED 11

Slide 12

Slide 12 text

AI 時代において ● スライドの中で「知ってなきゃいけない」という言葉が何回か使われています ● 人間にとっては「知ってなきゃいけない」し、AI にとっては「コンテキストとして注入してあげ ないといけない」と思いながら見ていただくと良いかと思います 10X, Inc. ALL RIGHTS RESERVED 12

Slide 13

Slide 13 text

実例から見つけるモデリングチャンス 10X, Inc. ALL RIGHTS RESERVED 13

Slide 14

Slide 14 text

モデリングチャンス: 秘伝の where が必要な Fact ● キャンセルされたら「canceled_at に キャンセルされた時刻が入る」ことを 知っておかないといけない ● 配達完了していたら、status が 4になっ ていることを知っておかないといけない 10X, Inc. ALL RIGHTS RESERVED 14

Slide 15

Slide 15 text

モデリングチャンス: 秘伝の where が必要な fact ● fact_order は何のビジネスイベントを表 しているものなの? ● ○ 注文完了? ○ 配達完了? ちなみに元々はこれを全部表す fact とし て提供されていた ○ ● 大福帳 fact と呼べるかもしれない プロダクト側の DB をほぼそのまま使っ ているがそれでいいんだっけ? 10X, Inc. ALL RIGHTS RESERVED 15

Slide 16

Slide 16 text

モデリングチャンス: 秘伝の where が必要な fact ● fact_order は何のビジネスイベントを表 しているものなの? ○ → 配達完了を表すイベントとして 切り出した 10X, Inc. ALL RIGHTS RESERVED 16

Slide 17

Slide 17 text

モデリングチャンス: 秘伝の where が必要な fact ● ネットスーパーだと最初の注文を完了させた後に、注文締め時間までは注文を変更することができる ● 重要な KPI も配達完了した注文の金額から計算されている ● いろんな「コト」が入っている状態から、「配達完了」というコトを選択して fact とした ● 情報量としては確かに落ちた部分もあるが、必要になったら別途提供するスタンス ○ 落ちた情報量で依頼があったケースはない ○ エンドユーザーにとっては秘伝の where が必要になくなった 10X, Inc. ALL RIGHTS RESERVED 17

Slide 18

Slide 18 text

モデリングチャンス: 秘伝の where が必要な fact その後 fact を作るためにやったこと ● 粒度は注文の単位とした(not 明細単位) ○ 注文明細単位の fact は別途提供する ● どの dimension と join できるようにするかを決めて dimensional key を用意 ● fact にどの数値を持たせるか (落とすか) の決定 → fact_order_delivered の完成 10X, Inc. ALL RIGHTS RESERVED 18

Slide 19

Slide 19 text

モデリングチャンス: 秘伝の where が必要な fact そう、Kimball Techniques の Four-Step Dimensional Design Processだね ● いろんな「コト」が入っている状態から、「配達完了」というコトを選択した ○ ● 粒度は注文の単位とした ○ ● Declare the grain. どの dimension と join できるようにするかを決めて dimensional key を用意 ○ ● Select the business process. Identify the dimensions. fact にどの数値を持たせるか (落とすか) の決定 ○ Identify the facts. 10X, Inc. ALL RIGHTS RESERVED 19

Slide 20

Slide 20 text

モデリングチャンス: 秘伝の where が必要な fact そう、Kimball Techniques の Four-Step Dimensional Design Processだね ● いろんな「コト」が入っている状態から、「配達完了」というコトを選択した ○ ● 粒度は注文の単位とした ○ ● Declare the grain. どの dimension と join できるようにするかを決めて dimensional key を用意 ○ ● Select the business process. Identify the dimensions. fact にどの数値を持たせるか (落とすか) の決定 ○ Identify the facts. 10X, Inc. ALL RIGHTS RESERVED 20

Slide 21

Slide 21 text

モデリングチャンス: 秘伝の where が必要な fact ● いろんな「コト」から配達完了をとってくるというのはデータエンジニアの腕の見せ所 ● 社内で使われている KPI は何のビジネスプロセスから集計されたものなのかの情報を集めること ○ ● 社内で良く参照されているダッシュボードや秘伝のスプレッドシートにヒントがあることが多い そしてそれを人間からも AI からも参照可能な状態にしておくことがこれから必要となる 10X, Inc. ALL RIGHTS RESERVED 21

Slide 22

Slide 22 text

モデリングチャンス: 無理やりな join の発見 ● owned_coupon_id から coupon_code を 取り出せると知っている必要がある ○ owned_coupon_id の採番ロジック の変更で簡単に詰む ● coupon_plan_id という owned_coupon_id とは別の id を持って いる(join には使えないみたい) ● 結局 join では natural key を使って join してしまっている 10X, Inc. ALL RIGHTS RESERVED 22

Slide 23

Slide 23 text

モデリングチャンス: 無理やりな join の発見 ● プロダクト側の DB 設計に引っ張られすぎてい た ● 注文したというイベントを「クーポンごと に」という文脈で集計することができない ● coupon_code を引き回しすぎている ● coupon_code がないがハックして何とか join できていた ● mart 作る時にこのような dim/fct があったら やってしまう気持ちもわからなくはない 10X, Inc. ALL RIGHTS RESERVED 23

Slide 24

Slide 24 text

モデリングチャンス: 無理やりな join の発見 ● ビジネスイベントの整理 ● coupon という「モノ」の再定義 ● それぞれの fact にクーポンの文脈を一発で紐 付けられるようになった ● owned_coupon_id という id にロジックを適用 して coupon_code を抜き出さなくても良く なった(エンドユーザーから隠蔽された) ● coupon_code はシステムで発行されるわけで はなく、人間が発行するもので id としては脆 弱だった部分を改善できた 10X, Inc. ALL RIGHTS RESERVED 24

Slide 25

Slide 25 text

モデリングチャンス: 無理やりな join の発見 これを整理して描くのが大切 ● ビジネスプロセスの整理 ● coupon という「モノ」の再定義 ● それぞれの fact にクーポンの文脈を一発で紐 付けられるようになった ● owned_coupon_id という id にロジックを適用 して coupon_code を抜き出さなくても良く なった(エンドユーザーから隠蔽された) ● coupon_code はシステムで発行されるわけで はなく、人間が発行するもので id としては脆 弱だった部分を改善できた 10X, Inc. ALL RIGHTS RESERVED 25

Slide 26

Slide 26 text

モデリングチャンス: 無理やりな join の発見 そう、Kimball Techniques の Four-Step Dimensional Design Processだね ● クーポンには「取得する」と「注文時使用する」という整理をし、特に「注文時使用する」を選択した ○ ● 粒度は注文の単位とした ○ ● Declare the grain. どの dimension と join できるようにするかを決め、クーポンへの紐付けが不十分であると判明した ○ ● Select the business process. Identify the dimensions. fact にどの数値を持たせるか (落とすか) の決定 ○ Identify the facts. 10X, Inc. ALL RIGHTS RESERVED 26

Slide 27

Slide 27 text

モデリングチャンス: 無理やりな join の発見 そう、Kimball Techniques の Four-Step Dimensional Design Processだね ● クーポンには「取得する」と「注文時使用する」という整理をし、特に「注文時使用する」を選択した ○ ● 粒度は注文の単位とした ○ ● Declare the grain. どの dimension と join できるようにするかを決め、クーポンへの紐付けが不十分であると判明した ○ ● Select the business process. Identify the dimensions. fact にどの数値を持たせるか (落とすか) の決定 ○ Identify the facts. 10X, Inc. ALL RIGHTS RESERVED 27

Slide 28

Slide 28 text

ドメインによって fact / dim の境界線は変わりうる ● ● 例: 住所の変更 ○ EC/小売 → たいてい dim_user の属性の一つ ○ 引越し業者 → fact_move という重要なビジネスイベントの一つになりうる ユーザーセグメント ○ ユーザーセグメントごとの利用率を知りたい → dim_user の属性の一つ ○ ユーザーセグメントの変更に伴ってアクションを起こしたい → fact_segment_assigntment にな りうる モノに見える情報でも、取り扱うドメイン・要件によってはコトとして記録するべき時がある 10X, Inc. ALL RIGHTS RESERVED 28

Slide 29

Slide 29 text

fact で持っておきたいのに、ソースが状態しか持っていない時 「現在の状態」 しか持っていないと、Dim の履歴管理(SCD)でも拾えないケースがある ● 状態カラムに畳み込まれて、事実そのものが復元不能 ○ 例(極端なケース): 注文側に「割引された金額」と「ユーザーの現在のクーポン所持状況」し かない ○ → どのクーポンが使われたかがどこにも残らない バッチのスナップショット間隔より、発生が速い / 不定期 ○ 例: 細かいステータス遷移、リアルタイムに動くオペレーション状態 ○ N 分に 1 回のスナップショットでは、その間の遷移は上書きされて消える ○ → 起きたタイミングで事実として吐いてもらう(イベントログ)しか手がない 10X, Inc. ALL RIGHTS RESERVED 29

Slide 30

Slide 30 text

fact で持っておきたいのに、ソースが状態しか持っていない時 10X での事例(https://product.10x.co.jp/entry/2026/01/16/165204) ● 「状態」として持っていた情報を、「ドメインイベント(起 きた事実) 」として上流から流す設計に変えている ● データ基盤の内側では完結しない問題に対して対処しても らった例 10X, Inc. ALL RIGHTS RESERVED 30

Slide 31

Slide 31 text

まとめ ● 「秘伝の where」も「無理やりな join」も、根は同じ ── コトとモノが未整理 ● コトとモノを整理する → そのまま Kimball の 4 ステップの入口 ● AI 時代は、モデリングされたマートがより活きる時代 こんな時はモデリングチャンス (帰ったら探してみて欲しい) ● 秘伝の where を毎回書いている ● 無理やりな join でコンテキストをやりくりしている ● AI に暗黙知をプロンプトで毎回渡している ○ それが溜まった rules がある 10X, Inc. ALL RIGHTS RESERVED 31

Slide 32

Slide 32 text

参考 ● Dimensional Modeling Techniues ● モデリングはキラキラ技術より地味だが役に立つ ● プロダクト作りにおけるSimpleとEasyの違い ● ドメインイベントのデータ上の扱いについて紹介 (CQRS + ES conf 2026 の補足) 10X, Inc. ALL RIGHTS RESERVED 32