Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
こんなデータマートは嫌だ。どんな? / waiwai-data-meetup-202504
Search
Shun Takagiwa
April 10, 2025
Technology
3.7k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
こんなデータマートは嫌だ。どんな? / waiwai-data-meetup-202504
Shun Takagiwa
April 10, 2025
More Decks by Shun Takagiwa
See All by Shun Takagiwa
LayerXの企業文化をデータがもっと強くする
shuntak
2
2.3k
たまたま出会った情熱を深掘りするキャリア戦略 〜ワクワクする働き方を探して〜
shuntak
3
2.6k
バクラクのデータドリブンな事業運営・爆速開発を支えるデータ分析基盤のこれまで・現在・これから
shuntak
1
9.3k
リリースから2年。爆速開発を支えるバクラクの組織とアーキテクチャ / AWS Dev Day 2022 Japan
shuntak
0
7.7k
バクラクのOCRで注目する指標について 〜精度の定義は一つじゃない〜 / Bakuraku OCR Metrics
shuntak
0
4.3k
LayerXインボイスのAI-OCRを支える非同期処理アーキテクチャ / AWS Dev Day Online Japan 2021
shuntak
0
8.1k
Introduction to Cordage v0.2 - Quorum Meetup Online
shuntak
0
110
Introduction to Cordage v0.2 (日本語) - blockchain.tokyo Online #3
shuntak
0
99
Dive Deep into Quorum - blockchain.tokyo #22
shuntak
0
730
Other Decks in Technology
See All in Technology
事業価値と Engineering 2026年度版
recruitengineers
PRO
29
15k
MIRU 2026 チュートリアル
keisuke198619
0
810
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
460
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
340
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
260
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
3
400
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
760
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
110
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
320
AI時代の強いチームの作り方
yuukiyo
23
15k
新しい SLO が良い感じにハマっている話
z63d
4
2.1k
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Google's AI Overviews - The New Search
badams
0
1.1k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
400
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
A Modern Web Designer's Workflow
chriscoyier
698
190k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
こんなデータマートは嫌だ。どんな? わいわいデータミートアップ 2025-04-10 高際 隼 @shun_tak
高際 隼 / Shun Takagiwa 株式会社LayerX アナリティクスエンジニア ▸ 2020年〜現在 -
バクラク事業を立ち上げ、AI-OCRの初期バージョンを開発 - 機械学習とデータ関連組織の立ち上げ、マネジメント - データ活用の推進に注力 (今) ▸ 2018〜2020年 - 株式会社LayerX 立ち上げ - ブロックチェーン事業 PM・TechLead 最近は Cline でのデータマート作りに挑戦中 結構いい感じになってきたかも 自己紹介 © LayerX Inc. 2
こんなデータマートは嫌だ。 どんな?
ドキュメントがない ▸ 誰が何のために作ったデータマートか分からない ▸ カラムの意味や、主キー (PK)・外部キー (FK) も不明瞭 ▸ でも意外と使われてる
▸ 「数字がズレてるんですけど」を直せない © LayerX Inc. 4
まじでドキュメント書こう ▸ シンプルでいいので書いてほしいものリスト - 目的・用途 - 想定する主な利用者 - 主キー (複合主キーなら組み合わせ)
- 外部キーの参照先 - 日本語 (自然言語) のカラム定義 3か月後の自分のためにもなるし、作ったデータマートの利用者も増えると思うよ! 特にLLMの時代はドキュメントが重要 © LayerX Inc. 5
例 項目 具体例 目的 EC部門の月次報告用で使う商品カテゴリ別の売上推移 想定利用者 EC部門のデータアナリスト カラム定義 year_month: 対象年月(YYYY-MM形式)(PK)
electronics_sales: 電化製品売上(円) fashion_sales: ファッション売上(円) food_sales: 食品売上(円) total_sales: 総売上(円) customer_count: 購入ユニークユーザー数 © LayerX Inc. 6
ドキュメントの下書き生成プロンプト (参考) 現時点では o3-mini など考えるモデルがオススメ。 {} は自分で編集する © LayerX Inc.
7
こんなデータマートは嫌だ。 どんな?
汎用性が低い ▸ 月次で集計済み ▸ カテゴリーでピボット済み © LayerX Inc. 9
月次で集計済み year_month total_sales customer_count 2025-01 10,500,000 3,240 2025-02 9,800,000 3,050
2025-03 11,200,000 3,420 ▸ 問題点 - 3月の売上急増の原因日(イベント日など)を特定できない - ある特定の週だけ売上が落ちていても月合計では気づけない - 「月初10日間」の前年同期比など、柔軟な分析ができない © LayerX Inc. 汎用性が低い 10
カテゴリーでピボット済み year_month total_sales electronics_sales fashion_sales food_sales 2025-01 10,500,000 5,200,000 3,800,000
1,500,000 2025-02 9,800,000 4,700,000 3,500,000 1,600,000 2025-03 11,200,000 5,500,000 4,100,000 1,600,000 ▸ 問題点 - 新カテゴリー「home_goods」追加時にカラム追加・スキーマ定義の変更が必要 - サブカテゴリー(スマホ、PC、AV機器など)の追加はどうする - 一つの商品が複数カテゴリーに所属する場合(電化製品かつギフト商品など)の対応が難しい © LayerX Inc. 汎用性が低い 11
汎用性を上げるコツ ▸ 目的と用途を明確にし、言われた通りに作らない ▸ 用途の範囲内で粒度を最小に保つ ▸ ピボットしない (横持ちしない) © LayerX
Inc. 12
目的と用途を明確にし、言われた通りに作らない 「今度の経営会議で月次の売上推移を報告するので、データ出して」という要望を受けた場合 ▸ なぜ必要? → 「マーケティング施策の効果を確認したい」 ▸ どう活用? → 「カテゴリ別予算配分の意思決定に使う」
▸ 意思決定の頻度は? → 「経営会議は月次だけど、週次のマーケティング定例でも議論」 ▸ 他に見たい切り口は? → 「新規・リピート別の効果も知りたい」 → 必要なのは日次または週次の商品カテゴリ別のデータで、顧客タイプ別の分析も可能なデータマート © LayerX Inc. 汎用性を上げるコツ 13
用途の範囲内で粒度を最小に保つ 月次集計 日次(適切な粒度) 時間単位(必要な場合) year_month: 2025-03 total_sales: 11,200,000 date: 2025-03-15
total_sales: 384,000 timestamp: 2025-03-15 18:00 total_sales: 48,000 ▸ 用途に応じて粒度を選択 - 時間単位 → 特売セール開始直後の売上急増、終了前の駆け込み需要を把握 - 日次 → 平日/週末の傾向の違い、給料日効果などを分析 - 月次 → 日次データから集計可能 時間単位にするとレコード数が日次の24倍になり、コスト増加やパフォーマンス悪化の可能性 → 必要な場合のみ使用 © LayerX Inc. 汎用性を上げるコツ 14
ピボットしない (横持ちしない) date category sales 2025-03-01 electronics 180,000 2025-03-01 fashion
125,000 2025-03-01 food 52,000 ▸ 正規化形式 (縦持ち) のメリット - 新カテゴリー「home_goods」を追加してもスキーマ変更不要 - サブカテゴリーの追加が容易(categoryとsub_categoryの2列で表現可能) - 一つの商品が複数カテゴリに所属する場合も自然に表現できる - ピボットしたければBIツールで簡単にできる © LayerX Inc. 汎用性を上げるコツ 15
ディメンショナル・モデリング (発展編) ▸ 基本的な考え方 - 何を (Fact/指標) どのように (Dimension/軸) 見るかでモデリングする
- Factテーブル : 測定値・集計対象となる指標 - 例 : 売上金額、数量など - 集計関数 (COUNT, SUM, AVG など) の対象になることが多い - Dimensionテーブル : 分析軸となる属性情報 - 例 : 契約日、商品、顧客など - グルーピング・フィルタリング (GROUP BY / WHERE) の対象になることが多い ▸ メリット - 分析時に理解しやすい構造 - 結合 (JOIN) を減らせる - 新しい軸を簡単に追加できる - BIツールとも相性が良い 参考 : 30分でわかる『アジャイルデータモデリング』 by ucchi-さん © LayerX Inc. 汎用性を上げるコツ 16
こんなデータマートは嫌だ。 どんな?
クエリがカオス ▸ クエリ全体がとにかく長く、サブクエリ多用 ▸ 分かりそうで分からない謎の名前 (amt_dlyとか) ▸ 異なる単位やタイムゾーンが混在 ▸ NULLの代わりに使われてそうな値の説明がない
- -1 , 1970-01-01 , etc © LayerX Inc. 18
理解しやすいクエリを書くコツ ▸ 読んで意味のわかる名前をつけよう ▸ サブクエリをCTEに分解しよう (WITH句を使う) © LayerX Inc. 19
読んで意味のわかる名前をつけよう (1) ▸ 基本原則: 省略せず、明確に - amt → amount ▸
一貫性を保つ (以下は例) - テーブル名: 複数形 ( orders , customers ) - ID列: テーブル名の単数形+ _id ( order_id , customer_id ) - 日付/時間: 接尾辞で型を明示 ( created_date , created_at ) - コードと名称を区別 ( category_code / category_name ) 余談 : 生き残り続ける tmp_sales_202311 みたいなのもやめよう © LayerX Inc. 理解しやすいクエリを書くコツ 20
読んで意味のわかる名前をつけよう (2) 曖昧な名前 明確な名前 理由 price price_yen 通貨単位を明示 created_at created_at_jst
タイムゾーンを明示 count number_of_orders 何をカウントしているか明示 sales total_sales 合計値であることを明示 conversion_rate orders_per_page_views_percent 分子・分母、単位を明示 特に rate の分子・分母、単位 (小数、百分率、一万分率など) は重要 © LayerX Inc. 理解しやすいクエリを書くコツ 21
サブクエリをCTEに分解しよう (WITH句を使う) ▸ 問題点 - 入れ子構造で読みづらく、クエリの意図が掴みにくい - 重複が発生し、非効率 - 実は意味のないサブクエリだったりする
( SELECT * FROM table してるだけとか) ▸ CTEに分解すると… - 可読性が高く、役割も明確になり、メンテナンスしやすくなる - 重複やバグに気付きやすくなる 参考 : 人間のためのリーダブルSQL by tenajimaさん © LayerX Inc. 理解しやすいクエリを書くコツ 22
さいごに ▸ ここまで聞いてくれた方はきっと 「今がベストじゃない」 「もっと良くできるはず」と考えているのでは? ▸ あなたの作ったデータマートは、間違いなく事業を、組織を前に進めたと思います ▸ 「こんなデータマートは嫌だ」なんて言ってすみませんでした ▸
今日のLTが少しでもあなたのお役に立てば幸いです © LayerX Inc. 23
[PR] LayerX ではデータの民を募集中! データ基盤の土台 (Data warehouse, ETLなど) が整ってきました。 いよいよAI・データ分析での活用や、データマネジメントが楽しくなってくるフェーズです! (今回の話が好きな人はちょうどいいフェーズかも)
▸ 正社員・副業も可 ▸ 募集職種 - データアナリスト - データサイエンティスト - 機械学習エンジニア - アナリティクスエンジニア - データエンジニア LayerX 採用情報 → jobs.layerx.co.jp © LayerX Inc. 24