青の統計学-DS Playground-

データマート: 分析しやすい表を作る

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_idproduct_name も粒度に含めます。


5. データマート作成時の注意点

データマートを作るときは、次の点を明確にします。

確認点
粒度 顧客1人、月1行、カテゴリ1行
指標定義 売上は完了注文のみか
更新頻度 毎日更新か、手動更新か
利用者 分析者向けか、経営レポート向けか

データマートは便利ですが、定義が曖昧なまま増えると、似たような表が乱立します。 まずはよく使う問いに合わせて、最小限の表から作りましょう。


実務での使いどころ: よく使う分析を再利用できる形にする

データマートは、毎回複雑なJOINや集計を書かなくても分析できるように整えた表です。 たとえば、月別売上マートや顧客別購買マートがあると、BIやレポートで使いやすくなります。

データマート 使いどころ
月別売上マート 売上推移、前月比、前年比
顧客別購買マート 優良顧客、休眠顧客、LTV分析
商品カテゴリ別売上マート 商品戦略、在庫、販促分析
日別KPIマート ダッシュボード、日次モニタリング

データマートを作るときは、粒度を明確にします。 1行が「月」なのか「顧客」なのか「顧客×月」なのかで、使える分析が変わります。

また、マートに入れる指標の定義も重要です。 売上にキャンセルを含むか、日付は注文日か決済日か、更新頻度は日次かなどを決めておきましょう。

ミニ演習

次のデータマートについて、1行の粒度を考えてください。

  1. 月別売上マート。
  2. 顧客別購買マート。
  3. 商品カテゴリ別売上マート。
  4. 日別KPIマート。

まとめ

用語 意味
データマート 分析しやすい形に整えた表
粒度 1行が何を表すか
指標定義 売上や顧客数の計算ルール
再利用性 同じSQLを何度も書かずに使えること

この章のキーメッセージ: データマートは、分析のための使いやすい表です。粒度と指標定義を明確にし、よく使う分析から整えていきましょう。


この章の確認

  1. データマートとは何ですか?
  2. 顧客別売上マートの1行は何を表しますか?
  3. 月別売上マートに入れると便利な指標を2つ挙げてください。
  4. データマートが増えすぎると、どのような問題が起きますか?

関連演習