Data Analytics & BIシリーズの一部
完全ガイドを読むOdoo + Power BI: 完全な分析統合ガイド
Odoo 19 Enterprise には堅牢な組み込みレポート機能が含まれていますが、セルフサービス分析、クロスシステム データ モデリング、エンタープライズ レベルの視覚化を必要とする組織にとって、Power BI は自然な補完手段となります。 Odoo の運用データを Power BI の分析エンジンに接続すると、Odoo のネイティブ レポートでは提供できない洞察が得られます。
このガイドでは、接続アーキテクチャ、データ モデリングのベスト プラクティス、主要なビジネス ダッシュボードの構築、DAX メジャーの作成、増分更新構成、エンタープライズ規模向けの Microsoft Fabric への展開など、Odoo-Power BI 統合のあらゆる側面について説明します。
重要なポイント
- 3 つの接続方法: PostgreSQL 直接、Odoo REST API、Odoo のエクスポート経由の ODBC
- DirectQuery モードはリアルタイム データを提供します。インポート モードは大規模なデータセットのパフォーマンスを向上させます
- Odoo の PostgreSQL スキーマでは、効率的な Power BI データ モデルのために非正規化が必要です
- 増分更新により、大きなテーブルのロード時間が短縮されます (account.move、stock.move)
- Power BI の行レベルのセキュリティは、Odoo の企業レベルのアクセス制御を反映しています
- オンプレミスの Odoo にはゲートウェイの展開が必要です。クラウド Odoo は直接接続します
- Microsoft Fabric (Power BI Premium) により、エンタープライズ レイクハウスで Odoo データが有効になります
- 主要な指標: 収益、粗利益、在庫回転率、売掛金の経年劣化、OEE
統合アーキテクチャのオプション
Odoo の展開とレポートのニーズに基づいて、適切な接続アーキテクチャを選択してください。
オプション 1: PostgreSQL への直接接続 (推奨)
PostgreSQL コネクタを使用して、Power BI を Odoo の PostgreSQL データベースに直接接続します。
長所:
- すべての Odoo テーブルと生データへの完全アクセス
- 複雑な結合で最高のパフォーマンスを実現
- インポート モードと DirectQuery モードの両方をサポート
短所:
- Power BI Gateway から PostgreSQL へのネットワーク アクセスが必要
- Odoo のデータ モデルを変更するには、Power BI クエリの更新が必要です
- データベースへの直接アクセスは Odoo のアクセス制御をバイパスします
オプション 2: Odoo REST API
Odoo の REST API を使用して Power BI の Web コネクタ経由で接続します。
長所:
- PostgreSQL へのネットワーク アクセスなしで動作します
- ユーザーごとの Odoo のアクセス権を尊重します
- データベースの認証情報は必要ありません
短所:
- 直接 PostgreSQL よりも遅い (テーブルごとに 1 つの API 呼び出し)
- レート制限は大規模なデータのプルに影響します
- 大規模なデータセットの効率的なページネーションが困難
オプション 3: データ ウェアハウスへのエクスポート
ETL Odoo データを専用データ ウェアハウス (Azure Synapse、Snowflake、BigQuery) に変換します。
長所:
- 大規模なパフォーマンスで最大のパフォーマンスを実現
- BI を ERP から切り離す
- 複数のソースシステムを統合可能
短所:
- インフラストラクチャのコストと複雑さが最も高い
- データ遅延は ETL スケジュールによって異なります (通常は 1 時間から 24 時間)
- ETL パイプラインのメンテナンスが必要
ほとんどの組織に推奨されるアーキテクチャ: Power BI Gateway (オンプレミス) または直接接続 (クラウド Odoo) を使用した直接 PostgreSQL、増分更新を伴うインポート モード、1 ~ 4 時間ごとにスケジュールされた更新。
PostgreSQL 接続のセットアップ
ステップ 1: ネットワーク アクセス
オンプレミスの Odoo の場合:
- PostgreSQL にネットワーク アクセスできるサーバーに オンプレミス データ ゲートウェイ をインストールします
- Microsoft 365 資格情報を使用してゲートウェイを構成します
- ゲートウェイ サーバーから Odoo DB サーバーへの PostgreSQL ポート (5432 または 5433) を開きます。
クラウド Odoo (AWS、Azure、GCP) の場合:
- Power BI の IP 範囲からの受信を許可するようにセキュリティ グループ/ファイアウォールを構成する
- または: 同じ VPC 内のクラウド VM でオンプレミス ゲートウェイを使用します。
ステップ 2: 読み取り専用データベース ユーザーを作成する
Power BI をメインの Odoo データベース ユーザーに接続しないでください。専用の読み取り専用ユーザーを作成します。
-- Create read-only user for Power BI
CREATE USER powerbi_reader WITH PASSWORD 'strong_password_here';
-- Grant connection to database
GRANT CONNECT ON DATABASE your_odoo_db TO powerbi_reader;
-- Grant schema usage
GRANT USAGE ON SCHEMA public TO powerbi_reader;
-- Grant SELECT on all current and future tables
GRANT SELECT ON ALL TABLES IN SCHEMA public TO powerbi_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO powerbi_reader;
ステップ 3: Power BI Desktop で構成する
- Power BI Desktop を開く → データの取得 → PostgreSQL データベース
- 次のように入力します。
- サーバー: PostgreSQL ホスト (および 5432 でない場合はポート)
- データベース: Odoo データベース名
- ユーザー名: powerbi_reader
- パスワード: 読み取り専用ユーザーのパスワード
- 接続モードを選択します: インポート (推奨) または DirectQuery
Power BI の主要な Odoo テーブル
Odoo の PostgreSQL スキーマを理解することは、正確なデータ モデルを構築するために不可欠です。
財務表:
| 表 | 説明 | 主要なフィールド |
|---|---|---|
| コード0 | 請求書、請求書、仕訳帳 | move_type、state、invoice_date、amount_total、currency_id |
| コード0 | 仕訳帳の明細 | move_id、account_id、借方、貸方、数量、価格小計 |
| コード0 | 勘定科目表 | コード、名前、アカウントの種類 |
| コード0 | 顧客/ベンダーの支払い | 金額、支払い日、州、パートナー ID |
販売テーブル:
| 表 | 説明 | 主要なフィールド |
|---|---|---|
| コード0 | 販売注文 | 名前、州、注文日、合計金額、パートナー ID、ユーザー ID |
| コード0 | 販売注文明細 | order_id、product_id、product_uom_qty、price_小計 |
| コード0 | CRM の機会 | 名前、ステージ ID、期待収益、確率、ユーザー ID |
在庫テーブル:
| 表 | 説明 | 主要なフィールド |
|---|---|---|
| コード0 | 現在の在庫レベル | 製品 ID、場所 ID、数量 |
| コード0 | すべての在庫移動 | 製品 ID、状態、日付、完了数量 |
| コード0 | 納品・受領書類 | 選択タイプ ID、状態、予定日 |
| コード0 | 製品マスターデータ | 名前、リスト価格、カテゴリID、タイプ |
人事と給与:
| 表 | 説明 | 主要なフィールド |
|---|---|---|
| コード0 | 従業員 | 名前、部門 ID、ジョブ ID、会社 ID |
| コード0 | 時間と出席 | 従業員 ID、チェックイン、チェックアウト |
| コード0 | 給与明細 | 従業員 ID、開始日、終了日、州 |
Power BI データ モデルの設計
Odoo データのスター スキーマ設計:
Power BI のパフォーマンスを最適化するために、Odoo の正規化スキーマをスター スキーマに変換します。
[Date Table] (dimension)
↓
[Sales Fact Table]
↓
[Product Dimension] ← [Product Category Dimension]
↓
[Customer Dimension] ← [Country Dimension]
↓
[Salesperson Dimension]
↓
[Company Dimension]
Power Query M コード — 販売ファクト テーブル:
let
Source = PostgreSQL.Database("your-odoo-server:5433", "your_db"),
SaleOrderLine = Source{[Schema="public", Item="sale_order_line"]}[Data],
SaleOrder = Source{[Schema="public", Item="sale_order"]}[Data],
ProductTemplate = Source{[Schema="public", Item="product_template"]}[Data],
ProductProduct = Source{[Schema="public", Item="product_product"]}[Data],
// Join order lines with orders
JoinWithOrder = Table.NestedJoin(
SaleOrderLine, {"order_id"},
SaleOrder, {"id"},
"Order", JoinKind.Inner
),
// Expand order columns needed
ExpandOrder = Table.ExpandTableColumn(
JoinWithOrder, "Order",
{"name", "state", "date_order", "partner_id", "user_id", "company_id"},
{"order_name", "order_state", "date_order", "partner_id", "user_id", "company_id"}
),
// Filter: confirmed and done orders only
FilterState = Table.SelectRows(
ExpandOrder,
each [order_state] = "sale" or [order_state] = "done"
),
// Select and rename final columns
SelectColumns = Table.SelectColumns(FilterState, {
"id", "order_id", "product_id", "date_order", "partner_id",
"user_id", "company_id", "product_uom_qty", "price_unit",
"price_subtotal", "price_tax", "price_total"
}),
// Change types
ChangedTypes = Table.TransformColumnTypes(SelectColumns, {
{"date_order", type datetime},
{"price_subtotal", type number},
{"product_uom_qty", type number}
})
in
ChangedTypes
重要な DAX 対策
収益と利益率:
// Total Revenue (Net)
Revenue = SUMX(SalesFact, SalesFact[price_subtotal])
// Revenue MTD
Revenue MTD =
CALCULATE([Revenue], DATESMTD(DateTable[Date]))
// Revenue YTD
Revenue YTD =
CALCULATE([Revenue], DATESYTD(DateTable[Date]))
// Revenue vs Prior Period
Revenue vs PY =
VAR CurrentRevenue = [Revenue]
VAR PriorYearRevenue =
CALCULATE([Revenue], SAMEPERIODLASTYEAR(DateTable[Date]))
RETURN
DIVIDE(CurrentRevenue - PriorYearRevenue, PriorYearRevenue, 0)
// Gross Margin
Gross Margin =
SUMX(SalesFact,
SalesFact[price_subtotal] -
(RELATED(ProductDim[standard_price]) * SalesFact[product_uom_qty])
)
// Gross Margin %
Gross Margin % =
DIVIDE([Gross Margin], [Revenue], 0)
在庫対策:
// Current Stock Value
Stock Value =
SUMX(
StockQuant,
StockQuant[quantity] * RELATED(ProductDim[standard_price])
)
// Inventory Turnover (annualized)
Inventory Turnover =
DIVIDE(
[COGS Annualized],
[Average Inventory Value],
0
)
// Days of Inventory Outstanding
DIO =
DIVIDE(365, [Inventory Turnover], 0)
// Stockout % (products with zero stock)
Stockout Rate =
DIVIDE(
COUNTROWS(FILTER(StockQuant, StockQuant[quantity] <= 0)),
COUNTROWS(StockQuant),
0
)
債権の経過期間:
// Current (0-30 days)
AR Current =
CALCULATE(
SUM(ARFact[amount_residual]),
ARFact[days_overdue] <= 0
)
// 1-30 days overdue
AR 1-30 Days =
CALCULATE(
SUM(ARFact[amount_residual]),
ARFact[days_overdue] >= 1 && ARFact[days_overdue] <= 30
)
// Days Sales Outstanding
DSO =
DIVIDE(
SUM(ARFact[amount_residual]),
[Revenue] / 365,
0
)
主要なダッシュボード ページ
1.エグゼクティブ ダッシュボード
- 収益と予算 (ゲージ チャート)
- 収益傾向 (折れ線グラフ、13 か月ローリング)
- 粗利益率 % (傾向のある KPI カード)
- 売上高上位 10 社の顧客 (棒グラフ)
- 売上高上位 10 製品 (横棒)
- 地域別の収益 (塗りつぶされた地図)
2.販売パイプライン (CRM)
- ステージ別のパイプライン (ファネル チャート)
- 加重パイプライン値 (KPI)
- 勝敗率(ドーナツチャート)
- 平均取引規模の傾向
- 営業担当者の業績(マトリックス表)
- 予測と実績 (ライン + バーの組み合わせ)
3.財務概要
- 損益概要(YTD、YoYの表)
- キャッシュポジション(KPI)
- 売掛金の経過期間(積み上げバー)
- 買掛金の経過期間(積み上げバー)
- DSO トレンド (折れ線グラフ)
4.在庫ダッシュボード
- カテゴリ別株価(ツリーマップ)
- 倉庫別在庫回転率(バー)
- 動きの遅い在庫 (表: 在庫 > 90 日)
- 在庫切れのリスク項目 (表: カバー日数 < 7)
- ポイントアラート(カード)を並べ替えます
5.人事ダッシュボード
- 部門別の従業員数 (バー)
- 出席者数と予定時間数 (ゲージ)
- 休暇残高利用状況(マトリックス)
- 離職率の推移(線)
大規模なテーブルの増分リフレッシュ
Odoo の account_move_line、stock_move、mail_message テーブルは数百万行まで増加します。増分リフレッシュにより、リフレッシュのたびにテーブル全体がリロードされるのを防ぎます。
増分更新を構成します:
- Power Query で、パラメーター
RangeStartおよびRangeEnd(DateTime 型) を追加します。 - 日付列をフィルターします:
Table.SelectRows(Source, each [write_date] >= RangeStart and [write_date] < RangeEnd) - [フィールド] ペインでテーブルを右クリック → [増分更新]
- 設定: 過去 12 か月を保存、過去 3 日間を更新
増分更新から最も恩恵を受ける Odoo テーブル:
account_move_line:dateによるフィルターstock_move:dateによるフィルターsale_order:date_orderによるフィルターmail_message:dateによるフィルター
行レベルのセキュリティ
Power BI に行レベル セキュリティ (RLS) を実装して、Odoo の企業レベルのアクセス制御を反映します。
// RLS filter: user sees only their assigned companies
[company_id] IN
CALCULATETABLE(
VALUES(UserCompanyMapping[company_id]),
UserCompanyMapping[user_email] = USERPRINCIPALNAME()
)
電子メール アドレスを承認された企業 ID にマッピングする UserCompanyMapping テーブル (Power BI で維持されるか、Odoo から同期される) を作成します。
よくある質問
リアルタイム データ用に Odoo の PostgreSQL データベースで DirectQuery を使用できますか?
はい、ただし注意点があります。 Odoo の PostgreSQL 上の DirectQuery は、単純なクエリを含むダッシュボードに使用できます。多くのメジャーを含む複雑なダッシュボードは、各ビジュアルが運用データベースに対して新しい SQL クエリをトリガーするため、速度が遅くなります。ほとんどのユースケースでは、1 時間更新のインポート モードが、鮮度とパフォーマンスの間のより良いトレードオフです。
Power BI で Odoo の複数通貨データを処理するにはどうすればよいですか?
Odoo は、取引通貨と会社通貨の両方で金額を保存します。元の通貨には amount_currency フィールドを使用し、同等の会社通貨には debit/credit (または price_subtotal) を使用します。 Power BI でグループレベルの連結を行う場合は、Odoo の会社通貨金額を使用し、一貫したレポートを作成するために別の通貨換算ディメンション テーブルを適用します。
Power BI が更新されると、Odoo の PostgreSQL データベースのパフォーマンスにどのような影響がありますか?
Power BI データセットを完全に更新すると、PostgreSQL に対して複数の分析クエリが同時に実行されます。大規模な Odoo データベース (>50GB) の場合、更新ウィンドウ中に大量の I/O と CPU が消費される可能性があります。ベスト プラクティス: オフピーク時間 (午前 2 時から午前 4 時など) に更新をスケジュールし、Power BI クエリに PostgreSQL のリード レプリカを使用し、増分更新を実装してクエリの範囲を最小限に抑えます。
PostgreSQL 経由で Power BI を Odoo Community (無料版) に接続できますか?
はい。 Power BI は、管理するアプリケーションに関係なく、任意の PostgreSQL データベースに接続します。 Odoo Community の PostgreSQL スキーマは Enterprise とほぼ同じです (一部の Enterprise 専用テーブルを除く)。接続方法は同じです。読み取り専用データベース ユーザーがコミュニティ データベースにアクセスできることを確認するだけです。
Odoo が新しいバージョンにアップグレードされたときに、Power BI データ モデルの同期を保つにはどうすればよいですか?
Odoo のバージョンをアップグレードすると、特に大幅なリファクタリングが行われたモジュールの場合、データベース テーブルの名前が変更されたり、再構成されたりする可能性があります。 Odoo のアップグレード後: 古いバージョンと新しいバージョンの間でテーブル スキーマの比較を実行し、名前が変更された列を参照するように Power Query クエリを更新し、新しいスキーマに対してすべての DAX メジャーを検証します。スキーマ変更チェックを移行 Runbook に組み込みます。
次のステップ
運用グレードの Odoo + Power BI 統合を構築するには、データ モデリングの専門知識、PostgreSQL の知識、Odoo のスキーマについての深い理解が必要です。正しく実行されれば、経営陣の意思決定方法を変える統合分析プラットフォームが提供されます。
ECOSIRE は、データベース アーキテクチャとデータ モデリングからダッシュボード設計、DAX 開発、展開に至るまで、エンドツーエンドの Odoo + Power BI 分析ソリューションを提供します。私たちのチームは、Odoo の専門知識と Power BI の専門分野の橋渡しをします。
Odoo Analytics の統合について ECOSIRE にご相談ください →
ECOSIRE の Power BI サービスを詳しく見る →
レポート要件を共有していただければ、Odoo 運用のあらゆる側面をリーダー チームがリアルタイムで把握できる Power BI アーキテクチャを設計します。
執筆者
ECOSIRE Research and Development Team
ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。
関連記事
Odoo Accounting vs QuickBooks: Detailed Comparison 2026
In-depth 2026 comparison of Odoo Accounting vs QuickBooks covering features, pricing, integrations, scalability, and which platform fits your business needs.
Building Financial Dashboards with Power BI
Step-by-step guide to building financial dashboards in Power BI covering data connections to accounting systems, DAX measures for KPIs, P&L visualisations, and best practices.
AI + ERP Integration: How AI is Transforming Enterprise Resource Planning
Learn how AI is transforming ERP systems in 2026—from intelligent automation and predictive analytics to natural language interfaces and autonomous operations.
Data Analytics & BIのその他の記事
Building Financial Dashboards with Power BI
Step-by-step guide to building financial dashboards in Power BI covering data connections to accounting systems, DAX measures for KPIs, P&L visualisations, and best practices.
Case Study: Power BI Analytics for Multi-Location Retail
How a 14-location retail chain unified their reporting in Power BI connected to Odoo, replacing 40 spreadsheets with one dashboard and cutting reporting time by 78%.
GoHighLevel + Power BI: Advanced Reporting and Analytics
Connect GoHighLevel to Power BI for advanced marketing analytics. Build executive dashboards, track multi-channel ROI, and create automated reports that go beyond GHL's native reporting.
GoHighLevel Reporting and Analytics: Measuring What Matters
Master GoHighLevel reporting and analytics. Learn to build custom dashboards, track ROI across channels, measure funnel conversion, and make data-driven marketing decisions.
Odoo Events Module: Planning, Registration, and Analytics
Complete guide to Odoo 19 Events: create events, manage registrations, sell tickets, track attendance, and analyze event ROI with native ERP integration.
Using OpenClaw AI Agents to Automate Power BI Reports
How OpenClaw AI agents automate Power BI report generation, distribution, and data preparation — delivering analytics at scale without manual BI developer intervention.