EC/D2C·11分で読める

ECサイトのKPIツリーの作り方 — 売上・粗利から施策へ分解する設計

ECサイト・D2CのKPIを、売上と粗利からセッション、CVR、客単価、継続率、広告費へ分解する方法を解説。KPIツリーの計算式、指標辞書、会議での使い方、ShopifyとGA4へ実装する際の注意点を整理します。

執筆・編集:

ECD2CKPIツリー売上粗利CVRLTVShopifyGA4
シェア

ECのKPIツリーは「数字の一覧」ではない

ECのKPIツリーとは、売上や粗利のような最上位指標を、現場が動かせる要因まで計算式で分解したものです。ダッシュボードに指標を並べるだけでは、 売上が下がった理由も、次に何を直すべきかも決まりません。

たとえば売上が前月を下回ったとき、「集客が減った」「購入率が落ちた」「注文単価が下がった」を 同じ階層で切り分けられれば、広告、サイト改善、商品企画のどこに手を入れるかが決まります。 KPIツリーの目的は、数字を網羅することではなく、結果指標と打ち手の因果仮説を接続することです。

この記事ではツリーの作り方に集中します。経営会議で優先する指標そのものを選びたい場合は、EC/D2Cで最初に見るKPIの絞り方を先に参照してください。

最上位を売上と粗利のどちらに置くか

最初に決めるのはツールではなく、経営上の問いです。成長量を管理したいなら売上、 値引き・返品・原価を含めて稼ぐ力を管理したいなら粗利を最上位に置きます。 実務では、売上ツリーと粗利ツリーを並べて持つと、成長と採算を混同せずに済みます。

最上位指標答えたい問い主な分解先注意点
純売上どの顧客・商品・導線が成長を作ったか注文数、平均注文額、セッション、CVR税・送料を含む「総売上」と定義を混ぜない
粗利売上のうち、商品原価を引いて何が残ったか純売上、売上原価、商品・顧客別の粗利率商品原価の未登録・過去原価の上書きに注意する
貢献利益広告や配送など変動費まで引いて何が残ったか粗利、広告費、決済手数料、変動配送費会計上の粗利と社内管理指標を別名で管理する

Shopify公式の定義では、純売上は商品売上から値引きと返品を差し引いた値で、 粗利は純売上から売上原価を差し引いた値です。税・送料・追加手数料を含むTotal salesとは別物です。 自社の会計基準に合わせる場合も、まずシステム標準の定義との差分を書き残します。

売上を分解するKPIツリーと計算式

ECの売上は、次の2方向から分解すると原因を探しやすくなります。

分解A:購買行動から見る

純売上 = 注文数 × 平均注文額(AOV) 注文数 = セッション数 × 購入率(CVR) AOV = 商品売上(値引き後・返品前)÷ 注文数

この分解はサイト改善と相性がよく、売上変化を「流入量」「購入率」「注文単価」に切り分けられます。 ただし、GA4のセッションとShopifyの注文は計測主体・タイムゾーン・同意状況が異なるため、 掛け算が完全一致することを目的にしません。行動の方向性はGA4、受注金額はShopifyを基準にし、 差分の許容方法を決めます。

分解B:顧客構成から見る

純売上 = 新規顧客売上 + 既存顧客売上 新規顧客売上 = 新規購入者数 × 新規AOV 既存顧客売上 = リピート購入者数 × リピート頻度 × リピートAOV

この分解は獲得と継続の責任を分けるのに向きます。「売上は伸びたが、新規広告への依存が強まった」 「購入者数は横ばいだが、既存顧客の頻度が上がった」といった構造が見えます。 新規・既存の判定は注文時点までの購入履歴で行い、顧客マスタの現在値だけで過去を再判定しないようにします。

ツリーの末端は、担当者が動かせる指標にする

  • セッション数:チャネル別流入、広告クリック、自然検索流入
  • CVR:商品詳細閲覧率、カート投入率、決済開始率、購入完了率
  • AOV:購入点数、商品単価、セット率、値引き率
  • リピート:2回目購入率、購入間隔、休眠復帰率

「ブランド力」のように直接観測できない概念は、ツリーの末端に置きません。 指名検索、自然流入、新規顧客アンケートなど、観測可能な代理指標へ落とします。

粗利を分解するKPIツリーと計算式

売上ツリーだけでは、値引きや低粗利商品の販売で「伸びているように見える」状態を検知できません。 粗利側では、売上の質を分解します。

純売上 = 総商品売上 - 値引き - 返品 粗利 = 純売上 - 売上原価(COGS) 粗利率 = 粗利 ÷ 純売上 管理上の貢献利益 = 粗利 - 広告費 - 決済手数料 - 変動配送費 - その他変動費

貢献利益は会社ごとの管理指標です。倉庫費、送料無料負担、ポイント、返品処理費など、 どこまでを変動費に含めるかを合意し、会計上の粗利と同じ名前で呼ばないようにします。

粗利低下を切り分ける順番

  1. 純売上が落ちたのか、粗利率が落ちたのかを分ける
  2. 粗利率なら、商品構成・値引き率・返品率・原価のどれが動いたかを見る
  3. 商品構成なら、カテゴリ・SKU・新規/既存顧客・販売チャネルへ降りる
  4. 最後に施策、在庫、価格、広告配分の変更履歴と突き合わせる

原価が商品マスタの現在値しかない場合、過去の粗利が原価更新のたびに変わることがあります。 注文明細に販売時点原価を保持するか、原価履歴を有効期間付きで管理すると再現性が上がります。

指標辞書を先に作る

KPIツリーを図だけで終わらせないために、各ノードを指標辞書へ登録します。 同じ「売上」でも、税・送料・キャンセル・返品を含めるかで数字は変わります。

項目記入例決める理由
指標名・説明純売上:値引き・返品後の商品売上会議で同じ言葉を使う
総商品売上 - 値引き - 返品BIとSQLの実装を一致させる
粒度注文明細 × 売上/返品発生日集計重複を防ぐ
除外条件テスト注文、取消、社内購入担当者ごとの暗黙ルールをなくす
データ源Shopify注文・返金・注文明細正本を明確にする
オーナーEC事業責任者定義変更の承認者を決める
更新・確定時点日次更新、月次は締め後に確定速報値と確定値を区別する

指標辞書と物理データを接続する考え方は、統合オントロジーの設計で詳しく解説しています。

Shopify・GA4・広告データの実装例

ツリーは1枚でも、データの正本は役割ごとに分けます。受注と返金はShopify、サイト行動はGA4、 広告費は各広告媒体または会計側を使い、DWHで日付・通貨・チャネル名を揃えます。

最小のデータモデル

  • order_lines:注文ID、顧客ID、SKU、数量、商品売上、値引き、販売時原価
  • refund_lines:返金ID、元注文ID、SKU、返金額、返金処理日
  • customers:顧客ID、初回注文日時、獲得チャネル
  • ga4_funnel_daily:日付、チャネル、セッション、商品閲覧、カート、購入イベント
  • ad_spend_daily:日付、媒体、キャンペーン、費用、クリック

日次KPIマートのSQL例

次は考え方を示す簡略例です。実際には返金の計上日、税、通貨、キャンセル状態を自社定義に合わせます。

with order_daily as (
  select
    order_date as date,
    sum(gross_item_sales) as gross_sales,
    sum(discount_amount) as discounts,
    sum(return_amount) as returns,
    sum(cost_of_goods_sold) as cogs,
    count(distinct order_id) as orders
  from analytics.order_line_finance
  where is_test_order = false
  group by 1
),
funnel_daily as (
  select date, sum(sessions) as sessions
  from analytics.ga4_funnel_daily
  group by 1
)
select
  o.date,
  o.gross_sales - o.discounts - o.returns as net_sales,
  (o.gross_sales - o.discounts - o.returns) - o.cogs as gross_profit,
  safe_divide(o.gross_sales - o.discounts, o.orders) as aov,
  safe_divide(o.orders, f.sessions) as observed_session_cvr
from order_daily o
left join funnel_daily f using (date)

実装前に固定する4つの境界

  1. 日付:注文日と返金日をどちらの期間に計上するか
  2. タイムゾーン:Shopifyストア、GA4プロパティ、DWHの基準を揃える
  3. 通貨:ストア通貨・決済通貨・レポート通貨の換算時点を決める
  4. 識別子:Shopify注文ID・顧客ID・商品variant IDを分析キーとして保持する

具体的な連携方式はShopifyとBigQueryの連携方法GA4をBigQueryに入れた後の実務を参照してください。

会議でKPIツリーを使う運用

KPIツリーは作成時より、定例会議での使い方が重要です。会議では全ノードを順に読むのではなく、 上から差分を見て、異常がある枝だけを降ります。

会議前

  • 前週・前月・計画との差分を同じ条件で計算する
  • データ遅延、原価未登録、返金未反映を品質フラグとして表示する
  • 価格改定、キャンペーン、在庫切れなどの変更履歴を添える

会議中

  1. 最上位の差分を確認する
  2. 差分への寄与が大きい枝を特定する
  3. 事実と仮説を分けて記録する
  4. 次回までの打ち手、担当者、確認指標を1つに絞る

会議後

実行した施策とKPIの変化を紐付けます。ツリーの枝で説明できない変化が続くなら、 新しい指標を無条件に足すのではなく、式・粒度・データ品質・因果仮説の順に見直します。

よくある失敗と修正方法

  1. 足し算と掛け算が混在している — 注文数×AOVと、新規売上+既存売上は別の切り口です。枝を交差させず、並列のビューに分けます。
  2. GA4の購入金額を会計上の売上として使う — 行動計測には欠損や同意の影響があります。受注金額の正本はコマース・会計データに置きます。
  3. 返品を注文日に遡及するか返金日に計上するか決めていない — 速報と月次確定でルールが変わらないよう、指標辞書に日付基準を書きます。
  4. 末端が担当者の行動につながらない — 「顧客満足」を置いて終わらず、返品理由、再購入、問い合わせ分類など観測可能な指標へ落とします。
  5. 全指標を毎週レビューする — 上位の異常から枝を降り、意思決定に必要な範囲だけを見ます。

作成チェックリスト

  • 最上位指標が、今期の経営判断と一致している
  • 親子が式で接続され、単位が一致している
  • 各末端に担当部署と具体的な打ち手がある
  • 指標辞書に式、粒度、除外条件、正本、オーナーがある
  • ShopifyとGA4の差分を異常ではなく計測境界として説明できる
  • 原価未登録、返金遅延、テスト注文を検知できる
  • 会議で「どの枝を見て、何を決めたか」を残せる

参考にした公式一次情報

まとめ

  • KPIツリーは指標一覧ではなく、結果を打ち手まで式で分解する設計図
  • 売上は「セッション×CVR×AOV」と「新規+既存」の2方向で見る
  • 粗利は純売上、原価、商品構成、値引き、返品まで分解する
  • 指標辞書で式、粒度、除外条件、正本、オーナーを固定する
  • 会議では上位から異常のある枝だけを降り、担当と打ち手を決める
記事が役に立ったらシェアしてください
シェア