Power BI + NetSuite: إنشاء لوحات معلومات مالية
تعد التقارير المضمنة في NetSuite وظيفية ولكنها محدودة - تعد مصنفات SuiteAnalytics وعمليات البحث المحفوظة كافية للاستعلامات التشغيلية ولكنها تواجه صعوبات في التحليلات عبر الوحدات والاتجاهات متعددة الفترات وسرد القصص المالية على المستوى التنفيذي. تعمل المؤسسات الموجودة على NetSuite على ربط Power BI بشكل متزايد لفتح العمق التحليلي الذي تستحقه بيانات ERP الخاصة بها.
يغطي هذا الدليل كل طريقة لتوصيل Power BI بـ NetSuite، بدءًا من برنامج تشغيل SuiteAnalytics Connect ODBC الرسمي وحتى عمليات تصدير البحث المحفوظة، ويتجه نحو لوحة معلومات المدير المالي الكاملة باستخدام بيانات NetSuite المالية.
الوجبات الرئيسية
- SuiteAnalytics Connect (2,399 دولارًا أمريكيًا/مستخدمًا/عامًا) هو الاتصال الرسمي المستند إلى ODBC بـ NetSuite
- يعد تكامل البحث المحفوظ عبر تصدير ملف CSV مجانيًا ولكنه يفتقر إلى التحديث في الوقت الفعلي
- يعرض برنامج تشغيل NetSuite ODBC أكثر من 300 نوع من سجلات NetSuite كجداول قابلة للاستعلام
- يوفر التكامل القائم على RESTlet النهج الأكثر مرونة لاستخراج البيانات المخصصة
- تتطلب البيانات المالية (الأرباح والخسائر والميزانية العمومية والتدفق النقدي) استعلامات مشتركة متعددة في Power BI
- يقوم الذكاء الزمني لـ DAX بتحويل بيانات فترة NetSuite إلى مقارنات ديناميكية منذ بداية العام، وMTD، وYY
- يمكن للأمان على مستوى الصف في Power BI أن يعكس التحكم في الوصول المستند إلى شركة NetSuite
- يتطلب التقويم المالي لـ NetSuite (مع فترات مخصصة) جدول تاريخ مخصصًا في Power BI
NetSuite لطرق اتصال Power BI
الطريقة الأولى: اتصال SuiteAnalytics (ODBC)
SuiteAnalytics Connect هي قاعدة بيانات التحليلات الرسمية لشركة Oracle/NetSuite — وهي واجهة متوافقة مع ODBC للقراءة فقط لبيانات NetSuite الخاصة بك. يعرض سجلات NetSuite كجداول علائقية ويسمح باستعلامات SQL القياسية.
المتطلبات:
- ترخيص SuiteAnalytics Connect (2,399 دولارًا أمريكيًا لكل مستخدم سنويًا للوصول الكامل)
- تم تثبيت برنامج تشغيل NetSuite ODBC على خادم Power BI Gateway
- الدور بإذن "SuiteAnalytics Connect" في NetSuite
خطوات الإعداد:
- قم بتنزيل برنامج تشغيل NetSuite ODBC من حساب NetSuite الخاص بك (الإعداد → SuiteAnalytics → ODBC → تنزيل برنامج التشغيل)
- قم بالتثبيت على خادم بوابة البيانات المحلي
- إنشاء DSN لنظام ODBC:
- اسم مصدر البيانات:
NetSuite_Prod - المضيف:
{AccountID}.connect.api.netsuite.com - المنفذ:
1708 - قاعدة البيانات:
NetSuite
- في Power BI Desktop: احصل على البيانات → ODBC → حدد
NetSuite_ProdDSN - أدخل بيانات الاعتماد: البريد الإلكتروني لـ NetSuite + كلمة المرور (أو مصادقة الرمز المميز للدور الخاص)
أمثلة على جدول SuiteAnalytics:
| سجل NetSuite | جدول ODBC | الحقول الرئيسية |
|---|---|---|
| المعاملات | TRANSACTION | الكود1 |
| خطوط المعاملات | TRANSACTIONLINE | الكود1 |
| حسابات | ACCOUNT | الكود1 |
| العملاء | CUSTOMER | الكود1 |
| العناصر | ITEM | الكود1 |
| موظفين | EMPLOYEE | الكود1 |
| الشركات التابعة | SUBSIDIARY | الكود1 |
| الميزانية | BUDGET | الكود1 |
الطريقة الثانية: عمليات البحث المحفوظة في NetSuite عبر تصدير ملف CSV
بالنسبة للمؤسسات التي ليس لديها SuiteAnalytics Connect، يمكن جدولة عمليات البحث المحفوظة لتصدير ملفات CSV إلى مجلد مشترك أو وحدة تخزين سحابية:
- قم بإنشاء عمليات البحث المحفوظة في NetSuite باستخدام الحقول المطلوبة
- جدولة البرنامج النصي NetSuite SuiteScript 2.0 لتصدير ملف CSV إلى SharePoint/Azure Blob/SFTP
- يقرأ Power BI ملفات CSV في الموعد المحدد عبر الموصل
القيود: لا توجد بيانات في الوقت الحقيقي؛ يعتمد التحديث على جدول التصدير. غير مناسب لمجموعات البيانات الكبيرة (تنطبق حدود تصدير NetSuite).
الطريقة الثالثة: تكامل RESTlet
يعرض Custom SuiteScript 2.0 RESTlets بيانات NetSuite عبر REST API. يقوم موصل الويب الخاص بـ Power BI بجلب استجابات JSON:
- قم بنشر RESTlet على NetSuite (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، استخدم موصل الويب مع رؤوس RESTlet URL + TBA (المصادقة المستندة إلى الرمز المميز)
الطريقة الرابعة: موصلات الطرف الثالث
تعمل العديد من موصلات الجهات الخارجية على تبسيط تكامل NetSuite → Power BI:
| موصل | مقدم | التسعير | المميزات |
|---|---|---|---|
| موصل CData Power BI | كداتا | 400 دولار في السنة | خالية من ODBC، أكثر من 300 نوع سجل |
| فيفيتران | فيفيتران | على أساس الاستخدام | خط الأنابيب الآلي، نماذج dbt |
| غرزة | غرزة | من 100 دولار شهريًا | خط أنابيب بسيط، 14+ جداول NS |
| موصل السحابة Layer2 | طبقة 2 | 400 دولار في السنة | تكامل SharePoint |
بالنسبة لعمليات نشر الإنتاج التي تعالج كميات كبيرة من البيانات المالية، توفر Fivetran أو Stitch مع وسيط مستودع البيانات (Snowflake، BigQuery) البنية الأكثر موثوقية.
تصميم نموذج البيانات لتحليلات NetSuite
المخطط النجمي للتحليلات المالية
يقوم نموذج NetSuite العلائقي بتعيين مخطط نجمي في Power BI:
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
Power Query SQL لإنشاء جدول حقائق معاملات GL:
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)
تقويم NetSuite المالي في Power BI
يدعم NetSuite السنوات المالية المخصصة التي قد لا تتماشى مع السنوات التقويمية. قم بإنشاء جدول تاريخ Power BI الذي يطابق الفترات المالية لـ NetSuite:
// 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
)
)
مؤشرات الأداء الرئيسية المالية وصيغ DAX
مقاييس الإيرادات والأرباح والخسائر
// 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"}
)
مقارنات سنة بعد سنة ومقارنات الفترة
// 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)
)
حسابات القبض ومؤشرات الأداء الرئيسية النقدية
// 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"
)
تخطيط لوحة تحكم المدير المالي
تحتوي لوحة معلومات Power BI CFO المتصلة بـ NetSuite عادةً على هذه الصفحات:
الصفحة 1: ملخص تنفيذي
- الإيرادات منذ بداية العام مقابل الميزانية (المقياس + نسبة التباين)
- هامش الربح الإجمالي % (المقياس مع خط الهدف)
- الأرباح قبل الفوائد والضرائب والإهلاك والاستهلاك (الشهر الحالي + خط المؤشرات اللاحق لمدة 12 شهرًا)
- الرصيد النقدي (ملخص الحساب البنكي)
- ملخص AR Aging (مخطط شريطي: الحالي، 30، 60، 90+ يومًا)
- أفضل 10 عملاء حسب الإيرادات (الجدول)
الصفحة 2: بيان الدخل (الربح والخسارة)
- جدول الربح والخسارة الشهري مع الأعمدة: الفعلي، الميزانية، الفرق $، الفرق٪
- مخطط شلالي للإيرادات (حسب وحدة الأعمال/الشركة التابعة)
- توزيع النفقات (مخطط دائري حسب الفئة)
- اتجاه الإيرادات والمصروفات (مخطط خطي مدته 12 شهرًا)
الصفحة 3: الميزانية العمومية
- الأصول والخصوم وحقوق الملكية اعتبارا من الفترة المحددة
- اتجاه رأس المال العامل (مخطط خطي)
- النسبة الحالية ومقاييس النسبة السريعة
الصفحة 4: التدفق النقدي
- التشغيل والاستثمار والتمويل شلال التدفق النقدي
- إسقاط المدرج النقدي (التنبؤ الخطي)
- أرصدة الحسابات المصرفية مع مرور الوقت
الصفحة 5: البحث الفرعي
- الإيرادات حسب الشركة التابعة (مصفوفة مع التنقل لأسفل)
- عرض القضاء بين الشركات
- تأثير ترجمة العملة
الأسئلة المتداولة
هل أحتاج إلى SuiteAnalytics Connect لاستخدام Power BI مع NetSuite؟
لا، لكنه الخيار الأقوى والأكثر دعمًا. تتضمن البدائل عمليات تصدير البحث المحفوظة بتنسيق CSV، أو موصلات الجهات الخارجية (CData، أو Fivetran)، أو RESTlets المخصصة. يعد SuiteAnalytics Connect بسعر 2399 دولارًا أمريكيًا/مستخدمًا سنويًا مكلفًا للفرق الصغيرة، مما يجعل موصلات الجهات الخارجية (تبدأ بسعر 100 دولار أمريكي شهريًا) جذابة للمؤسسات التي تهتم بالميزانية.
كم مرة يمكن تحديث البيانات من NetSuite إلى Power BI؟
يدعم SuiteAnalytics Connect عبر ODBC على Power BI Premium ما يصل إلى 48 عملية تحديث يوميًا (كل 30 دقيقة). يدعم Power BI Pro 8 عمليات تحديث يوميًا. يمكن للتكامل المستند إلى RESTlet تشغيل عمليات التحديث عبر Power Automate في أي جدول زمني. بالنسبة للوحات المعلومات المالية في الوقت الفعلي تقريبًا، قم بتكوين تحديث لمدة 30 دقيقة على Premium أو استخدم مجموعات البيانات المتدفقة لمؤشرات أداء رئيسية محددة.
هل يستطيع Power BI عرض البيانات المالية الموحدة لشركة NetSuite المتعددة الشركات؟
نعم — هذه إحدى المزايا الرئيسية لـ Power BI مقارنة بالتقارير المدمجة في NetSuite. استعلم عن بُعد الشركة الفرعية والبيانات المالية عبر جميع الشركات التابعة، ثم أنشئ منطق الدمج في DAX (جمع كل الشركات التابعة، واستبعاد المعاملات بين الشركات الشقيقة عبر حسابات الاستبعاد). يمكن لترجمة العملات استخدام جداول أسعار الصرف الخاصة بـ NetSuite أو خلاصات أسعار العملات الأجنبية الخارجية.
كيف أتعامل مع حقول NetSuite المخصصة في Power BI؟
يعرض SuiteAnalytics Connect الحقول المخصصة كأعمدة بأسماء مثل CUSTBODY_FIELD_NAME (الحقول المخصصة على مستوى النص) أو CUSTCOL_FIELD_NAME (مستوى السطر). الاستعلام عنهم مباشرة في SQL. يكشف تكامل RESTlet عن الحقول المخصصة عبر Search API باستخدام معرف الحقل الداخلي. قم بتوثيق معرفات الحقول المخصصة الخاصة بك في NetSuite (الإعداد → التخصيص → القوائم والسجلات والحقول) قبل إنشاء استعلامات Power BI.
ما هي أفضل بنية لعمليات نشر NetSuite الكبيرة؟
بالنسبة للمؤسسات ذات أحجام المعاملات الكبيرة (1 مليون+ خطوط GL)، فإن البنية الموصى بها هي: NetSuite → Fivetran/Stitch → Snowflake/BigQuery → Power BI (DirectQuery أو Direct Lake). يؤدي ذلك إلى استخراج البيانات من NetSuite بشكل تدريجي، وتخزينها في مستودع سحابي محسّن للتحليلات، وتوصيل Power BI دون الضغط بشكل متكرر على طبقة ODBC الخاصة بـ NetSuite. يتعامل موصل NetSuite الخاص بـ Fivetran مع تغييرات المخطط والسجلات المحذوفة تلقائيًا.
الخطوات التالية
يحتوي NetSuite على بياناتك المالية الأكثر أهمية - ويمكن لـ Power BI تحويل تلك البيانات إلى لوحات معلومات المدير المالي، وتحليل التباين، وعمليات الدمج الفرعية التي يحتاجها فريق القيادة لديك. يجمع ECOSIRE بين خبرة NetSuite وتطوير Power BI لإنشاء لوحات معلومات مالية تحل محل تقارير Excel اليدوية.
استكشف خدمات تكامل Power BI ERP أو خدمات التحليلات المحاسبية والمالية لفهم كيفية تعاملنا مع عمليات تنفيذ NetSuite + Power BI. اتصل بفريقنا لإجراء مكالمة استكشاف تركز على بيئة NetSuite وأهداف إعداد التقارير.
بقلم
ECOSIRE Research and Development Team
بناء منتجات رقمية بمستوى المؤسسات في ECOSIRE. مشاركة رؤى حول تكاملات Odoo وأتمتة التجارة الإلكترونية وحلول الأعمال المدعومة بالذكاء الاصطناعي.
مقالات ذات صلة
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.