Data Analytics & BI serimizin bir parçası
Tam kılavuzu okuyunOdoo + Power BI: Eksiksiz Analitik Entegrasyon Kılavuzu
Odoo 19 Enterprise sağlam yerleşik raporlama içerir ancak self servis analitiği, sistemler arası veri modellemesi ve kurumsal düzeyde görselleştirmeye ihtiyaç duyan kuruluşlar için Power BI doğal bir tamamlayıcıdır. Connecting Odoo's operational data to Power BI's analytical engine unlocks insights that Odoo's native reports can't provide.
Bu kılavuz, Odoo-Power BI entegrasyonunun her yönünü kapsar: bağlantı mimarisi, en iyi veri modelleme uygulamaları, temel iş kontrol panelleri oluşturma, DAX ölçümü oluşturma, artımlı yenileme yapılandırması ve kurumsal ölçek için Microsoft Fabric'te dağıtım.
Önemli Çıkarımlar
- Üç bağlantı yöntemi: PostgreSQL direct, Odoo REST API ve Odoo'nun dışa aktarımı yoluyla ODBC
- DirectQuery modu gerçek zamanlı veriler sağlar; İçe aktarma modu, büyük veri kümeleri için daha iyi performans sağlar
- Odoo'nun PostgreSQL şeması, verimli Power BI veri modelleri için denormalizasyon gerektirir
- Artımlı yenileme, büyük tablolar için yükleme süresini azaltır (account.move,stock.move)
- Power BI'daki Satır Düzeyinde Güvenlik, Odoo'nun şirket düzeyindeki erişim kontrolünü yansıtır
- Şirket içi Odoo için ağ geçidi dağıtımı gereklidir; bulut Odoo doğrudan bağlanır
- Microsoft Fabric (Power BI Premium), kurumsal göl evinde Odoo verilerinin kullanılmasına olanak sağlar
- Temel ölçümler: gelir, brüt kar marjı, stok devir hızı, alacakların yaşlandırılması, OEE
Entegrasyon Mimarisi Seçenekleri
Odoo dağıtım ve raporlama ihtiyaçlarınıza göre doğru bağlantı mimarisini seçin.
Seçenek 1: Doğrudan PostgreSQL Bağlantısı (Önerilen)
PostgreSQL bağlayıcısını kullanarak Power BI'ı doğrudan Odoo'nun PostgreSQL veritabanına bağlayın:
Artıları:
- Tüm Odoo tablolarına ve ham verilere tam erişim
- Karmaşık birleştirmeler için en iyi performans
- Hem İçe Aktarma hem de DirectQuery modlarını destekler
Eksileri:
- Power BI Ağ Geçidi'nden PostgreSQL'e ağ erişimi gerektirir
- Odoo'nun veri modelindeki değişiklikler Power BI sorgularının güncellenmesini gerektirir
- Doğrudan veritabanı erişimi, Odoo'nun erişim kontrolünü atlar
Seçenek 2: Odoo REST API
Odoo'nun REST API'sini kullanarak Power BI'ın Web bağlayıcısı aracılığıyla bağlanın:
Artıları:
- PostgreSQL'e ağ erişimi olmadan çalışır
- Odoo'nun kullanıcı başına erişim haklarına saygı duyar
- Veritabanı kimlik bilgilerine gerek yok
Eksileri:
- Doğrudan PostgreSQL'den daha yavaştır (tablo başına bir API çağrısı)
- Hız sınırlaması büyük veri çekimlerini etkiler
- Büyük veri kümeleri için verimli bir şekilde sayfalandırmanın zor olması
Seçenek 3: Veri Ambarına Aktarma
ETL Odoo verilerini özel bir veri ambarına (Azure Synapse, Snowflake, BigQuery):
Artıları:
- Geniş ölçekte maksimum performans
- BI'yı ERP'den ayırır
- Birden fazla kaynak sistemini entegre edebilir
Eksileri:
- En yüksek altyapı maliyeti ve karmaşıklığı
- Veri gecikmesi ETL planına bağlıdır (genellikle 1 saatten 24 saate kadar)
- ETL boru hattı bakımı gerektirir
Çoğu kuruluş için önerilen mimari: Power BI Ağ Geçidi (şirket içi) veya doğrudan bağlantı (bulut Odoo) ile Doğrudan PostgreSQL, artımlı yenileme ile içe aktarma modu, 1-4 saatte bir planlanmış yenileme.
PostgreSQL Bağlantısını Kurma
1. Adım: Ağ erişimi
Şirket içi Odoo için:
- Şirket İçi Veri Ağ Geçidini PostgreSQL'e ağ erişimi olan bir sunucuya yükleyin
- Ağ geçidini Microsoft 365 kimlik bilgilerinizle yapılandırın
- Ağ geçidi sunucusundan Odoo DB sunucusuna PostgreSQL bağlantı noktasını (5432 veya 5433) açın
Bulut Odoo için (AWS, Azure, GCP):
- Güvenlik grubunu/güvenlik duvarını Power BI'ın IP aralıklarından gelen girişlere izin verecek şekilde yapılandırın
- Veya: aynı VPC'deki bir bulut sanal makinesinde şirket içi ağ geçidini kullanın
2. Adım: Salt okunur bir veritabanı kullanıcısı oluşturun
Power BI'ı asla ana Odoo veritabanı kullanıcınıza bağlamayın. Özel bir salt okunur kullanıcı oluşturun:
-- 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. Adım: Power BI Desktop'ta yapılandırın
- Power BI Desktop'ı açın → Veri Al → PostgreSQL Veritabanı
- Girin:
- Sunucu: PostgreSQL sunucunuz (ve 5432 değilse bağlantı noktası)
- Veritabanı: Odoo veritabanı adınız
- Kullanıcı adı: powerbi_reader
- Şifre: salt okunur kullanıcı şifresi
- Bağlantı modunu seçin: İçe Aktar (önerilir) veya DirectQuery
Power BI için Önemli Odoo Tabloları
Odoo'nun PostgreSQL şemasını anlamak, doğru veri modelleri oluşturmak için çok önemlidir.
Finansal tablolar:
| Tablo | Açıklama | Anahtar Alanlar |
|---|---|---|
| KOD0 | Faturalar, faturalar, yevmiye kayıtları | taşıma_türü, eyalet, fatura_tarihi, miktar_toplam, para_nodu |
| KOD0 | Günlük girişlerindeki satır öğeleri | move_id, account_id, borç, kredi, miktar, fiyat_alttoplam |
| KOD0 | Hesap planı | kod, ad, hesap_türü |
| KOD0 | Müşteri/satıcı ödemeleri | tutar, ödeme_tarihi, eyalet, partner_id |
Satış tabloları:
| Tablo | Açıklama | Anahtar Alanlar |
|---|---|---|
| KOD0 | Satış siparişleri | ad, eyalet, tarih_sipariş, miktar_toplam, iş ortağı_kimliği, kullanıcı_kimliği |
| KOD0 | Satış siparişi satırları | sipariş_kimliği, ürün_kimliği, ürün_uom_adet, fiyat_alttoplam |
| KOD0 | CRM fırsatları | ad, aşama_kimliği, beklenen_gelir, olasılık, kullanıcı_kimliği |
Envanter tabloları:
| Tablo | Açıklama | Anahtar Alanlar |
|---|---|---|
| KOD0 | Mevcut envanter seviyeleri | ürün_kimliği, konum_kimliği, miktar |
| KOD0 | Tüm stok hareketleri | ürün_kimliği, durum, tarih, miktar_done |
| KOD0 | Teslimat/makbuz belgeleri | toplama_tipi_kimliği, durum, planlanan_tarih |
| KOD0 | Ürün ana verileri | ad, liste_fiyatı, kategori_kimliği, tür |
İK ve Bordro:
| Tablo | Açıklama | Anahtar Alanlar |
|---|---|---|
| KOD0 | Çalışanlar | adı, departman_kimliği, iş_kimliği, şirket_kimliği |
| KOD0 | Zaman ve katılım | çalışan_kimliği, check_in, check_out |
| KOD0 | Maaş bordroları | çalışan_kimliği, başlangıç tarihi, bitiş tarihi, eyalet |
Power BI Veri Modeli Tasarımı
Odoo verileri için yıldız şeması tasarımı:
Optimum Power BI performansı için Odoo'nun normalleştirilmiş şemasını yıldız şemasına dönüştürün:
[Date Table] (dimension)
↓
[Sales Fact Table]
↓
[Product Dimension] ← [Product Category Dimension]
↓
[Customer Dimension] ← [Country Dimension]
↓
[Salesperson Dimension]
↓
[Company Dimension]
Power Query M kodu — Satış Bilgi Tablosu:
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
Temel DAX Önlemleri
Gelir ve marj:
// 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)
Envanter önlemleri:
// 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
)
Alacakların yaşlandırması:
// 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
)
Anahtar Kontrol Paneli Sayfaları
1. Yönetici Kontrol Paneli
- Gelir ve bütçe (gösterge grafiği)
- Gelir eğilimi (çizgi grafik, 13 aylık hareketli)
- Brüt kar marjı %'si (trendli KPI kartı)
- Gelire göre ilk 10 müşteri (çubuk grafik)
- Gelire göre ilk 10 ürün (yatay çubuk)
- Bölgeye göre gelir (doldurulmuş harita)
2. Satış Hattı (CRM)
- Aşamaya göre ardışık düzen (huni grafiği)
- Ağırlıklı ardışık düzen değeri (KPI)
- Kazanma/kaybetme oranı (halka grafiği)
- Ortalama anlaşma büyüklüğü eğilimi
- Satış temsilcisi performansı (matris tablosu)
- Tahmin ve gerçek (çizgi + çubuk kombinasyonu)
3. Finansal Genel Bakış
- Kâr ve Zarar özeti (YTD, YoY ile tablo)
- Nakit pozisyonu (KPI)
- Alacakların yaşlandırılması (yığılmış çubuk)
- Borçların yaşlandırılması (yığılmış çubuk)
- DSO trendi (çizgi grafik)
4. Envanter Kontrol Paneli
- Kategoriye göre hisse senedi değeri (ağaç haritası)
- Depoya göre stok devir hızı (çubuk)
- Yavaş hareket eden envanter (tablo: stok > 90 gün)
- Stok yokluğu riski kalemleri (tablo: gün kapsamı < 7)
- Yeniden sıralama noktası uyarıları (kartlar)
5. İK Kontrol Paneli
- Bölüme göre personel sayısı (çubuk)
- Katılım ve planlanan saat (gösterge)
- Bakiye kullanımını bırakın (matris)
- Devir oranı eğilimi (çizgi)
Büyük Tablolar için Artımlı Yenileme
Odoo'nun account_move_line, stock_move ve mail_message tabloları milyonlarca satıra ulaşır. Artımlı yenileme, her yenilemede tam tablonun yeniden yüklenmesini önler.
Artımlı yenilemeyi yapılandırın:
- Power Query'de
RangeStartveRangeEndparametrelerini ekleyin (DateTime türü) - Tarih sütununuzu filtreleyin:
Table.SelectRows(Source, each [write_date] >= RangeStart and [write_date] < RangeEnd) - Alanlar bölmesinde tabloya sağ tıklayın → Artımlı Yenileme
- Ayarlayın: son 12 ayda saklayın, son 3 günde yenileyin
Artımlı yenilemeden en çok yararlanan Odoo tabloları:
account_move_line:date'ye göre filtrelestock_move:date'ye göre filtrelesale_order:date_order'e göre filtrelemail_message:date'e göre filtrele
Satır Düzeyinde Güvenlik
Odoo'nun şirket düzeyindeki erişim kontrolünü yansıtmak için Power BI'da Satır Düzeyinde Güvenlik (RLS) uygulayın.
// RLS filter: user sees only their assigned companies
[company_id] IN
CALCULATETABLE(
VALUES(UserCompanyMapping[company_id]),
UserCompanyMapping[user_email] = USERPRINCIPALNAME()
)
E-posta adreslerini yetkili şirket kimlikleriyle eşleyen bir UserCompanyMapping tablosu oluşturun (Power BI'da tutulur veya Odoo'dan senkronize edilir).
Sıkça Sorulan Sorular
Gerçek zamanlı veriler için DirectQuery'yi Odoo'nun PostgreSQL veritabanıyla kullanabilir miyim?
Evet, ancak uyarılarla. Odoo'nun PostgreSQL'indeki DirectQuery, basit sorgulara sahip kontrol panelleri için uygundur. Her görsel, üretim veritabanınıza karşı yeni SQL sorgularını tetiklediğinden, birçok ölçüm içeren karmaşık kontrol panelleri yavaş olacaktır. Çoğu kullanım durumunda, 1 saatlik yenilemeli İçe Aktarma modu, tazelik ve performans arasında daha iyi bir denge sağlar.
Odoo'nun çoklu para birimi verilerini Power BI'da nasıl işleyebilirim?
Odoo, tutarları hem işlem para biriminde hem de şirket para biriminde saklar. Orijinal para birimi için KOD0 alanını ve şirketin para birimi eşdeğeri için KOD1/KOD2 (veya KOD3) alanını kullanın. Power BI'da grup düzeyinde birleştirme için Odoo'nun şirket para birimi tutarlarını kullanın ve tutarlı raporlama için ayrı bir para birimi dönüştürme boyutu tablosu uygulayın.
Power BI yenilendiğinde Odoo'nun PostgreSQL veritabanı üzerindeki performans etkisi nedir?
Tam Power BI veri kümesi yenilemesi, PostgreSQL'de aynı anda birden çok analitik sorguyu çalıştırır. Büyük Odoo veritabanları için (>50 GB), yenileme penceresi sırasında bu durum önemli miktarda G/Ç ve CPU tüketebilir. En iyi uygulamalar: yenilemeleri yoğun olmayan saatlerde (ör. 02:00-4:00) zamanlayın, Power BI sorguları için PostgreSQL'in okuma kopyasını kullanın ve sorgu kapsamını en aza indirmek için artımlı yenileme uygulayın.
Power BI'ı PostgreSQL aracılığıyla Odoo Topluluğu'na (ücretsiz sürüm) bağlayabilir miyim?
Evet. Power BI, hangi uygulamanın yönettiğine bakılmaksızın herhangi bir PostgreSQL veritabanına bağlanır. Odoo Topluluğu'nun PostgreSQL şeması Enterprise ile neredeyse aynıdır (bazı yalnızca Enterprise tabloları hariç). Bağlantı yöntemi aynıdır; salt okunur veritabanı kullanıcısının Topluluk veritabanına erişebildiğinden emin olun.
Odoo yeni bir sürüme yükseltildiğinde Power BI veri modelimi nasıl senkronize halde tutabilirim?
Odoo sürüm yükseltmeleri, özellikle önemli ölçüde yeniden düzenleme yapılan modüller için veritabanı tablolarını yeniden adlandırabilir veya yeniden yapılandırabilir. Herhangi bir Odoo yükseltmesinden sonra: eski ve yeni sürümler arasında tablo şemalarının karşılaştırmasını çalıştırın, Power Query sorgularını yeniden adlandırılan sütunlara başvuracak şekilde güncelleyin ve tüm DAX ölçümlerini yeni şemaya göre doğrulayın. Geçiş runbook'unuzda bir şema değişikliği kontrolü oluşturun.
Sonraki Adımlar
Üretim düzeyinde bir Odoo + Power BI entegrasyonu oluşturmak, veri modelleme uzmanlığı, PostgreSQL bilgisi ve Odoo şemasının derinlemesine anlaşılmasını gerektirir. Doğru yapıldığında, liderlik ekibinizin karar verme şeklini dönüştüren birleşik bir analiz platformu sunar.
ECOSIRE, veritabanı mimarisi ve veri modellemeden kontrol paneli tasarımı, DAX geliştirme ve dağıtımına kadar uçtan uca Odoo + Power BI analiz çözümleri sunar. Ekibimiz Odoo uzmanlığı ile Power BI uzmanlığı arasında köprü kuruyor.
Odoo Analytics Entegrasyonunuz Hakkında ECOSIRE ile Konuşun →
ECOSIRE'ın Power BI Hizmetlerini keşfedin →
Raporlama gereksinimlerinizi paylaşın, biz de liderlik ekibinize Odoo operasyonlarınızın her boyutunda gerçek zamanlı görünürlük sağlayan bir Power BI mimarisi tasarlayalım.
Yazan
ECOSIRE Research and Development Team
ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.
İlgili Makaleler
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 serisinden daha fazlası
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.