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 TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Transformieren Sie Ihr Unternehmen mit Odoo ERP
Kompetente Odoo-Implementierung, Anpassung und Support zur Optimierung Ihrer Abläufe.
Verwandte Artikel
Buchhaltungs-KPIs: 30 Finanzkennzahlen, die jedes Unternehmen verfolgen sollte
Verfolgen Sie 30 wichtige Buchhaltungs-KPIs, einschließlich Rentabilität, Liquidität, Effizienz und Wachstumskennzahlen wie Bruttomarge, EBITDA, DSO, DPO und Lagerumschlag.
KI-gestützte Kundensegmentierung: Von RFM zum Predictive Clustering
Erfahren Sie, wie KI die Kundensegmentierung von statischer RFM-Analyse in dynamisches prädiktives Clustering umwandelt. Implementierungsleitfaden mit Python, Odoo und echten ROI-Daten.
KI zur Supply-Chain-Optimierung: Sichtbarkeit, Vorhersage und Automatisierung
Transformieren Sie Lieferkettenabläufe mit KI: Bedarfserkennung, Lieferantenrisikobewertung, Routenoptimierung, Lagerautomatisierung und Störungsvorhersage. Leitfaden 2026.
Mehr aus Data Analytics & BI
Buchhaltungs-KPIs: 30 Finanzkennzahlen, die jedes Unternehmen verfolgen sollte
Verfolgen Sie 30 wichtige Buchhaltungs-KPIs, einschließlich Rentabilität, Liquidität, Effizienz und Wachstumskennzahlen wie Bruttomarge, EBITDA, DSO, DPO und Lagerumschlag.
Data Warehouse für Business Intelligence: Architektur und Implementierung
Bauen Sie ein modernes Data Warehouse für Business Intelligence auf. Vergleichen Sie Snowflake, BigQuery, Redshift, lernen Sie ETL/ELT, dimensionale Modellierung und Power BI-Integration.
Power BI-Kundenanalyse: RFM-Segmentierung und Lifetime-Wert
Implementieren Sie RFM-Segmentierung, Kohortenanalyse, Visualisierung der Abwanderungsvorhersage, CLV-Berechnung und Customer Journey Mapping in Power BI mit DAX-Formeln.
Power BI vs. Excel: Wann Sie Ihre Geschäftsanalysen aktualisieren sollten
Vergleich von Power BI und Excel für Geschäftsanalysen zu Datengrenzen, Visualisierung, Echtzeitaktualisierung, Zusammenarbeit, Governance, Kosten und Migration.
Predictive Analytics für Unternehmen: Ein praktischer Implementierungsleitfaden
Implementieren Sie prädiktive Analysen in den Bereichen Vertrieb, Marketing, Betrieb und Finanzen. Modellauswahl, Datenanforderungen, Power BI-Integration und Leitfaden zur Datenkultur.
Erstellen von Finanz-Dashboards mit Power BI
Schritt-für-Schritt-Anleitung zum Erstellen von Finanz-Dashboards in Power BI mit Datenverbindungen zu Buchhaltungssystemen, DAX-Kennzahlen für KPIs, GuV-Visualisierungen und Best Practices.