ERP データベースは、注文の挿入、在庫の更新、支払いの処理といったトランザクション用に最適化されています。 e コマース プラットフォームは、商品ページの提供とチェックアウトの処理に最適化されています。どちらも、ビジネス上の意思決定を促す質問、つまり返品後に最も収益性が高い製品カテゴリはどれか、という質問に答えるために最適化されていません。生涯価値が増加している顧客セグメントはどれですか?サプライチェーンのボトルネックはどこにあるのでしょうか?
データ分析とBIシリーズの一部
完全ガイドを読むERP データベースは、注文の挿入、在庫の更新、支払いの処理といったトランザクション用に最適化されています。 e コマース プラットフォームは、商品ページの提供とチェックアウトの処理に最適化されています。どちらも、ビジネス上の意思決定を促す質問、つまり返品後に最も収益性が高い製品カテゴリはどれか、という質問に答えるために最適化されていません。生涯価値が増加している顧客セグメントはどれですか?サプライチェーンのボトルネックはどこにあるのでしょうか?
そのギャップを埋めるのがデータ ウェアハウスです。スター スキーマは、分析クエリを高速、直感的、保守可能にする設計パターンです。
重要なポイント
- スター スキーマは、ビジネス メトリクス (ファクト) を説明的なコンテキスト (ディメンション) から分離し、クエリを直感的かつ高速にします。
- ERP および e コマース分析では、ビジネスの中核となる質問をカバーするために、通常 4 ~ 6 個のファクト テーブルと 8 ~ 12 個のディメンション テーブルが必要です。
- ETL パイプラインは、すべてのデータを再処理せずに履歴分析を処理するために、ゆっくりと変化するディメンションによる増分読み込みを使用する必要があります。
- 適切に設計されたスター スキーマにより、正規化された運用データベースに直接クエリを実行する場合と比較して、クエリの複雑さが 60 ~ 80 パーセント軽減されます。
ERP に直接クエリしてみませんか?
多くの企業は、別のデータ ウェアハウスに投資する前に、運用データベースに対して分析クエリを実行しようとします。これは 3 つの理由で失敗します。
パフォーマンス。 分析クエリは数百万行をスキャンし、集計を計算し、多くのテーブルを結合します。これらを運用データベースに対して実行すると、すべてのユーザーの ERP の速度が低下します。 6 か月分の注文データをスキャンするレポートでは、テーブルがロックされ、Shopify ストアでのチェックアウトのパフォーマンスが低下する可能性があります。
複雑さ 運用データベースは正規化されており、データの冗長性を最小限に抑えるように設計されています。 「月ごとの製品カテゴリ別の総収益」のような単純な質問では、Odoo の PostgreSQL データベース内の 8 つのテーブルを結合する必要がある場合があります。スター スキーマでは、同じクエリが 2 つのテーブルを結合します。
歴史。 運用システムはデータを上書きします。顧客が住所を変更すると、古い住所は失われます。製品が再分類されると、履歴レポートが遡って変更されます。データ ウェアハウスは、ゆっくりと変化するディメンションを通じて履歴を保存します。
マルチソース 中堅企業は通常、ビジネス データを含む 3 ~ 7 つのシステムを実行しています。データ ウェアハウスはそれらすべてを統合します。 ERP データ用の ETL パイプライン のガイドでは、抽出と読み込みについて詳しく説明しています。
スタースキーマの基礎
スター スキーマは、データをファクト テーブルとディメンション テーブルの 2 種類のテーブルに編成します。ファクト テーブルは中心 (スターの本体) に配置され、ディメンション テーブルがその周囲 (スターのポイント) に配置されます。
ファクトテーブル
ファクト テーブルには、測定可能なビジネス イベント、つまり何が起こったかが保存されます。各行は、意味のある最も低い粒度で 1 つのイベントを表します。
特徴:
- 数値メジャー (量、量、期間、カウント) が含まれています。
- ディメンション テーブルへの外部キーを含む
- 通常、ウェアハウス内で最大のテーブルです
- 新しいイベントが発生すると継続的に成長します
- ビジネス上の質問をサポートする最も細かい粒度である必要があります
寸法表
ディメンション テーブルには、ビジネス イベントの誰が、何を、どこで、いつ、どのようにして説明するコンテキストが保存されます。
特徴:
- テキスト属性と階層が含まれます
- 比較的小さい (数十億行ではなく、数千行から数百万行)
- 時間の経過とともにゆっくりと変化します
- クエリを簡素化するために非正規化されています
- レポートのラベル、フィルター、グループ化を提供します。
星の形
Dim: Customer
|
Dim: Product --- Fact: Sales --- Dim: Time
|
Dim: Location
「製品カテゴリ別、四半期別、地域別の総収益」のようなクエリは、売上ファクト テーブルを 3 つのディメンション テーブルに結合します。サブクエリや複雑なネストされた結合はなく、単純なスター結合だけです。
ERP および e コマース用のファクト テーブルの設計
Odoo ERP と Shopify eCommerce を実行している典型的な中堅企業では、中核となる分析ユースケースをカバーするために 4 ~ 6 個のファクト テーブルが必要です。
事実: 売上
販売ファクトテーブルが基礎となります。各行は、販売注文の 1 つの明細項目を表します。
| コラム | タイプ | 説明 |
|---|---|---|
| セールキー | ビッグINT | 代理キー |
| 日付キー | INT | FK からディムまで: 時間 |
| 顧客キー | INT | FK からディム: 顧客 |
| プロダクトキー | INT | FK から Dim: 製品 |
| ロケーションキー | INT | FK からディムまで: 場所 |
| チャンネルキー | INT | FK からディム: チャンネル |
| 営業担当者キー | INT | FK からディムへ: 従業員 |
| 数量 | 10 進数 | 販売台数 |
| 単価 | 10 進数 | ユニットあたりの価格 |
| 割引額 | 10 進数 | 割引適用 |
| 税額 | 10 進数 | 税金がかかります |
| 純額 | 10 進数 | 割引後の税引前の収益 |
| コスト_金額 | 10 進数 | 売上原価 |
| 総利益率 | 10 進数 | net_amount からcost_amount を引いた値 |
粒度: 注文品目ごとに 1 日あたり 1 行。
事実: 在庫
在庫レベルをイベントではなく定期的なスナップショットとして追跡します。
| コラム | タイプ | 説明 |
|---|---|---|
| 在庫キー | ビッグINT | 代理キー |
| 日付キー | INT | FK からディムまで: 時間 (スナップショットの日付) |
| プロダクトキー | INT | FK から Dim: 製品 |
| 倉庫キー | INT | FK からディムまで: 倉庫 |
| 手持数量 | 10 進数 | 現在の在庫 |
| 数量_予約済み | 10 進数 | 注文に割り当てられます |
| 入手可能な数量 | 10 進数 | 手持ちマイナス予約 |
| リオーダーポイント | 10 進数 | 再注文前の最小値 |
| 在庫値 | 10 進数 | 数量×単価 |
粒度: 倉庫ごとに 1 日あたり製品ごとに 1 行。
事実: 生産
製造会社の場合、生産事実は作業指示を追跡します。
| コラム | タイプ | 説明 |
|---|---|---|
| プロダクションキー | ビッグINT | 代理キー |
| 日付キー | INT | FK からディムまで: 時間 |
| プロダクトキー | INT | FK から Dim: 製品 |
| ワークセンターキー | INT | FK からディムへ: ワークセンター |
| 計画数量 | 10 進数 | ターゲット出力 |
| 実際の数量 | 10 進数 | 実際の出力 |
| スクラップ数量 | 10 進数 | 廃棄物 |
| 計画期間_時間 | 10 進数 | 予想時間 |
| 実際の継続時間 | 10 進数 | 実際の時間 |
| 利回り | 10 進数 | 実績 / 計画数量 |
粒度: 1 日あたり、製品ごとに作業指示書ごとに 1 行。
追加のファクトテーブル
- 事実: 購入 --- ベンダー、製品、および時間ごとの調達支出。
- 事実: サポート チケット --- エージェント、顧客、カテゴリ別のチケット量、応答時間、解決時間。
- 事実: Web トラフィック --- ページ、ソース、キャンペーンごとのページ ビュー、セッション、コンバージョン。 マーケティング アトリビューション分析 に役立ちます。
ディメンション テーブルの設計
ディメンション テーブルは、ファクト テーブル番号を意味のあるものにするコンテキストを提供します。主な原則は非正規化です。つまり、クエリを簡素化するために冗長データを保存します。
薄暗い: 時間
時間次元はすべてのスター スキーマに存在します。カレンダー属性を事前に計算して、クエリでの複雑な日付関数を回避します。
| コラム | 例 | 目的 |
|---|---|---|
| 日付キー | 20260315 | 整数キー (YYYYMMDD) |
| 完全な日付 | 2026-03-15 | 日付値 |
| 曜日 | 日曜日 | グループ化 |
| 月の日 | 15 | グループ化 |
| 年の週 | 11 | グループ化 |
| 月名 | 3月 | グループ化 |
| 月番号 | 3 | 並べ替え |
| 四半期 | Q1 | グループ化 |
| 年 | 2026年 | グループ化 |
| 会計四半期 | FQ4 | 会計年度の調整 |
| 会計年度 | 2026年度 | 会計年度の調整 |
| 週末 | 本当 | フィルタリング |
| 休日です | 偽 | フィルタリング |
薄暗い: 顧客
CRM、会計、および e コマース システムからの顧客属性を単一のディメンションに非正規化します。
| コラム | 説明 |
|---|---|
| 顧客キー | 代理キー |
| 顧客ID | 自然キー (Odoo ID) |
| 顧客名 | フルネーム |
| 顧客のメールアドレス | メールアドレス |
| 顧客セグメント | エンタープライズ、中小企業、個人 |
| 業界 | 製造、小売、サービス |
| 国 | 国名 |
| 地域 | 地理的地域 |
| 市 | 都市 |
| 取得元 | オーガニック、有料、紹介 |
| 取得日 | 最初の購入日 |
| rfm_セグメント | チャンピオン、忠誠心、危険にさらされている |
| 生涯価値層 | 高、中、低 |
rfm_segment 列と lifetime_value_tier 列は、RFM 分析 から派生した計算フィールドであり、ETL パイプラインによって定期的に更新されます。
薄暗い: 製品
| コラム | 説明 |
|---|---|
| プロダクトキー | 代理キー |
| 製品ID | 自然キー |
| 製品名 | 表示名 |
| スク | 在庫管理単位 |
| カテゴリ_l1 | トップレベルのカテゴリ |
| カテゴリ_l2 | サブカテゴリ |
| カテゴリ_l3 | サブサブカテゴリ |
| ブランド | ブランド名 |
| 単価 | 現在の標準コスト |
| リスト価格 | 現在の定価 |
| 重量 | 配送重量 |
| アクティブです | 現在販売中 |
ゆっくりと変化する次元
顧客がニューヨークからロンドンに移動した場合、データ ウェアハウスは何をすべきでしょうか?答えはビジネス上の質問によって異なります。
タイプ 1: 上書き
古い値を新しい値に置き換えます。顧客の都市はロンドンになり、過去のすべての注文にロンドンが表示されるようになりました。属性の履歴の正確性が重要でない場合にこれを使用します。
タイプ 2: 新しい行を追加
新しい都市、発効日、および有効期限を含む顧客用の新しい行を作成します。過去の注文は引き続き古い行 (ニューヨーク) を指し、新しい注文は新しい行 (ロンドン) を指します。これは、分析に影響を与える属性 (顧客セグメント、従業員部門、製品カテゴリ) に対する最も一般的なアプローチです。
| 顧客キー | 顧客ID | 市 | 発効日 | 有効期限 | 現在の状態 |
|---|---|---|---|---|---|
| 1001 | CUST-042 | ニューヨーク | 2024-01-15 | 2026-02-28 | 偽 |
| 1002 | CUST-042 | ロンドン | 2026-03-01 | 9999-12-31 | 本当 |
タイプ 3: 新しい列の追加
古い値と新しい値の両方を別の列に保存します。前後を比較する必要があるが、完全な履歴は必要ない場合に便利です。実際にはあまり一般的ではありません。
中堅企業の場合は、顧客セグメント、従業員部門、製品カテゴリ、地理的属性にタイプ 2 を使用します。倉庫をシンプルに保つために、その他すべてにタイプ 1 を使用します。
ETL デザイン パターン
ETL (抽出、変換、ロード) プロセスは、データをソース システムからウェアハウスに移動します。 ERP および e コマース データに適した設計パターンには次のものがあります。
増分ロード
実行のたびにすべてのデータを再ロードするのではなく、最後に正常にロードされたタイムスタンプを追跡し、それ以降に変更されたレコードのみを処理します。 Odoo の write_date フィールドと Shopify の updated_at パラメーターを使用すると、これが簡単になります。
1. Query source: SELECT * FROM sale_order_line WHERE write_date > last_load_timestamp
2. Transform: Map source fields to warehouse columns, look up dimension keys
3. Load: INSERT new rows, UPDATE changed rows (upsert)
4. Update: Set last_load_timestamp to current run start time
サロゲートキーの管理
ディメンション テーブルでは、ナチュラル キー (Odoo ID、Shopify ID) の代わりにサロゲート キー (自動インクリメント整数) が使用されます。これにより、ソース システムのキー形式からウェアハウスが切り離され、異なるシステムに競合する ID スキームがある場合のマルチソースの統合が処理されます。
遅れて到着するディメンション
場合によっては、ファクト レコードが対応するディメンション レコードより前に到着することがあります。つまり、注文がまだ同期されていない新規顧客を参照している場合です。これは、完全なディメンション レコードが到着したときに更新されるプレースホルダー ディメンション行で処理します。
更新スケジュール
| データ型 | リフレッシュ頻度 | 理論的根拠 |
|---|---|---|
| 販売取引 | 15 ~ 60 分ごと | ほぼリアルタイムの収益追跡 |
| インベントリのスナップショット | 4 ~ 6 時間ごと | 精度とデータベース負荷のバランスをとる |
| 顧客の寸法 | 毎日 | 変更は頻繁ではありません |
| 製品寸法 | 毎日 | 変更は頻繁ではありません |
| 財務データ | 毎日(閉店後) | 会計ワークフローに依存 |
| マーケティングデータ | 1 ~ 4 時間ごと | キャンペーンの最適化にはより新しいデータが必要です |
リアルタイム要件については、ストリーミング分析 のガイドをご覧ください。
クエリのパフォーマンスの最適化
適切に設計されたスター スキーマは、その単純な結合パターンにより、すでに良好なパフォーマンスを発揮します。追加の最適化には以下が含まれます。
インデックス。 ファクト テーブル内のすべてのディメンション外部キーと、一般的にフィルタリングされるディメンション属性 (日付範囲、顧客セグメント、製品カテゴリ) にインデックスを作成します。
マテリアライズド ビュー 一般的なクエリを事前に集計します: 製品カテゴリ別の日次収益、倉庫別の週次在庫レベル、チャネル別の月次顧客獲得。 ETL をロードするたびにマテリアライズド ビューを更新します。
パーティション化。 大きなファクト テーブルを日付 (月ごとまたは四半期ごと) でパーティション化します。日付範囲でフィルタリングするクエリは、関連するパーティションのみをスキャンします。
列統計。 クエリ プランナーが最適な決定を下せるように、一括読み込み後に ANALYZE を使用して PostgreSQL 統計を最新の状態に保ちます。
これらの最適化により、ビジネス ユーザーがパフォーマンスを懸念することなくアドホック クエリを実行できる セルフサービス BI エクスペリエンスがサポートされます。
よくある質問
データ ウェアハウスを正当化するには、会社の規模はどれくらい必要ですか?
最小サイズはありませんが、分析のために結合する必要がある複数のデータ ソースがある場合、運用データベースのクエリによって運用システムの速度が低下している場合、または手動のデータ収集とレポート作成に週 10 時間を超える場合には、投資する価値があります。従業員が 30 人以上で、少なくとも 2 つのシステム (ERP と e コマース) を備えているほとんどの企業は、倉庫の恩恵を受けています。
Snowflake や BigQuery などのクラウド データ ウェアハウスを使用する必要がありますか?
中規模企業の場合、PostgreSQL はほとんどの分析ワークロードを適切に処理し、コストが大幅に低くなります。 Snowflake のようなクラウド ウェアハウスは、データが 1 TB を超える場合、コスト最適化のためにコンピューティングをストレージから分離する必要がある場合、または組織間で複雑なデータ共有要件がある場合に魅力的になります。 PostgreSQL から始めて、規模が大きくなったら移行してください。
データ ウェアハウスの構築にはどれくらいの時間がかかりますか?
1 つのファクト テーブル (売上)、4 つのディメンション テーブル、および Odoo と Shopify を接続する ETL パイプラインを備えた最小限の実行可能なウェアハウスには、経験豊富なチームの場合 4 ~ 8 週間かかります。ファクト テーブルの追加、徐々に変化するディメンション、およびデータ品質の監視には、ファクト テーブルごとにさらに 4 ~ 8 週間かかります。すべての主要なビジネス分野をカバーする包括的な倉庫を構築するには、3 ~ 6 か月の計画を立てます。
次は何ですか
適切に設計されたスター スキーマは、セルフサービス ダッシュボード から 予測モデル、埋め込み分析 に至るまで、あらゆる分析機能の基盤です。これは、企業の意思決定方法を変える、より広範な BI 戦略 の一部です。
ECOSIRE は、Odoo、Shopify、GoHighLevel を実行している企業向けにデータ ウェアハウスと分析パイプラインを構築します。当社の Odoo コンサルタント チームは、お客様のビジネス モデルに合わせたウェアハウス スキームを設計し、その上に OpenClaw AI サービス の予測分析を重ねます。
お問い合わせ データ ウェアハウス アーキテクチャについてご相談ください。
ECOSIRE によって発行 --- Odoo ERP、Shopify eCommerce、OpenClaw AI にわたる AI を活用したソリューションで企業のスケールアップを支援します。
執筆者
ECOSIRE Teamテクニカルライティング
ECOSIRE のテクニカルライティングチームは、Odoo ERP、Shopify による EC、AI エージェント、Power BI による分析、GoHighLevel による自動化、そしてエンタープライズソフトウェアのベストプラクティスを扱っています。私たちのガイドは、企業が十分な情報に基づいてテクノロジーを判断できるよう支援します。
関連記事
電子商取引のための AI コンテンツ生成: 商品説明、SEO など
AI を使用して e コマース コンテンツを拡張します: 商品説明、SEO メタ タグ、電子メールのコピー、ソーシャル メディア。品質管理フレームワークとブランドの声の一貫性に関するガイド。
AI を活用したダイナミックプライシング: リアルタイムで収益を最適化
AI 動的価格設定を実装し、需要弾力性モデリング、競合他社の監視、倫理的な価格設定戦略により収益を最適化します。アーキテクチャと ROI のガイド。
電子商取引向け AI 不正検出: 販売を妨げずに収益を保護
AI 詐欺検出を実装すると、誤検知率を 2% 未満に抑えながら、不正取引の 95% 以上を捕捉できます。 ML スコアリング、行動分析、ROI ガイド。
データ分析とBIのその他の記事
会計 KPI: すべての企業が追跡すべき 30 の財務指標
収益性、流動性、効率性、粗利益、EBITDA、DSO、DPO、在庫回転数などの成長指標を含む 30 の重要な会計 KPI を追跡します。
ビジネス インテリジェンスのためのデータ ウェアハウス: アーキテクチャと実装
ビジネス インテリジェンスのための最新のデータ ウェアハウスを構築します。 Snowflake、BigQuery、Redshift を比較し、ETL/ELT、ディメンション モデリング、Power BI 統合について学びます。
Power BI 顧客分析: RFM セグメンテーションとライフタイム バリュー
DAX 数式を使用して、RFM セグメンテーション、コホート分析、チャーン予測の視覚化、CLV 計算、カスタマー ジャーニー マッピングを Power BI に実装します。
Power BI と Excel: ビジネス分析をアップグレードする時期
データ制限、視覚化、リアルタイム更新、コラボレーション、ガバナンス、コスト、移行をカバーするビジネス分析に関する Power BI と Excel の比較。
ビジネスのための予測分析: 実践的な実装ガイド
販売、マーケティング、運営、財務全体にわたって予測分析を実装します。モデルの選択、データ要件、Power BI 統合、およびデータ文化ガイド。
Power BI を使用した財務ダッシュボードの構築
Power BI で財務ダッシュボードを構築するためのステップバイステップ ガイド。会計システムへのデータ接続、KPI の DAX 測定、損益の視覚化、ベスト プラクティスをカバーします。