Teil unserer Data Analytics & BI-Serie
Den vollständigen Leitfaden lesenOdoo + Power BI: Vollständiger Analytics-Integrationsleitfaden
Odoo 19 Enterprise verfügt über eine solide integrierte Berichterstellung, aber für Unternehmen, die Self-Service-Analysen, systemübergreifende Datenmodellierung und Visualisierung auf Unternehmensniveau benötigen, ist Power BI die natürliche Ergänzung. Die Verbindung der Betriebsdaten von Odoo mit der Analyse-Engine von Power BI ermöglicht Erkenntnisse, die die nativen Berichte von Odoo nicht liefern können.
Dieser Leitfaden deckt alle Aspekte der Odoo-Power BI-Integration ab: Verbindungsarchitektur, Best Practices für die Datenmodellierung, Erstellung wichtiger Geschäfts-Dashboards, Erstellung von DAX-Kennzahlen, inkrementelle Aktualisierungskonfiguration und Bereitstellung in Microsoft Fabric für den Unternehmensbereich.
Wichtige Erkenntnisse
- Drei Verbindungsmethoden: PostgreSQL direkt, Odoo REST API und ODBC über Odoos Export – Der DirectQuery-Modus liefert Echtzeitdaten; Der Importmodus bietet eine bessere Leistung für große Datensätze – Das PostgreSQL-Schema von Odoo erfordert eine Denormalisierung für effiziente Power BI-Datenmodelle – Inkrementelle Aktualisierung reduziert die Ladezeit für große Tabellen (account.move, stock.move) – Sicherheit auf Zeilenebene in Power BI spiegelt die Zugriffskontrolle auf Unternehmensebene von Odoo wider – Gateway-Bereitstellung für lokales Odoo erforderlich; Cloud Odoo verbindet sich direkt – Microsoft Fabric (Power BI Premium) ermöglicht Odoo-Daten im Enterprise Lakehouse
- Schlüsselkennzahlen: Umsatz, Bruttomarge, Lagerumschlag, Forderungsalterung, OEE
Optionen der Integrationsarchitektur
Wählen Sie die richtige Verbindungsarchitektur basierend auf Ihren Odoo-Bereitstellungs- und Berichtsanforderungen.
Option 1: Direkte PostgreSQL-Verbindung (empfohlen)
Verbinden Sie Power BI über den PostgreSQL-Connector direkt mit der PostgreSQL-Datenbank von Odoo:
Vorteile:
- Voller Zugriff auf alle Odoo-Tabellen und Rohdaten
- Beste Leistung für komplexe Verknüpfungen
- Unterstützt sowohl den Import- als auch den DirectQuery-Modus
Nachteile: – Erfordert Netzwerkzugriff vom Power BI Gateway auf PostgreSQL – Änderungen im Datenmodell von Odoo erfordern die Aktualisierung von Power BI-Abfragen
- Der direkte Datenbankzugriff umgeht die Zugriffskontrolle von Odoo
Option 2: Odoo REST API
Stellen Sie eine Verbindung über den Web-Connector von Power BI mit der REST-API von Odoo her:
Vorteile:
- Funktioniert ohne Netzwerkzugriff auf PostgreSQL
- Respektiert die Zugriffsrechte von Odoo pro Benutzer
- Keine Datenbankanmeldeinformationen erforderlich
Nachteile:
- Langsamer als direktes PostgreSQL (ein API-Aufruf pro Tabelle) – Die Ratenbegrenzung wirkt sich auf große Datenmengen aus
- Bei großen Datensätzen ist eine effiziente Paginierung schwierig
Option 3: Export ins Data Warehouse
ETL Odoo-Daten in ein dediziertes Data Warehouse (Azure Synapse, Snowflake, BigQuery):
Vorteile:
- Maximale Leistung im großen Maßstab
- Entkoppelt BI von ERP
- Kann mehrere Quellsysteme integrieren
Nachteile:
- Höchste Infrastrukturkosten und Komplexität – Die Datenlatenz hängt vom ETL-Zeitplan ab (normalerweise 1 Stunde bis 24 Stunden). – Erfordert die Wartung der ETL-Pipeline
Empfohlene Architektur für die meisten Organisationen: Direktes PostgreSQL mit Power BI Gateway (lokal) oder direkte Verbindung (Cloud Odoo), Importmodus mit inkrementeller Aktualisierung, geplante Aktualisierung alle 1–4 Stunden.
Einrichten der PostgreSQL-Verbindung
Schritt 1: Netzwerkzugriff
Für lokales Odoo:
- Installieren Sie das On-Premises Data Gateway auf einem Server mit Netzwerkzugriff auf PostgreSQL
- Konfigurieren Sie das Gateway mit Ihren Microsoft 365-Anmeldeinformationen
- Öffnen Sie den PostgreSQL-Port (5432 oder 5433) vom Gateway-Server zum Odoo-DB-Server
Für Cloud Odoo (AWS, Azure, GCP): – Konfigurieren Sie die Sicherheitsgruppe/Firewall so, dass eingehende Daten aus den IP-Bereichen von Power BI zugelassen werden – Oder: Verwenden Sie das lokale Gateway auf einer Cloud-VM in derselben VPC
Schritt 2: Erstellen Sie einen schreibgeschützten Datenbankbenutzer
Verbinden Sie Power BI niemals mit Ihrem Hauptbenutzer der Odoo-Datenbank. Erstellen Sie einen dedizierten schreibgeschützten Benutzer:
-- 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;
Schritt 3: In Power BI Desktop konfigurieren
- Öffnen Sie Power BI Desktop → Daten abrufen → PostgreSQL-Datenbank
- Geben Sie ein:
- Server: Ihr PostgreSQL-Host (und Port, falls nicht 5432)
- Datenbank: Ihr Odoo-Datenbankname
- Benutzername: powerbi_reader
- Passwort: das schreibgeschützte Benutzerpasswort
- Wählen Sie den Verbindungsmodus: Import (empfohlen) oder DirectQuery
Wichtige Odoo-Tabellen für Power BI
Das Verständnis des PostgreSQL-Schemas von Odoo ist für die Erstellung genauer Datenmodelle unerlässlich.
Finanztabellen:
| Tabelle | Beschreibung | Schlüsselfelder |
|---|---|---|
account_move | Rechnungen, Rechnungen, Journaleinträge | move_type, Staat, Rechnungsdatum, Betrag_Gesamtbetrag, Währungs-ID |
account_move_line | Einzelposten in Journaleinträgen | move_id, account_id, lastschrift, kredit, menge, price_subtotal |
account_account | Kontenplan | Code, Name, Kontotyp |
account_payment | Debitoren-/Kreditorenzahlungen | Betrag, Zahlungsdatum, Bundesland, Partner-ID |
Verkaufstabellen:
| Tabelle | Beschreibung | Schlüsselfelder |
|---|---|---|
sale_order | Kundenaufträge | Name, Bundesland, Bestelldatum, Gesamtmenge, Partner-ID, Benutzer-ID |
sale_order_line | Verkaufsauftragszeilen | order_id, product_id, product_uom_qty, price_subtotal |
crm_lead | CRM-Möglichkeiten | Name, Bühnen-ID, erwarteter_Umsatz, Wahrscheinlichkeit, Benutzer-ID |
Inventartabellen:
| Tabelle | Beschreibung | Schlüsselfelder |
|---|---|---|
stock_quant | Aktuelle Lagerbestände | Produkt_ID, Standort_ID, Menge |
stock_move | Alle Lagerbewegungen | Produkt-ID, Status, Datum, Menge_fertig |
stock_picking | Liefer-/Empfangsdokumente | picking_type_id, Zustand, geplantes_Datum |
product_template | Produktstammdaten | Name, Listenpreis, Kategorie-ID, Typ |
Personalwesen und Gehaltsabrechnung:
| Tabelle | Beschreibung | Schlüsselfelder |
|---|---|---|
hr_employee | Mitarbeiter | Name, Abteilungs-ID, Job-ID, Firmen-ID |
hr_attendance | Zeiterfassung | Employee_id, check_in, check_out |
hr_payslip | Gehaltsabrechnungen | Employee_id, date_from, date_to, state |
Power BI-Datenmodelldesign
Star-Schema-Design für Odoo-Daten:
Konvertieren Sie das normalisierte Schema von Odoo in ein Sternschema für optimale Power BI-Leistung:
[Date Table] (dimension)
↓
[Sales Fact Table]
↓
[Product Dimension] ← [Product Category Dimension]
↓
[Customer Dimension] ← [Country Dimension]
↓
[Salesperson Dimension]
↓
[Company Dimension]
Power Query M-Code – Verkaufsfaktentabelle:
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
Wesentliche DAX-Kennzahlen
Umsatz und Marge:
// 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)
Bestandsmaßnahmen:
// 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
)
Alterung der Forderungen:
// 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
)
Wichtige Dashboard-Seiten
1. Executive-Dashboard
- Umsatz vs. Budget (Messdiagramm)
- Umsatztrend (Liniendiagramm, 13 Monate gleitend)
- Bruttomarge % (KPI-Karte mit Trend)
- Top 10 Kunden nach Umsatz (Balkendiagramm)
- Top 10 Produkte nach Umsatz (horizontale Leiste)
- Umsatz nach Region (ausgefüllte Karte)
2. Vertriebspipeline (CRM)
- Pipeline nach Stufe (Trichterdiagramm)
- Gewichteter Pipeline-Wert (KPI)
- Gewinn-/Verlustrate (Donut-Diagramm)
- Trend zur durchschnittlichen Geschäftsgröße
- Leistung des Vertriebsmitarbeiters (Matrixtabelle)
- Prognose vs. tatsächlich (Linie + Balken-Kombination)
3. Finanzübersicht
- GuV-Zusammenfassung (Tabelle mit YTD, YoY)
- Cash-Position (KPI)
- Forderungsalterung (gestapelter Balken)
- Fälligkeit der Verbindlichkeiten (gestapelter Balken)
- DSO-Trend (Liniendiagramm)
4. Inventar-Dashboard
- Bestandswert nach Kategorie (Treemap)
- Lagerumschlag pro Lager (Bar)
- Langsamdrehender Lagerbestand (Tabelle: Lagerbestand > 90 Tage)
- Lagerbestandsrisikopositionen (Tabelle: Deckungstage < 7)
- Punktwarnungen (Karten) nachbestellen
5. HR-Dashboard
- Mitarbeiterzahl nach Abteilung (Bar)
- Anwesenheit vs. geplante Stunden (Anzeige)
- Auslastung des Urlaubsguthabens (Matrix)
- Trend der Fluktuationsrate (Linie)
Inkrementelle Aktualisierung für große Tabellen
Die Tabellen account_move_line, stock_move und mail_message von Odoo wachsen auf Millionen von Zeilen an. Die inkrementelle Aktualisierung verhindert das Neuladen der gesamten Tabelle bei jeder Aktualisierung.
Inkrementelle Aktualisierung konfigurieren:
- Fügen Sie in Power Query die Parameter
RangeStartundRangeEnd(DateTime-Typ) hinzu. - Filtern Sie Ihre Datumsspalte:
Table.SelectRows(Source, each [write_date] >= RangeStart and [write_date] < RangeEnd) - Klicken Sie mit der rechten Maustaste auf die Tabelle im Bereich „Felder“ → „Inkrementelle Aktualisierung“.
- Einstellen: Letzte 12 Monate speichern, letzte 3 Tage aktualisieren
Odoo-Tabellen, die am meisten von der inkrementellen Aktualisierung profitieren:
account_move_line: Filtern nachdatestock_move: Filtern nachdatesale_order: Filtern nachdate_ordermail_message: Filtern nachdate
Sicherheit auf Zeilenebene
Implementieren Sie Row-Level Security (RLS) in Power BI, um die Zugriffskontrolle auf Unternehmensebene von Odoo widerzuspiegeln.
// RLS filter: user sees only their assigned companies
[company_id] IN
CALCULATETABLE(
VALUES(UserCompanyMapping[company_id]),
UserCompanyMapping[user_email] = USERPRINCIPALNAME()
)
Erstellen Sie eine UserCompanyMapping-Tabelle (verwaltet in Power BI oder synchronisiert von Odoo), die E-Mail-Adressen autorisierten Unternehmens-IDs zuordnet.
Häufig gestellte Fragen
Kann ich DirectQuery mit der PostgreSQL-Datenbank von Odoo für Echtzeitdaten verwenden?
Ja, aber mit Vorbehalten. DirectQuery auf Odoos PostgreSQL ist für Dashboards mit einfachen Abfragen machbar. Komplexe Dashboards mit vielen Kennzahlen sind langsam, da jede Visualisierung neue SQL-Abfragen für Ihre Produktionsdatenbank auslöst. Für die meisten Anwendungsfälle ist der Importmodus mit 1-stündiger Aktualisierung der bessere Kompromiss zwischen Aktualität und Leistung.
Wie gehe ich mit den Mehrwährungsdaten von Odoo in Power BI um?
Odoo speichert Beträge sowohl in der Transaktionswährung als auch in der Unternehmenswährung. Verwenden Sie das Feld amount_currency für die Originalwährung und debit/credit (oder price_subtotal) für den Gegenwert in der Unternehmenswährung. Verwenden Sie für die Konsolidierung auf Gruppenebene in Power BI die Unternehmenswährungsbeträge von Odoo und wenden Sie eine separate Währungsumrechnungsdimensionstabelle für eine konsistente Berichterstattung an.
Welche Auswirkungen hat die Aktualisierung von Power BI auf die Leistung der PostgreSQL-Datenbank von Odoo?
Bei einer vollständigen Aktualisierung des Power BI-Datensatzes werden mehrere analytische Abfragen gleichzeitig für PostgreSQL ausgeführt. Bei großen Odoo-Datenbanken (>50 GB) kann dies während des Aktualisierungsfensters erhebliche E/A- und CPU-Leistungen beanspruchen. Best Practices: Planen Sie Aktualisierungen außerhalb der Hauptverkehrszeiten (z. B. 2:00–4:00 Uhr), verwenden Sie eine Lesereplikat von PostgreSQL für Power BI-Abfragen und implementieren Sie inkrementelle Aktualisierungen, um den Abfrageumfang zu minimieren.
Kann ich Power BI über PostgreSQL mit der Odoo Community (kostenlose Version) verbinden?
Ja. Power BI stellt eine Verbindung zu jeder PostgreSQL-Datenbank her, unabhängig davon, welche Anwendung sie verwaltet. Das PostgreSQL-Schema der Odoo Community ist nahezu identisch mit dem Enterprise-Schema (abzüglich einiger Nur-Enterprise-Tabellen). Die Verbindungsmethode ist dieselbe; Stellen Sie einfach sicher, dass der schreibgeschützte Datenbankbenutzer Zugriff auf die Community-Datenbank hat.
Wie halte ich mein Power BI-Datenmodell synchron, wenn Odoo auf eine neue Version aktualisiert wird?
Odoo-Versions-Upgrades können Datenbanktabellen umbenennen oder neu strukturieren, insbesondere für Module, die einer erheblichen Umgestaltung unterzogen wurden. Führen Sie nach jedem Odoo-Upgrade einen Vergleich der Tabellenschemata zwischen alten und neuen Versionen durch, aktualisieren Sie Power Query-Abfragen, um auf umbenannte Spalten zu verweisen, und validieren Sie alle DAX-Kennzahlen anhand des neuen Schemas. Erstellen Sie eine Schemaänderungsprüfung in Ihr Migrations-Runbook.
Nächste Schritte
Der Aufbau einer Odoo + Power BI-Integration in Produktionsqualität erfordert Fachwissen in der Datenmodellierung, PostgreSQL-Kenntnisse und ein tiefes Verständnis des Odoo-Schemas. Bei richtiger Umsetzung stellt es eine einheitliche Analyseplattform bereit, die die Art und Weise, wie Ihr Führungsteam Entscheidungen trifft, verändert.
ECOSIRE liefert End-to-End-Analyselösungen für Odoo + Power BI – von der Datenbankarchitektur und Datenmodellierung bis hin zum Dashboard-Design, der DAX-Entwicklung und der Bereitstellung. Unser Team vereint Odoo-Expertise und Power BI-Spezialisierung.
Sprechen Sie mit ECOSIRE über Ihre Odoo Analytics-Integration →
Entdecken Sie die Power BI-Dienste von ECOSIRE →
Teilen Sie uns Ihre Berichtsanforderungen mit und wir entwerfen eine Power BI-Architektur, die Ihrem Führungsteam Echtzeit-Einblick in alle Dimensionen Ihrer Odoo-Operationen verschafft.
Geschrieben von
ECOSIRE Research and Development Team
Entwicklung von Enterprise-Digitalprodukten bei ECOSIRE. Einblicke in Odoo-Integrationen, E-Commerce-Automatisierung und KI-gestützte Geschäftslösungen.
Verwandte Artikel
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.
Mehr aus 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.