Power BI + NetSuite: Finans Panoları Oluşturma
NetSuite'in yerleşik raporlaması işlevseldir ancak sınırlıdır; SuiteAnalytics Çalışma Kitapları ve kayıtlı aramalar operasyonel sorgular için yeterlidir ancak modüller arası analizler, çok dönemli trend oluşturma ve yönetici düzeyinde finansal hikaye anlatımı konusunda zorluk çeker. NetSuite'teki kuruluşlar, ERP verilerinin hak ettiği analitik derinliği ortaya çıkarmak için Power BI'a giderek daha fazla bağlanıyor.
Bu kılavuz, resmi SuiteAnalytics Connect ODBC sürücüsünden kayıtlı arama dışa aktarımlarına kadar Power BI'ı NetSuite'e bağlamaya yönelik her yöntemi kapsar ve NetSuite finansal verilerini kullanarak eksiksiz bir CFO panosuna doğru oluşturulur.
Önemli Çıkarımlar
- SuiteAnalytics Connect (2.399 ABD doları/kullanıcı/yıl) NetSuite'e resmi ODBC tabanlı bağlantıdır
- CSV dışa aktarma yoluyla kaydedilen arama entegrasyonu ücretsizdir ancak gerçek zamanlı yenileme özelliği yoktur
- NetSuite ODBC sürücüsü, 300'den fazla NetSuite kayıt türünü sorgulanabilir tablolar olarak kullanıma sunar
- RESTlet tabanlı entegrasyon, en esnek özel veri çıkarma yaklaşımını sağlar
- Mali tablolar (K&Z, Bilanço, Nakit Akışı) Power BI'da birden fazla birleştirilmiş sorgu gerektirir
- DAX zaman zekası, NetSuite dönem verilerini dinamik YTD, MTD ve YoY karşılaştırmalarına dönüştürür
- Power BI'daki satır düzeyinde güvenlik, NetSuite'in yan kuruluş tabanlı erişim denetimini yansıtabilir
- NetSuite'in mali takvimi (özel dönemlerle birlikte), Power BI'da özel bir tarih tablosu gerektirir
NetSuite'ten Power BI Bağlantı Yöntemlerine
Yöntem 1: SuiteAnalytics Connect (ODBC)
SuiteAnalytics Connect, Oracle/NetSuite'in resmi analiz veritabanıdır; NetSuite verilerinize yönelik salt okunur ODBC uyumlu bir arayüzdür. NetSuite kayıtlarını ilişkisel tablolar olarak gösterir ve standart SQL sorgularına izin verir.
Gereksinimler:
- SuiteAnalytics Connect lisansı (tam erişim için kullanıcı başına 2.399 ABD doları)
- Power BI Ağ Geçidi sunucusunda yüklü NetSuite ODBC sürücüsü
- NetSuite'te "SuiteAnalytics Connect" iznine sahip rol
Kurulum adımları:
- NetSuite ODBC sürücüsünü NetSuite hesabınızdan indirin (Kurulum → SuiteAnalytics → ODBC → Sürücüyü İndir)
- Şirket içi veri ağ geçidi sunucusuna yükleyin
- ODBC Sistemi DSN'sini oluşturun:
- Veri Kaynağı Adı:
NetSuite_Prod - Ana Bilgisayar:
{AccountID}.connect.api.netsuite.com - Bağlantı noktası:
1708 - Veritabanı:
NetSuite
- Power BI Desktop'ta: Veri Al → ODBC →
NetSuite_ProdDSN'yi seçin - Kimlik bilgilerini girin: NetSuite e-postası + şifre (veya role özgü belirteç kimlik doğrulaması)
SuiteAnalytics Tablo Örnekleri:
| NetSuite Kaydı | ODBC Tablosu | Anahtar Alanlar |
|---|---|---|
| İşlemler | KOD0 | KOD1 |
| İşlem Hatları | KOD0 | KOD1 |
| Hesaplar | KOD0 | KOD1 |
| Müşteriler | KOD0 | KOD1 |
| Öğeler | KOD0 | KOD1 |
| Çalışanlar | KOD0 | KOD1 |
| Bağlı Ortaklıklar | KOD0 | KOD1 |
| Bütçe | KOD0 | KOD1 |
Yöntem 2: CSV Dışa Aktarma Aracılığıyla NetSuite Kaydedilmiş Aramalar
SuiteAnalytics Connect'e sahip olmayan kuruluşlar için, kayıtlı aramalar CSV dosyalarını paylaşılan bir klasöre veya bulut depolama alanına aktaracak şekilde planlanabilir:
- NetSuite'te gerekli alanlarla kayıtlı aramalar oluşturun
- NetSuite SuiteScript 2.0 komut dosyasını CSV'yi SharePoint/Azure Blob/SFTP'ye aktaracak şekilde planlayın
- Power BI, bağlayıcı aracılığıyla CSV dosyalarını zamanında okur
Sınırlama: Gerçek zamanlı veri yok; yenileme ihracat planına bağlıdır. Büyük veri kümeleri için uygun değildir (NetSuite dışa aktarma sınırları geçerlidir).
Yöntem 3: RESTlet Entegrasyonu
Özel SuiteScript 2.0 RESTlet'ler, NetSuite verilerini REST API aracılığıyla kullanıma sunar. Power BI'ın Web bağlayıcısı JSON yanıtlarını getirir:
- RESTlet'i NetSuite'e dağıtın (SuiteScript 2.0):
// RESTlet example — fetch GL transactions
define(['N/search', 'N/format'], (search, format) => {
const get = (context) => {
const results = [];
const s = search.create({
type: search.Type.TRANSACTION,
filters: [['type', 'anyof', 'Journal'], 'AND',
['trandate', 'within', context.start, context.end]],
columns: ['trandate', 'account', 'debit', 'credit', 'memo']
});
s.run().each(r => {
results.push({
date: r.getValue('trandate'),
account: r.getText('account'),
debit: r.getValue('debit'),
credit: r.getValue('credit')
});
return true;
});
return results;
};
return { get };
});
- Power BI'da RESTlet URL + TBA (Belirteç Tabanlı Kimlik Doğrulama) üstbilgileriyle Web bağlayıcıyı kullanın
Yöntem 4: Üçüncü Taraf Bağlayıcılar
Çeşitli üçüncü taraf bağlayıcılar NetSuite → Power BI entegrasyonunu basitleştirir:
| Bağlayıcı | Sağlayıcı | Fiyatlandırma | Özellikler |
|---|---|---|---|
| CData Power BI Bağlayıcısı | CVerileri | 400$/yıl | ODBC'siz, 300'den fazla kayıt türü |
| Beştran | Beştran | Kullanıma dayalı | Otomatik boru hattı, dbt modelleri |
| Dikiş | Dikiş | Aylık 100$'dan başlayan fiyatlarla | Basit işlem hattı, 14+ NS tablosu |
| Layer2 Bulut Bağlayıcı | Katman2 | 400$/yıl | SharePoint entegrasyonu |
Büyük hacimli finansal verileri işleyen üretim dağıtımları için, bir veri ambarı aracısına (Snowflake, BigQuery) sahip Fivetran veya Stitch en güvenilir mimariyi sağlar.
NetSuite Analytics için Veri Modeli Tasarımı
Finansal Analitik için Yıldız Şeması
NetSuite'in ilişkisel modeli Power BI'daki bir yıldız şemasıyla eşleşir:
Fact: GL_Transactions
├── Dim: Account (account number, name, type, category)
├── Dim: Date (year, quarter, month, fiscal period)
├── Dim: Customer/Vendor (entity)
├── Dim: Subsidiary
├── Dim: Department
├── Dim: Location
└── Dim: Class
GL işlem olgu tablosunu oluşturmak için Power Query SQL:
SELECT
TL.TRANSACTION as transaction_id,
T.TRANDATE as transaction_date,
T.TYPE as transaction_type,
T.MEMO as memo,
TL.ACCOUNT as account_id,
A.ACCTNUMBER as account_number,
A.ACCTNAME as account_name,
A.ACCTTYPE as account_type,
TL.DEBIT as debit_amount,
TL.CREDIT as credit_amount,
TL.DEBIT - TL.CREDIT as net_amount,
T.SUBSIDIARY as subsidiary_id,
T.DEPARTMENT as department_id,
T.CLASS as class_id,
T.ENTITY as entity_id
FROM TRANSACTIONLINE TL
JOIN TRANSACTION T ON TL.TRANSACTION = T.ID
JOIN ACCOUNT A ON TL.ACCOUNT = A.ID
WHERE T.VOID = 'F'
AND T.TRANDATE >= DATEADD('year', -3, CURRENT_DATE)
Power BI'da NetSuite Mali Takvimi
NetSuite, takvim yıllarıyla uyumlu olmayabilecek özel mali yılları destekler. NetSuite'in mali dönemleriyle eşleşen bir Power BI tarih tablosu oluşturun:
// Date table with NetSuite fiscal year (example: April start)
Date =
VAR FiscalYearStartMonth = 4 -- April
RETURN
ADDCOLUMNS(
CALENDAR(DATE(2020,1,1), DATE(2026,12,31)),
"Year", YEAR([Date]),
"Month", MONTH([Date]),
"Month Name", FORMAT([Date], "MMMM"),
"Quarter", "Q" & ROUNDUP(MONTH([Date])/3, 0),
"Fiscal Year",
IF(MONTH([Date]) >= FiscalYearStartMonth,
"FY" & YEAR([Date]) + 1,
"FY" & YEAR([Date])
),
"Fiscal Quarter",
"FQ" & SWITCH(TRUE(),
MONTH([Date]) >= FiscalYearStartMonth &&
MONTH([Date]) < FiscalYearStartMonth + 3, 1,
MONTH([Date]) >= FiscalYearStartMonth + 3 &&
MONTH([Date]) < FiscalYearStartMonth + 6, 2,
MONTH([Date]) >= FiscalYearStartMonth + 6 &&
MONTH([Date]) < FiscalYearStartMonth + 9, 3,
4
)
)
Finansal KPI'lar ve DAX Formülleri
Gelir ve Kâr ve Zarar Önlemleri
// Total Revenue (Income accounts, credit balance)
Total Revenue =
CALCULATE(
SUMX(GL_Transactions, [credit_amount] - [debit_amount]),
Account[account_type] = "Income"
)
// Total COGS
Total COGS =
CALCULATE(
SUMX(GL_Transactions, [debit_amount] - [credit_amount]),
Account[account_type] = "Cost of Goods Sold"
)
// Gross Profit
Gross Profit = [Total Revenue] - [Total COGS]
// Gross Margin %
Gross Margin % = DIVIDE([Gross Profit], [Total Revenue], 0)
// Operating Expenses
Total OpEx =
CALCULATE(
SUMX(GL_Transactions, [debit_amount] - [credit_amount]),
Account[account_type] IN {"Expense", "Other Expense"}
)
// EBITDA
EBITDA =
[Gross Profit] - [Total OpEx] +
CALCULATE(
SUMX(GL_Transactions, [debit_amount] - [credit_amount]),
Account[account_name] IN {"Depreciation", "Amortization"}
)
Yıldan yıla ve Dönem Karşılaştırmaları
// Prior Year Revenue
Prior Year Revenue =
CALCULATE([Total Revenue], SAMEPERIODLASTYEAR(Date[Date]))
// YoY Revenue Growth %
Revenue YoY Growth =
DIVIDE([Total Revenue] - [Prior Year Revenue], [Prior Year Revenue], 0)
// Year-to-Date Revenue
YTD Revenue =
CALCULATE([Total Revenue], DATESYTD(Date[Date], "3/31")) -- Fiscal year end
// Budget vs Actual Variance
Revenue Variance =
[Total Revenue] - CALCULATE(SUM(Budget[amount]), Budget[account_type] = "Income")
// Rolling 12-Month Revenue
Rolling 12M Revenue =
CALCULATE(
[Total Revenue],
DATESINPERIOD(Date[Date], LASTDATE(Date[Date]), -12, MONTH)
)
Alacak Hesapları ve Nakit KPI'ları
// Days Sales Outstanding (DSO)
DSO =
DIVIDE(
CALCULATE(SUM(AR_Aging[balance]), AR_Aging[status] = "Open"),
DIVIDE([Total Revenue], 365),
0
)
// Accounts Receivable Balance
AR Balance =
CALCULATE(
SUM(GL_Transactions[debit_amount]) - SUM(GL_Transactions[credit_amount]),
Account[account_type] = "Accounts Receivable"
)
// Cash Balance
Cash Balance =
CALCULATE(
SUM(GL_Transactions[debit_amount]) - SUM(GL_Transactions[credit_amount]),
Account[account_type] = "Bank"
)
CFO Kontrol Paneli Düzeni
NetSuite'e bağlı bir Power BI CFO panosu genellikle şu sayfaları içerir:
Sayfa 1: Yönetici Özeti
- Gelir YTD ve Bütçe (gösterge + sapma yüzdesi)
- Brüt Marj %'si (hedef çizgili gösterge)
- FAVÖK (cari ay + son 12 aylık mini grafik)
- Nakit Bakiyesi (banka hesap özeti)
- AR Yaşlandırma Özeti (çubuk grafik: Mevcut, 30, 60, 90+ gün)
- Gelire göre ilk 10 müşteri (tablo)
Sayfa 2: Gelir Tablosu (K&Z)
- Sütunları içeren aylık K&Z tablosu: Gerçek, Bütçe, Fark $, Fark %
- Gelir şelalesi grafiği (iş birimine/bağlı kuruluşa göre)
- Gider dökümü (kategoriye göre halka grafiği)
- Gelir ve gider trendi (12 aylık çizgi grafik)
Sayfa 3: Bilanço
- Seçilen dönem itibarıyla Varlıklar, Yükümlülükler, Özsermaye
- İşletme Sermayesi eğilimi (çizgi grafik)
- Akım Oranı ve Hızlı Oran göstergeleri
Sayfa 4: Nakit Akışı
- İşletme, Yatırım, Finansman nakit akışı şelalesi
- Nakit pist projeksiyonu (doğrusal tahmin)
- Zaman içindeki banka hesap bakiyeleri
Sayfa 5: Yardımcı Ayrıntılı İnceleme
- Bağlı ortaklık bazında gelir (ayrıntıya dayalı matris)
- Şirketler arası eleme görünümü
- Para birimi çeviri etkisi
Sıkça Sorulan Sorular
Power BI'ı NetSuite ile kullanmak için SuiteAnalytics Connect'e ihtiyacım var mı?
Hayır — ancak en sağlam ve desteklenen seçenektir. Alternatifler arasında kayıtlı arama CSV dışa aktarımları, üçüncü taraf bağlayıcılar (CData, Fivetran) veya özel RESTlet'ler yer alır. SuiteAnalytics Connect'in kullanıcı başına yıllık 2.399 ABD doları küçük ekipler için pahalı olması, bütçeye duyarlı kuruluşlar için üçüncü taraf bağlayıcıları (ayda 100 ABD dolarından başlayan fiyatlarla) cazip hale getiriyor.
NetSuite'ten Power BI'a veriler ne sıklıkla yenilenebilir?
Power BI Premium'da ODBC aracılığıyla SuiteAnalytics Connect, günde 48 adede kadar yenilemeyi (her 30 dakikada bir) destekler. Power BI Pro günde 8 yenilemeyi destekler. RESTlet tabanlı entegrasyon, herhangi bir zamanlamaya göre Power Automate aracılığıyla yenilemeleri tetikleyebilir. Neredeyse gerçek zamanlı finansal kontrol panelleri için Premium'da 30 dakikalık bir yenileme yapılandırın veya belirli KPI'lar için akış veri kümelerini kullanın.
Power BI, NetSuite'in çok bağlı kuruluşunun konsolide mali tablolarını gösterebilir mi?
Evet — bu, Power BI'ın NetSuite'in yerleşik raporlamasına göre en önemli avantajlarından biridir. Tüm bağlı kuruluşlar genelinde Bağlı Şirket boyutunu ve mali verilerini sorgulayın, ardından DAX'ta konsolidasyon mantığı oluşturun (tüm bağlı kuruluşları toplayın, eliminasyon hesapları aracılığıyla şirketlerarası işlemleri hariç tutun). Para birimi çevirisi, NetSuite'in döviz kuru tablolarını veya harici döviz kuru feed'lerini kullanabilir.
Power BI'da NetSuite özel alanlarını nasıl yönetirim?
SuiteAnalytics Connect, özel alanları CUSTBODY_FIELD_NAME (gövde düzeyinde özel alanlar) veya CUSTCOL_FIELD_NAME (satır düzeyi) gibi adlara sahip sütunlar olarak sunar. Bunları doğrudan SQL'de sorgulayın. RESTlet entegrasyonu, dahili alan kimliğini kullanarak Arama API'si aracılığıyla özel alanları kullanıma sunar. Power BI sorguları oluşturmadan önce özel alan kimliklerinizi NetSuite'te (Kurulum → Özelleştirme → Listeler, Kayıtlar ve Alanlar) belgeleyin.
Büyük NetSuite dağıtımları için en iyi mimari hangisidir?
Yüksek işlem hacmine (1 milyondan fazla GL hattı) sahip kuruluşlar için önerilen mimari şöyledir: NetSuite → Fivetran/Stitch → Snowflake/BigQuery → Power BI (DirectQuery veya Direct Lake). Bu, verileri NetSuite'ten artımlı olarak çıkarır, analiz için optimize edilmiş bir bulut ambarında saklar ve NetSuite'in ODBC katmanına tekrar tekrar başvurmadan Power BI'a bağlanır. Fivetran'ın NetSuite bağlayıcısı şema değişikliklerini ve silinen kayıtları otomatik olarak yönetir.
Sonraki Adımlar
NetSuite en önemli finansal verilerinizi içerir ve Power BI bu verileri CFO panolarına, farklılık analizine ve liderlik ekibinizin ihtiyaç duyduğu yan kuruluş konsolidasyonlarına dönüştürebilir. ECOSIRE, manuel Excel raporlamasının yerini alan finans panoları oluşturmak için NetSuite uzmanlığını Power BI geliştirmeyle birleştirir.
NetSuite + Power BI uygulamalarına nasıl yaklaştığımızı anlamak için Power BI ERP entegrasyon hizmetlerimizi veya muhasebe ve finans analiz hizmetlerimizi keşfedin. NetSuite ortamınıza ve raporlama hedeflerinize odaklanan bir keşif çağrısı için ekibimizle iletişime geçin.
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
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.