データマート: 分析しやすい表を作る
Stage 5 — 第3章 | データ分析基礎カリキュラム 推定学習時間:30〜40分 | 難易度:★★★☆☆
この章で学ぶこと
毎回同じ結合や集計を書くのは大変です。 チームで同じ指標を見るなら、分析しやすい形に整えた表を用意しておくと便利です。
この章では、分析目的に合わせて作る データマート の考え方を学びます。
この章を終えると、こんなことができるようになります:
- データマートの役割を説明できる
- 顧客別、月別、商品カテゴリ別の分析用テーブルを考えられる
- CTEを使ってデータマートの元SQLを書ける
- データマート作成時の粒度と指標定義を意識できる
1. データマートとは
データマートは、分析やBIで使いやすいように整えた表です。 元データをそのまま見るのではなく、よく使う粒度に集計したり、必要なdimensionを付けたりします。
たとえばECでは、次のようなデータマートが考えられます。
| データマート | 1行の粒度 | 用途 |
|---|---|---|
| 顧客別売上マート | 顧客1人 | 優良顧客分析、継続率確認 |
| 月別売上マート | 月1行 | 売上推移、前月比確認 |
| 商品カテゴリ別売上マート | カテゴリ1行 | 商品構成の確認 |
データマートは、分析の再利用性を高めるための表です。
2. 顧客別売上マートを作る
顧客ごとの注文回数、売上、最終注文日をまとめる例です。
WITH completed_orders AS (
SELECT
order_id,
customer_id,
order_date,
total_amount
FROM orders
WHERE status = 'completed'
)
SELECT
c.customer_id,
c.customer_name,
c.prefecture,
COUNT(o.order_id) AS order_count,
SUM(o.total_amount) AS total_sales,
MAX(o.order_date) AS last_order_date
FROM customers AS c
LEFT JOIN completed_orders AS o
ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name, c.prefecture;
LEFT JOIN にしているため、まだ注文していない顧客も残ります。
顧客全体を対象にした分析では、この違いが重要です。
3. 月別売上マートを作る
売上推移を見るなら、月単位のデータマートが便利です。
SELECT
DATE_TRUNC('month', order_date) AS order_month,
COUNT(*) AS order_count,
COUNT(DISTINCT customer_id) AS purchasing_customers,
SUM(total_amount) AS sales,
AVG(total_amount) AS average_order_amount
FROM orders
WHERE status = 'completed'
GROUP BY DATE_TRUNC('month', order_date)
ORDER BY order_month;
この表があれば、BIダッシュボードで月別売上、注文件数、購入顧客数を表示しやすくなります。
4. 商品カテゴリ別売上マートを作る
商品カテゴリ別の売上や販売数量を見る例です。
SELECT
p.category,
COUNT(DISTINCT oi.order_id) AS order_count,
SUM(oi.quantity) AS quantity_sold,
SUM(oi.quantity * oi.unit_price) AS sales
FROM order_items AS oi
JOIN products AS p
ON oi.product_id = p.product_id
GROUP BY p.category
ORDER BY sales DESC;
このデータマートでは、カテゴリが1行の粒度です。
商品単位で見たい場合は、product_id や product_name も粒度に含めます。
5. データマート作成時の注意点
データマートを作るときは、次の点を明確にします。
| 確認点 | 例 |
|---|---|
| 粒度 | 顧客1人、月1行、カテゴリ1行 |
| 指標定義 | 売上は完了注文のみか |
| 更新頻度 | 毎日更新か、手動更新か |
| 利用者 | 分析者向けか、経営レポート向けか |
データマートは便利ですが、定義が曖昧なまま増えると、似たような表が乱立します。 まずはよく使う問いに合わせて、最小限の表から作りましょう。
実務での使いどころ: よく使う分析を再利用できる形にする
データマートは、毎回複雑なJOINや集計を書かなくても分析できるように整えた表です。 たとえば、月別売上マートや顧客別購買マートがあると、BIやレポートで使いやすくなります。
| データマート | 使いどころ |
|---|---|
| 月別売上マート | 売上推移、前月比、前年比 |
| 顧客別購買マート | 優良顧客、休眠顧客、LTV分析 |
| 商品カテゴリ別売上マート | 商品戦略、在庫、販促分析 |
| 日別KPIマート | ダッシュボード、日次モニタリング |
データマートを作るときは、粒度を明確にします。 1行が「月」なのか「顧客」なのか「顧客×月」なのかで、使える分析が変わります。
また、マートに入れる指標の定義も重要です。 売上にキャンセルを含むか、日付は注文日か決済日か、更新頻度は日次かなどを決めておきましょう。
ミニ演習
次のデータマートについて、1行の粒度を考えてください。
- 月別売上マート。
- 顧客別購買マート。
- 商品カテゴリ別売上マート。
- 日別KPIマート。
まとめ
| 用語 | 意味 |
|---|---|
| データマート | 分析しやすい形に整えた表 |
| 粒度 | 1行が何を表すか |
| 指標定義 | 売上や顧客数の計算ルール |
| 再利用性 | 同じSQLを何度も書かずに使えること |
この章のキーメッセージ: データマートは、分析のための使いやすい表です。粒度と指標定義を明確にし、よく使う分析から整えていきましょう。
この章の確認
- データマートとは何ですか?
- 顧客別売上マートの1行は何を表しますか?
- 月別売上マートに入れると便利な指標を2つ挙げてください。
- データマートが増えすぎると、どのような問題が起きますか?