وحدة BI — لوحات المعلومات والتحليلات (BI Module — Dashboards & Analytics)
تتيح لك وحدة BI في نما بناء لوحات معلومات تفاعلية تحوّل بياناتك المباشرة إلى مخططات وعدادات وجداول وغير ذلك. المخططات تتواصل مع بعضها عبر الفلاتر المتقاطعة (cross-filters) ونوافذ التفاصيل (drill-down) والروابط المباشرة — لذلك لوحاتك ليست صوراً ثابتة، بل أدوات استكشاف يمكن لفريقك النقر خلالها للوصول إلى الإجابات.
يرشدك هذا الدليل عبر كل ما تستطيع وحدة BI القيام به، من مصمم المخططات إلى التفاعلات المتقدمة مثل drill-down والفلتر المتقاطع. إذا كنت تبحث عن هياكل JSON وأنماط SQL وتنسيقات الاستيراد اللازمة لبناء لوحات المعلومات برمجياً، راجع المرجع التقني.
ما الذي ستحصل عليه
الإعداد الاعتيادي للـ BI في نما يبدو كما يلي:
- لوحات المعلومات (Dashboards) — تخطيطات شبكية تحوي عدة widgets جنباً إلى جنب
- Widgets — مخططات أو جداول أو بطاقات فردية تسحب كل منها البيانات من استعلام SQL
- الفلاتر المتقاطعة (Cross-Filters) — معاملات فلترة مشتركة (الفرع، نطاق التاريخ، العميل، إلخ) تشرّح البيانات عبر جميع الـ widgets دفعة واحدة
- Drill-Down — اضغط على نقطة بيانات لفتح مخطط أو لوحة معلومات مرتبطة، مفلترة مسبقاً لسياق تلك النقطة
- الروابط (Links) — اضغط على نقطة بيانات للانتقال مباشرة إلى السجل الأصلي (مثل: فتح شاشة تعديل العميل)
وهذه واحدة منها وهي تعمل:

تُعرض لوحات المعلومات على الصفحة الرئيسية — هناك يلتقي بها المستخدمون يوماً بيوم. ولفتح لوحة بعينها أثناء إعدادك لها، افتح سجل لوحة المعلومات واضغط زر فتح لوحة المعلومات (Open Dashboard) في شريط الإجراءات. وبعد ظهور اللوحة، يحمل شريط أدواتها أزرار التحديث (Refresh) وفتح لوحة المعلومات (Open Dashboard) وخيارات العرض (View Options) (زر ⋮) والفلاتر (Filters).
أنواع المخططات (Chart Types)
تأتي الوحدة بـ 41 قالب مخطط جاهز للاستخدام موزعة على 11 تصنيفاً. لا تحتاج إلى ضبط ECharts JSON من الصفر — اختر قالباً، وصوّبه على بياناتك، وخصّص المظهر.
مخططات الأعمدة (Bar Charts) — 10 قوالب
عمود منفرد، أعمدة مجمّعة (مقارنة جانبية)، مكدّسة، مكدّسة 100%، أفقية، أفقية مكدّسة، إيجابي/سلبي، شلال (waterfall)، مقارنة بالفترة السابقة، وأعمدة أفقية مرتبة تنازلياً.
مخططات الخطوط (Line Charts) — 6 قوالب
خط منفرد، متعدد السلاسل، خط متدرج (القيم تبقى ثابتة بين النقاط)، محور Y مزدوج (لمقارنة مقاييس مختلفة مثل الإيراد مقابل الكمية)، خط مع خط مرجعي منقّط، وخط مع شريط تكبير/تصغير (data-zoom) للنطاقات الزمنية الكبيرة.
مخططات المساحة (Area Charts) — 4 قوالب
مساحة أساسية، مساحة مكدّسة، مساحة بتعبئة متدرجة، ومساحة نطاقية.
مخططات الدائرة والحلقة (Pie & Donut Charts) — 7 قوالب
دائرة قياسية، حلقة (donut)، حلقة مع تسمية مركزية، دائرة وردية (rose — حجم الشريحة بالمساحة لا بالزاوية)، دائرة نصف دائرة، ودائرة متداخلة من مستويين، ودائرة متداخلة من مستويين بتسميات غنية.
مخططات العدادات (Gauge Charts) — 4 قوالب
عداد عقرب قياسي، وعداد تقدّم، وعداد حلقي، وعداد متعدد الحلقات (مؤشرات متحدة المركز).
مخططات مركبة (Combination Charts) — 2 قوالب
أعمدة + خط، وأعمدة + مساحة — مفيدة عندما تريد عرض الإجماليات كأعمدة والاتجاه كخط على نفس المخطط.
مخططات التشتت والفقاعات (Scatter & Bubble) — 2 قوالب
مخطط تشتت XY ومخطط فقاعي (حجم الفقاعة يمثّل بُعداً ثالثاً).
مخططات الرادار (Radar Charts) — 2 قوالب
رادار مضلّع ورادار مملوء — مثالي لمقارنة مقاييس متعددة عبر التصنيفات (مثل بطاقات KPI).
مخططات القمع (Funnel Charts) — 2 قوالب
قمع قياسي (مراحل التحويل) وقمع مقارن.
Treemap — 1 قالب
مخطط مستطيلات هرمي لعلاقات الجزء إلى الكل.
Heatmap — 1 قالب
تصور مصفوفي بشدة اللون — مفيد لأنماط وقت اليوم، وتحليل المنطقة × المنتج، وما شابه من تحليلات ثنائية الأبعاد.
مصمم المخططات (The Chart Designer)
مصمم المخططات هو الحوار الذي تفتحه عند إنشاء أو تعديل إعداد مخطط widget.
وهو غير متاح من لوحة المعلومات نفسها. للوصول إليه، افتح سجل الـ widget — إما عبر Open Widget في صندوق أدوات المخطط، أو بفتح شاشة Dashboard Widget والبحث عن الـ widget بكوده — ثم اضغط إجراء Edit Chart Config في التبويب الرئيسي (Main) للسجل.
وللمصمم حالتان:
الحالة A — معرض القوالب (Template Gallery)
عند البدء بـ widget فارغ، يفتح المصمم في وضع المعرض. ترى شبكة قابلة للبحث من جميع الـ 41 قالباً، كل منها مُصيَّر كمخطط مصغّر حي لترى تماماً ما ستختار.

من المعرض يمكنك:
- البحث بالاسم (مثل: اكتب "stacked" للفلترة على النسخ المكدّسة)
- الفلترة حسب التصنيف باستخدام الرقائق (chips) في الأعلى (Bar، Line، Pie، إلخ)
- النقر على قالب لاختياره والانتقال إلى المحرر
- البدء من الصفر (Start Blank) إذا أردت بناء مخطط من canvas فارغ
الحالة B — محرر المخطط (Chart Editor)
بعد اختيار قالب (أو فتح widget موجود)، تنتقل إلى المحرر. هنا تربط بياناتك، وتضبط مظهر المخطط، وتهيّئ التفاعلات. المحرر مقسّم إلى منطقة النموذج على جانب ومعاينة حية على الجانب الآخر — كل تغيير تجريه يحدّث المعاينة فوراً.

في أعلى المحرر، شريط نوع المخطط يُظهر 11 زر أيقونة (واحد لكل تصنيف). النقر على أحدها يبدّل نوع المخطط مع الإبقاء على ربط البيانات حيثما أمكن.
منطقة النموذج تحتوي على أربعة تبويبات — Data Mapping وStyle Options وClick & Links وDrill-Down Mapping — إضافة إلى زر Change Template الذي يعيدك إلى المعرض. ويتغيّر التبويب الأول بحسب نوع الـ widget: widgets الـ Enhanced Table تعرض Table Columns مكان Data Mapping، وwidgets بطاقات المؤشرات تعرض Card Template وليست لها لوحة معاينة أصلاً.
أما widget كتلة النص (Text Block) فيتخطى ذلك كله. مصممه لوحة محتوى واحدة: محرر نص غني يعلوه تبويبان نص عربي ونص إنجليزي، وصندوق HTML خام قابل للطي للصق الوسوم مباشرة، وأسفلهما جدول أنماط الإطار (لون الخلفية والنص، والحشو الداخلي، ولون الحد وعرضه واستدارته، وحجم الخط الافتراضي، والمحاذاة). اكتب الكتلة بلغة واحدة واترك الأخرى فارغة فيخدم النص نفسه اللغتين؛ واملأ الاثنتين فتقرأ كل لغة نصها.
تبويب ربط البيانات (Data Mapping Tab)
هنا تخبر المخطط بحقول البيانات التي يستخدمها.

الحقول المتاحة تعتمد على نوع ربط البيانات (الذي يُضبط تلقائياً عند اختيار القالب، لكن يمكن تغييره):
- عمود التصنيف (Category column) — البُعد الذي يظهر على محور X (مثل: اسم الفرع، الشهر)
- السلاسل (Series) — عمود قيمة واحد أو أكثر، لكل منها اسم ونوع مخطط (bar/line/scatter) وتنسيق رقم وتعيين محور Y اختياري
- عمود التسمية (Label column) — لمخططات نمط pivot حيث تصبح القيم المميزة في عمود واحد سلاسل منفصلة تلقائياً
- وضع التكديس/النسبة المئوية (Stack / Percent mode) — تحويل الأعمدة المجمّعة إلى مكدّسة، أو التطبيع إلى 100%
- ترتيب الفرز (Sort order) — تصاعدي أو تنازلي حسب القيمة
تتصرف أدوات الاختيار بشكل مختلف تبعاً لما إذا كان الـ widget يستخدم مصدر بيانات SQL خام أو مصدر بيانات wizard:
- مصدر بيانات SQL — تختار من أسماء أعمدة مجموعة النتائج التي يُرجعها استعلامك (بالإضافة إلى أعمدة tempo وأعمدة مقارنة الفترات التي حددتها).
- مصدر بيانات Wizard — تختار من معرفات حقول الـ wizard مباشرة. كل خيار يعرض العنوان المترجم ومعرف الحقل الخام بين قوسين (لتمييز
customerوupperInvoice.customerحتى عندما يُترجمان كلاهما إلى "العميل"). أعمدة tempo وأعمدة مقارنة الفترات تظهر في نفس أداة الاختيار تحت مجموعات منفصلة.
مخططات وضع Wizard تحصل على عدة اختصارات في المصمم:
- تقبل فتحات التصنيف والتسمية والقيمة وX وY والسلاسل معرف حقل wizard — الـ backend يحلّ الاسم المستعار SQL الصحيح عند وقت التصيير.
- إدخالات إصدار الفلتر المتقاطع تحتاج فقط الفلتر المتقاطع المستهدف ومعرف حقل wizard؛ أعمدة id/code/name/entityType تُستنتج تلقائياً من بيانات الحقل الوصفية.
- تبويبة Click & Links وتبويبة Drill-Down تعرضان أداة اختيار Active Dimension في وضع wizard. كل بُعد له مجموعته الخاصة من إدخالات الفلتر المتقاطع وإدخالات drill-down، وزر "Copy from Dimension" يستنسخ الإدخالات من بُعد آخر لتسريع الإعداد.
تبويب النمط (Style Options)
التخصيص البصري دون لمس JSON.

والتحكمات موزّعة على أقسام قابلة للطي:
- العنوان والعنوان الفرعي (Title & subtitle) — إظهار/إخفاء، نص، موضع
- لوحة الألوان (Color palette) — ست لوحات مدمجة (default، warm، cool، pastel، monochrome، Nama brand)، بالإضافة إلى منتقي ألوان مخصص للسلاسل الفردية
- أنماط الزخرفة (Decal patterns) — تشطيبات/أنماط للوصولية والطباعة بالأبيض والأسود
- المفسّر (Legend) — إظهار/إخفاء، موضع (أعلى/أسفل/يسار/يمين)، اتجاه
- تلميح الأدوات (Tooltip) — إظهار/إخفاء، وضع التشغيل (axis يعرض جميع السلاسل دفعة واحدة، item يعرض نقطة بيانات واحدة)
- المحاور (Axes) — تدوير التسمية، اتجاه معكوس، حدود min/max، خطوط الشبكة
- تسميات البيانات (Data labels) — إظهار/إخفاء، موضع (أعلى/أسفل/داخل/مركز)
- تكبير البيانات (Data zoom) — شريط تمرير أو تكبير بعجلة الماوس للمخططات القابلة للتمرير
- تحكمات خاصة بالنوع:
- الأعمدة: نصف قطر الزاوية، عرض العمود
- الخطوط/المساحات: منحنيات ناعمة، إظهار نقاط البيانات، عرض الخط، وضع الخطوة، تعبئة المساحة
- الدوائر: نصف القطر الداخلي (ثقب الحلقة)، نصف القطر الخارجي، وضع rose، زاوية البداية
- العدادات: قيمة min/max، تبديل المؤشر، عرض خط المحور
- التشتت: حجم الرمز
- Heatmaps: إظهار/إخفاء تسميات الخلايا
- الرادار: شكل مضلّع أو دائري
محرر JSON لخيار ECharts (EChart Option)
لا يوجد تبويب JSON منفصل. فلأي شيء لا تغطيه تحكمات واجهة المستخدم، افتح قسم EChart Option أسفل تبويب Data Mapping أو تبويب Style Options — كلاهما يحمله — وعدّل ECharts option JSON الخام مباشرة في محرر الكود الذي يظهر.

التغييرات في محرر JSON تنعكس على تحكمات واجهة المستخدم، لذلك يمكنك الجمع بين التعديل البصري وكتابة JSON يدوياً.
TIP
لا تحتاج إلى تعلّم ECharts API كاملة لاستخدام المصمم. القوالب وتحكمات واجهة المستخدم تغطي أشيع السيناريوهات. لكن إذا أردت تحكماً دقيقاً — تدرجات مخصصة، تسميات نصية غنية، منسّقات tooltip معقدة — فمحرر JSON في متناولك. راجع وثائق Apache ECharts للمرجع الكامل للخيارات.
تبويب Click & Links
هيّئ ما يحدث عندما يتفاعل المستخدمون مع المخطط — مشروح بالتفصيل في قسمَي الفلاتر المتقاطعة والروابط أدناه.

تبويب Drill-Down Mapping
هيّئ أهداف drill-down — مشروح في قسم Drill-Down أدناه.

لوحات المعلومات والتخطيط (Dashboards & Layout)
لوحة المعلومات هي شبكة تحوي widgets متعددة. تهيّئ حجم الشبكة (مثل: 3 أعمدة × 4 صفوف)، ثم تضع كل widget بتحديد صفها وعمودها وعرضها (بالأعمدة) وارتفاعها (بالصفوف).
والجزء الذي يفاجئ الناس هو معنى هذه الصفوف والأعمدة فعلاً: إنها نِسَب لا خلايا ثابتة. اللوحة المضبوطة على 12 صفاً تأخذ ارتفاعها على الشاشة وتقسمه إلى اثني عشر، فيأخذ الـ widget الذي ارتفاعه 4 صفوف ثلث الشاشة. واضبط نفس اللوحة على 24 صفاً يصبح نفس الـ widget سُدس الشاشة — لم يُضَف شيء، بل صغُر كل شيء. لذلك حين يبدو الجدول أقصر مما ينبغي، فالحل أن تزيد ارتفاع ذلك الـ widget نفسه، لا أن ترفع عدد صفوف اللوحة.
والتمرير ينتج عن الحساب نفسه. ارتفاع اللوحة شاشة واحدة لكل «عدد صفوف» من الصفوف، فهي لا تمرّر إلا حين يتجاوز أدنى widget عدد الصفوف. أو بعبارة أخرى: إذا كان الـ widget السفلي ينتهي على آخر صف، فاللوحة تَعِد بأن تسع شاشة واحدة، وستفي بوعدها بضغط كل شيء — والجداول أولاً — حتى تسعها. ولتحصل على تقرير قابل للتمرير، امنح الـ widgets الارتفاعات التي تستحقها ودعها تتجاوز الأسفل.
ويعالج المرجع التقني هذا بالتفصيل: المعادلات، ومقارنة عملية، وقائمة أنواع الـ widgets التي تحدد ارتفاعها من محتواها وتتجاهل الارتفاع الذي تمنحه لها.
كل لوحة معلومات لها نوع (Kind):
- Single — لوحة المعلومات الكلاسيكية المعروفة. شبكة من الـ widgets، مع ربط اختياري بالفلاتر المتقاطعة. هذا هو الإعداد الافتراضي للوحات الجديدة.
- Tabbed — حاوية تحمل لوحات معلومات أخرى كتبويبات قابلة للتبديل، بدلاً من حمل الـ widgets مباشرة. راجع لوحات المعلومات ذات التبويبات (Tabbed Dashboards) أدناه.
تعديل التخطيط (Editing the Layout)
يُفتح محرر التخطيط من سجل لوحة المعلومات: اضغط زر تعديل عناصر لوحة المعلومات (Edit Dashboard Elements) في شريط الإجراءات. عندها يُحاط كل widget بإطار متقطع يحمل اسمه، مع زر إزالة ومقابض سحب على كل حافة، ويظهر زر Add Widget فوق الشبكة.

في وضع التعديل، يمكنك:
- سحب الـ widgets لإعادة ترتيبها على الشبكة
- تغيير حجم الـ widgets باستخدام المقابض على جميع الحواف والزوايا
- حفظ أو إلغاء تغييرات التخطيط
مصمم التخطيط مخصص للوحات Single فقط. محاولة فتحه على لوحة Tabbed تُظهر خطأ — لوحات Tabbed لا تحتوي شبكة widgets للتخطيط، فقط قائمة بلوحات فرعية.
أما عددا الصفوف والأعمدة نفسيهما فلا يُعدَّلان في المصمم — بل هما حقلا عدد الصفوف (Rows Count) وعدد الأعمدة (Columns Count) على سجل لوحة المعلومات. غيّر أحدهما فيتغير حجم كل ما على اللوحة دفعة واحدة، لأنك غيّرت المقياس الذي تُقاس عليه ارتفاعات الـ widgets لا حجم خلية. وهناك حقلان مجاوران على نفس الشاشة يسهل الخلط بينهما وبين هذين: عدد جميع الصفوف في اللوحة (Total Dashboard Rows Count) بقيّة يحتفظ بها محرر التخطيط لنفسه ولا أثر لها على طريقة عرض اللوحة، وأقصى عدد صفوف للموبايل (Mobile Max Rows Count) لا يُطبَّق إلا على الهواتف، حيث تُلغى الشبكة تماماً وتُرصّ الـ widgets بعرض كامل — وهذا الحقل يحدد كم منها يظهر على شاشة ضيقة واحدة. وإذا تُرك فارغاً قررت اللوحة بنفسها: اثنان في كل شاشة، أو الشاشة كلها حين لا يكون فيها إلا widget واحد.
وكل تبويب في لوحة Tabbed يقسم ارتفاعه هو على عدد صفوفه هو، فتُضبط التبويبات واحداً واحداً ولا يؤثر تغيير أحدها في غيره.
التحديث التلقائي (Auto-Refresh)
يمكن تحديث لوحات المعلومات تلقائياً. هناك مستويان:
- تحديث مستوى اللوحة (Dashboard-level refresh) — مؤقت واحد يعيد جلب جميع الـ widgets على فترة محددة
- تحديث مستوى الـ Widget (Widget-level refresh) — يمكن لكل widget الحصول على فترة تحديثها الخاصة، مفيد عندما تحتاج بعض المخططات بيانات شبه فورية والأخرى لا
أنواع الـ Widgets على لوحة المعلومات
رغم أن ECharts هي النجم الأساسي، تدعم لوحات المعلومات عدة أنواع widget أخرى:
| نوع الـ Widget | ما يفعله |
|---|---|
| EChart | أي من الـ 41 قالب مخطط |
| Table | جدول بيانات — أسماء أعمدة SQL تصبح رؤوس الأعمدة تلقائياً |
| Table v2 (Enhanced) | جدول بيانات أغنى — الأعمدة محددة صراحة في JSON مع التنسيق ومصيّرات الخلايا والتنسيق الشرطي. راجع قسم Enhanced Table. |
| Metrics Cards | بطاقات ملخص KPI (قيمة + تسمية + اتجاه) |
| Metrics Cards v2 (Enhanced) | شريط بطاقات مؤشرات أغنى — البطاقات والخانات وخطوط الاتجاه المصغّرة معرَّفة في JSON. انظر مرجع بطاقات المؤشرات المحسّنة |
| Timeline | تيار أحداث زمنية. انظر الخط الزمني |
| Calendar | تقويم أحداث. انظر التقويم |
| Report | تقرير JasperReport مضمّن. انظر التقرير |
| HTML | محتوى HTML مخصص يُبنى من صفوف الاستعلام. انظر HTML |
| Recent Visits | يعرض الشاشات التي يفتحها المستخدم أكثر من غيرها. انظر الزيارات الأخيرة |
| Card Menu | بطاقات تنقل. انظر قائمة بطاقات |
| Resource View | جدولة الموارد. انظر Resource View |
| CrossFilterControl | مُقسِّم (slicer) — يعرض فلتراً متقاطعاً واحداً كمنتقي على شبكة لوحة المعلومات، فيضبط المستخدم الفلتر دون فتح حوار الفلاتر |
| TextBlock | نص ثابت غني — رؤوس أقسام وعناوين فرعية وتعليمات تُوضع بين الـ widgets البيانية. ويُكتب محتواه مرة لكل لغة |
بعض أنواع العناصر تحتاج الواجهة الجديدة
الأنواع EChart وTable v2 (Enhanced) وMetrics Cards وMetrics Cards v2 (Enhanced) وTimeline وRecent Visits وCard Menu وCrossFilterControl وTextBlock تُعرض في الواجهة الجديدة فقط. إذا فتحت لوحة تحتوي عليها من الواجهة القديمة، فسيظهر مكان كل عنصر منها رسالة تفيد بأن نوعه مدعوم في الواجهة الجديدة فقط، وتحتها رابط فتح في الواجهة الجديدة يفتح اللوحة نفسها في الواجهة الجديدة في تبويب جديد.
مجموعات اللوحات — وضع لوحات المعلومات في القائمة (Dashboard Groups)
مجموعة لوحات (إدارة النظام ← لوحات ← مجموعة لوحات) مجموعة مختارة يدويًا من لوحات المعلومات، وهي نظيرة مجموعة التقارير. اكتب لوحاتها في جدول التفاصيل الخاص بها، أو أضف المجموعة إلى جدول التفاصيل في اللوحة نفسها (عمود مجموعة لوحات) — الجدولان يبقيان متطابقين، وحذف المجموعة يرفعها عن كل اللوحات. لا تُكتب اللوحة في المجموعة إلا مرة واحدة؛ والسطر الثاني يُرفض بالرسالة «اللوحة {0} لايمكن تكرارها».
تضع المجموعة لوحاتها في القائمة بإحدى طريقتين (راجع هيكل القائمة):
- وصلة قائمة من نوع مجموعة لوحات تشير إلى المجموعة، فتظهر كل لوحة فيها وصلةً مستقلة.
- إضافة الي القائمة اّليا في المجموعة، مع وصلة واحدة من نوع AutoDashBoards في القائمة، فتظهر كل مجموعة مؤشَّر عليها قائمةً فرعية مستقلة باسم المجموعة تسرد لوحاتها. ويجب أن تكون وصلة AutoDashBoards الوصلةَ الوحيدة في مجموعتها من القائمة. بعدها تظهر المجموعات الجديدة دون تعديل القائمة.
الترخيص الذي تحتاجه شاشات BI، وكيف تُختار اللوحة الرئيسية للمستخدم، وكيف تخفي عنصرًا أو تبويبًا عن بعض المستخدمين، كلها في قوائم وحدة BI وترخيصها وصلاحياتها.
لوحات المعلومات ذات التبويبات (Tabbed Dashboards)
في بعض الأحيان لا تكفي لوحة معلومات واحدة — الإدارة العليا تريد رؤية مقاييس المستودع والموارد البشرية والمبيعات في مكان واحد، لكن لكل فريق لوحته الخاصة المضبوطة لعمله. بناء لوحة مدمجة ضخمة يُكرّر كل شيء؛ التنقل بين ثلاث لوحات منفصلة مرهق. لوحات Tabbed تحلّ هذا بتمكينك من تركيب لوحات موجودة كتبويبات تحت لوحة أم واحدة.

قصة إعادة الاستخدام
تصوّر هذا:
- فريق المستودع يستخدم لوحة المستودع (Warehouse Dashboard) يومياً.
- الموارد البشرية لديها لوحة HR (HR Dashboard) خاصة.
- المبيعات تعمل على لوحة المبيعات (Sales Dashboard).
كل من هذه لوحة Single عادية، يمتلكها ويصونها فريقها. الآن يطلب المديرون التنفيذيون مكاناً واحداً لرؤية كل شيء. تُنشئ لوحة جديدة، وتضع نوعها كـ Tabbed، وتضيف اللوحات الثلاث الموجودة كلوحات فرعية. هذا كل شيء — لا تكرار لـ widgets، لا نسخ لاستعلامات SQL، لا صيانة موازية. عندما يضيف فريق المستودع مخططاً جديداً للوحتهم، يظهر في العرض التنفيذي تلقائياً.
اللوحات الفرعية لا تزال قابلة للتصفح بشكل مستقل أيضاً — فريق المستودع يستمر في استخدام لوحة المستودع مباشرة دون أي وعي بأنها تعيش أيضاً داخل عرض تنفيذي.
الإعداد
عند تعديل سجل لوحة معلومات، ترى حقل النوع (Kind):
- اتركه كـ Single للوحة معلومات عادية.
- غيّره إلى Tabbed لتركيب لوحات أخرى كتبويبات.

التبديل إلى Tabbed يكشف عن شبكة Sub Dashboards. أضف صفاً واحداً لكل تبويب:
| الحقل | ما يفعله |
|---|---|
| Sub Dashboard | منتقي مرجع يشير إلى لوحة معلومات موجودة |
| العنوان العربي (Arabic Title) | تجاوز اختياري لتسمية التبويب بالعربية |
| العنوان الإنجليزي (English Title) | تجاوز اختياري لتسمية التبويب بالإنجليزية |
ترتيب الصفوف في الشبكة هو ترتيب ظهور التبويبات في واجهة المستخدم. لإعادة ترتيب التبويبات، أعد ترتيب صفوف الشبكة. إذا تركت كلا حقلَي العنوان فارغَين، يستخدم التبويب اسم اللوحة الفرعية نفسها (name1 لواجهة المستخدم العربية، name2 للإنجليزية).
TIP
لوحة Tabbed لا يمكنها امتلاك widgets خاصة بها — فهي حاوية بحتة. إذا حاولت إضافة widgets مباشرة، يمنع النظام الحفظ. هذا يحافظ على تناسق النموذج: مهمة اللوحة الأم Tabbed هي استضافة اللوحات الفرعية، لا أكثر.
الفلاتر المتقاطعة عبر التبويبات
شريط الفلتر المتقاطع في أعلى لوحة Tabbed هو اتحاد كل الفلاتر المتقاطعة المعرّفة على أي من اللوحات الفرعية، مع إزالة التكرارات. لذلك إذا ربطت كل من لوحة المستودع ولوحة المبيعات فلتر "الفرع"، ترى رقيقة فرع واحدة في الشريط — لا اثنتين.
علاوة على ذلك، تلك الرقيقة تُطبَّق عبر جميع التبويبات التي تربطها. اضغط "الرياض" أثناء مشاهدة تبويب المبيعات، وانتقل إلى المستودع، وسيُعيد المستودع الجلب مع تطبيق فلتر الرياض تلقائياً. يعمل هذا لأن روابط الفلتر المتقاطع موجودة على كل لوحة فرعية، والنظام يُعيد تطبيقها عند كل تبديل تبويب.
لا تُعرّف روابط الفلتر المتقاطع على لوحة Tabbed الأم نفسها — هذا مقصود. تبقى اللوحات الفرعية مكتفية بذاتها (حتى تستمر في العمل عند استخدامها مستقلة)، واللوحة الأم تجمع فقط ما تُعلنه.
الأداء — التحميل الكسول لكل تبويب
يُجلب من الخادم فقط widgets التبويب النشط. التبديل بين التبويبات يُشغّل جلباً للتبويب الجديد؛ التبويبات المحمّلة سابقاً لا تُعاد جلبها حتى تعود إليها. هذا يعني أن اللوحات الثقيلة في التبويبات نادرة الزيارة لا تُبطئ اللوحة الأم — تدفع فقط مقابل ما تنظر إليه.
تغييرات الفلتر المتقاطع تُعيد جلب التبويب النشط فقط أيضاً. التبويبات الأخرى تلتقط الفلتر عند زيارتها لاحقاً.
الإشارات المرجعية والمشاركة
التبويب النشط مُشفَّر في URL كمعامل استعلام sd (sub-dashboard). لذلك يمكنك:
- وضع إشارة مرجعية على تبويب + تركيبة فلاتر محددة، والرابط يُعيد الفتح في نفس الحالة
- مشاركة رابط يوجّه الزملاء مباشرة إلى "تبويب المستودع مع فلتر تاريخ Q1 مُطبَّق مسبقاً"
- استخدام أزرار رجوع/تقدم المتصفح — التبديل بين التبويبات لا يكسر سجل التنقل إلا بتحديث URL
ما الذي يختلف في تعديل لوحات Tabbed
لوحة Tabbed لا تحتوي شبكة widgets، لذلك:
- مصمم التخطيط لا يفتح للوحات الأم Tabbed. اضغط "تعديل عناصر لوحة المعلومات" وسترى رسالة خطأ تطلب استخدام شبكة Sub Dashboards بدلاً من ذلك.
- لتعديل تخطيط widgets لوحة فرعية، انتقل إلى تلك اللوحة الفرعية مباشرة (لا تزال لوحة Single عادية) واستخدم مصمم التخطيط هناك. التغييرات تظهر في اللوحة الأم تلقائياً.
القواعد والحدود
تُطبَّق بعض الثوابت عند الحفظ:
- لا تبويبات متداخلة. لا يمكن للوحة فرعية أن تكون بدورها Tabbed. التبويبات عمق واحد — يتجنب هذا الحلقات ويبقي واجهة المستخدم متوقعة.
- لا مرجع ذاتي. لا يمكن للوحة معلومات إدراج نفسها كإحدى تبويباتها.
- لا لوحات فرعية مكررة. يمكن لكل لوحة فرعية الظهور مرة واحدة على الأكثر في قائمة التبويبات.
- روابط الفلتر المتقاطع على اللوحات الفرعية فقط. لا يمكن للوحة الأم Tabbed امتلاك روابطها الخاصة — الاتحاد من اللوحات الفرعية هو ما يُشغّل الشريط.
- فلترة الصلاحيات في وقت التشغيل. إذا كان بإمكانك رؤية اللوحة الأم لكن ليس لوحة فرعية معينة، يظهر التبويب مع ذلك لكنه يُصيّر رسالة خطأ بدلاً من الـ widgets، لتعلم أن هناك شيئاً مقيّداً بدلاً من إخفائه صامتاً.
الفلاتر المتقاطعة (Cross-Filtering)
الفلتر المتقاطع هو كيفية تواصل المخططات مع بعضها. عند الضغط على عمود "فرع الرياض" في مخطط، تُعيد جميع المخططات الأخرى على لوحة المعلومات جلب بياناتها مفلترة على فرع الرياض. اضغط مرة أخرى ويُزال الفلتر.
وقيم الفلاتر المتقاطعة عامة، لا خاصة بلوحة واحدة. فالفلتر الذي تضبطه على لوحة يبقى مضبوطاً عند انتقالك إلى لوحة أخرى — فإن كانت تلك اللوحة مرتبطة بنفس الفلتر المتقاطع، فُتحت وهي مفلترة سلفاً. أزل الرقيقة من شريط الفلاتر متى أردت البدء من صفحة نظيفة.
كيف يعمل
يوجد ثلاثة مكونات في إعداد الفلتر المتقاطع:
كيان BICrossFilter — تعريف فلتر قابل لإعادة الاستخدام مخزّن في النظام. يحدد نوع المعامل (مرجع، تاريخ، نص، إلخ)، وعمود SQL الذي يُفلتر عليه، ومشغّل المقارنة المستخدم. تُنشئ هذه مرة واحدة وتُعيد استخدامها عبر widgets كثيرة.
روابط الفلتر المتقاطع على الـ widgets — كل widget تُعلن الفلاتر المتقاطعة التي تستجيب لها. عند تفعيل فلتر، يحصل استعلام SQL للـ widget على عبارة WHERE إضافية مُحقنة تلقائياً.
ربط إصدار النقر (Click emit mapping) على الـ widgets — كل widget يمكنها الإعلان عن الفلاتر المتقاطعة التي تُصدرها عند نقر المستخدم عليها. هذا ما يجعل نقرة على مخطط دائري تُعيّن فلتراً تتفاعل معه مخططات أخرى.
وتعريف الفلتر نفسه يبدو هكذا:

شريط الفلاتر (The Filter Bar)
في أعلى كل لوحة معلومات تستخدم الفلاتر المتقاطعة، ترى شريط الفلاتر. يُظهر:
- زر الفلاتر (Filters button) مع عدد الفلاتر النشطة (مثل: "الفلاتر: 3")
- رقائق الفلاتر (Filter chips) — واحدة لكل فلتر نشط، تعرض تسمية الحقل والقيمة المحددة مع زر X للإزالة
- النقر على زر الفلاتر يفتح حوار محرر الفلاتر حيث يمكن ضبط أو تغيير قيم فلاتر متعددة دفعة واحدة

وهذا هو الحوار خلف ذلك الزر:

قد يفتح الحوار فارغاً
إذا كانت لوحة المعلومات تعرض فلاترها المتقاطعة أصلاً كـ widgets مقسِّمة على الشبكة — صف المنتقيات الذي تراه غالباً تحت شريط الأدوات — فتلك الفلاتر تصل مُعلَّمة كمخفية عن الحوار، فيفتح الحوار بلا صفوف على الإطلاق. لا شيء معطّل: اضبط القيم من المقسِّمات نفسها.
أنواع الفلاتر (Filter Types)
تدعم الفلاتر المتقاطعة جميع أنواع البيانات المتوقعة:
| النوع | مثال | تحكم واجهة المستخدم |
|---|---|---|
| مرجع (Reference) | الفرع، العميل، الصنف | حقل بحث الكيان |
| تاريخ (Date) | من تاريخ، إلى تاريخ | منتقي تاريخ |
| نص (Text) | كلمة بحث | إدخال نصي |
| عدد صحيح / عشري (Integer / Decimal) | الحد الأدنى للمبلغ | إدخال رقمي |
| Enum | حالة الفاتورة | قائمة منسدلة |
| منطقي (Boolean) | النشطون فقط | مربع اختيار |
| قائمة (List) | فروع متعددة | اختيار متعدد |
| نطاق تاريخ (Date range) | مدة كاملة في أداة واحدة | منتقي نطاق بمدد جاهزة — انظر «فلاتر نطاق التاريخ» أدناه |
فلاتر نطاق التاريخ (Date-Range Filters)
حصر اللوحة بين «أول الشهر واليوم» عبر فلترَي تاريخ منفصلين يعني سجلَّين تحافظ عليهما، وشريحتين في شريط الفلاتر، وفرصتين لأن يفترق طرفا المدة عن بعضهما. وضع علامة عرض كنطاق تاريخ (Show as Date Range) على الفلتر المتقاطع يدمج هذين الفلترين في أداة واحدة تحمل طرفَي المدة معاً.
الإعداد يتم على سجل الفلتر المتقاطع: ضع علامة عرض كنطاق تاريخ — وهو بجوار نوع المُدخل (Parameter Type) ونوع عرض القائمة (List Display Type) — واجعل عمود SQL الأيسر (SQL Left Hand Side) يشير إلى عمود التاريخ المراد حصره. لا حاجة لسجل ثانٍ؛ فالطرفان يخرجان من هذا السجل وحده.
على اللوحة يظهر الفلتر كزر يعرض المدة المختارة. افتحه وستختار إما:
- مدة جاهزة، معروضة في ثلاث مجموعات — الحالية (اليوم، هذا الأسبوع، هذا الشهر، هذا الربع، هذه السنة)، والسابقة (أمس، الأسبوع السابق، الشهر السابق، الربع السابق، السنة السابقة)، والمتحركة (آخر 7، آخر 30، آخر 90، آخر 365 يوماً).
- نطاقاً مخصصاً — انقر طرفَي المدة على التقويم، أو اكتبهما في خانتَي «من» و«إلى». وإن أدخلتهما بالعكس يُبدَّل ترتيبهما تلقائياً.
في الحالتين يستقبل كل widget مرتبط بهذا الفلتر المتقاطع شرطين بدل شرط واحد: يقارَن العمود بـ >= بداية المدة وبـ <= نهايتها. فلتر واحد، أداة واحدة، وشرطان في SQL.
المدة الجاهزة تتحرك مع الزمن
اختيار مدة جاهزة يخزّن المدة نفسها، لا التاريخين اللذين تصادف أن حُسبا اليوم. فـ«هذا الشهر» يبقى هذا الشهر — افتح اللوحة نفسها الشهر القادم وستغطي الـ widgets الشهر الجديد. أما النطاق المخصص فعلى العكس: يثبّت التاريخين الحرفيين اللذين اخترتهما.
أمران يستحقان الانتباه أثناء الإعداد:
- المقارنة دائماً بزوج
>=/<=، فلا حاجة لاختيار المشغّل (Operator). - الشرط المخصص (Custom WHERE Clause)، سواء على الفلتر المتقاطع أو على ربط الـ widget، يظل هو الأسبق: يستبدل الزوج المولَّد بـ SQL الذي كتبته، تماماً كما يفعل مع أي فلتر عادي.
المشغّلات (Operators)
يمكن لكل فلتر متقاطع استخدام مشغّل مقارنة مختلف:
| المشغّل | SQL | الاستخدام الشائع |
|---|---|---|
| يساوي (Equal) | = | تطابق تام (الأكثر شيوعاً) |
| في (In) | IN (...) | اختيار متعدد القيم |
| أكبر من أو يساوي (GreaterThanOrEqual) | >= | تاريخ "من"، الحد الأدنى |
| أصغر من أو يساوي (LessThanOrEqual) | <= | تاريخ "إلى"، الحد الأقصى |
| أكبر / أصغر (GreaterThan / LessThan) | > / < | مقارنة صارمة |
| لا يساوي (NotEqual) | <> | الاستثناء |
| يحتوي (Contains) | LIKE '%...%' | بحث نصي |
| يبدأ بـ (StartsWith) | LIKE '...%' | تطابق البادئة |
الفلاتر المحلية للـ widget (Widget-Local Filters)
أحياناً يحتاج مخطط واحد إلى فلتر خاص به لا تشعر به بقية اللوحة — «أرِني هذا المؤشر للمنطقة الشمالية» بينما تبقى الـ widgets المجاورة على إجمالي المجموعة. لهذا وُجدت علامة محلي للعنصر (Widget-Local Scope) على سطر ربط الفلتر المتقاطع.
ضع العلامة على سطر الربط — في جدول ربط الفلاتر داخل الـ widget، أو على سطر التجاوز على مستوى اللوحة — فينتقل الفلتر من شريط فلاتر اللوحة إلى الـ widget نفسه: يظهر في الركن العلوي من الـ widget زر فلترة عليه شارة بعدد فلاتره المحلية النشطة، ونقره يفتح حواراً صغيراً فيه مُدخل لكل ربط محلي، مع زر تطبيق وزر مسح الكل.
والفلاتر المحلية معزولة عمداً عن حوار اللوحة:
- القيمة المنقورة على مخطط مجاور، أو المكتوبة في شريط فلاتر اللوحة، لا تصل إلى ربط محلي — لا يقوده إلا حوار الـ widget نفسه.
- إذا كانت كل ارتباطات فلتر متقاطع معيّن على اللوحة كلها محلية، اختفى ذلك الفلتر من شريط فلاتر اللوحة تماماً.
- والاستثناء هو Drill-Down لأنه إجراء صريح من المستخدم: فالـ drill-down الذي يستهدف فلتراً مرتبطاً محلياً يمرّر قيمته رغم ذلك.
القيم المحلية تُنقل في رابط اللوحة إلى جانب القيم العامة، فالرابط الذي تنسخه يُعيد فتح اللوحة بالحالة نفسها لكل widget.
التغذية الراجعة البصرية (Visual Feedback)
عند تفعيل الفلاتر المتقاطعة، تعرض الـ widgets شارات تشير إلى:
- "مفلتر بواسطة: الفرع، التاريخ" — بيانات هذه الـ widget مفلترة بهذه الفلاتر المتقاطعة
- "يُصدر: الفرع" — هذه الـ widget هي مصدر فلتر الفرع النشط
كما يُحاط الـ widget الذي أصدر الفلتر بإطار أعرض من إطار الـ widgets التي تتفاعل معه فقط:

مرّر الماوس على الشارة لرؤية قيم الفلتر الفعلية.
Drill-Down
يتيح Drill-Down للمستخدمين التنقل من البيانات الملخصة إلى البيانات التفصيلية. انقر بزر الماوس الأيمن على نقطة بيانات وتظهر قائمة سياقية تُريك أين يمكنك التعمق. هناك ثلاثة أشكال:
Widget Drill-Down (مخطط → مخطط)
انقر بزر الأيمن على نقطة بيانات ← اختر هدفاً ← تفتح نافذة تعرض مخطط الـ widget المستهدفة، مفلتراً مسبقاً على القيمة التي نقرت عليها. مثلاً: انقر بزر الأيمن على "الإلكترونيات" في مخطط دائري للمبيعات حسب التصنيف ← تعمق في مخطط "أفضل 10 أصناف في الإلكترونيات".
يمكنك تهيئة أهداف drill-down متعددة لكل widget، وتظهر كعناصر منفصلة في قائمة زر الأيمن.
Dashboard Drill-Down (مخطط → لوحة معلومات)
نفس الفكرة، لكن الهدف هو لوحة معلومات كاملة بدلاً من widget منفردة. فلاتر drill-down تُمرَّر إلى جميع الـ widgets على لوحة المعلومات المستهدفة. رائع للتحليل الهرمي — مثل: نظرة عامة على الشركة ← لوحة معلومات إقليمية ← لوحة معلومات الفرع.
Dimension Drill-By (نفس المخطط، بُعد أعمق)
إذا كانت widget تستخدم مصدر بيانات wizard مع حقول محددات متعددة، يمكنك التعمق حسب المحدد. انقر بزر الأيمن "الرياض" ← Drill down by… ← الشهر ← ترى نفس المقياس مصنّفاً حسب الشهر للرياض فقط. مسار التنقل (breadcrumb trail) يتتبع مسارك (المنطقة ← الفرع ← الشهر)، ويمكنك النقر على أي خطوة للعودة.
ولا يظهر Drill down by… إلا للـ widgets المدعومة بـ wizard. أما الـ widget الذي تأتي بياناته من استعلام SQL خام فلا يعرضه أبداً، مهما بلغ عدد الأعمدة التي يُرجعها الاستعلام، لأن النظام يحتاج هيكل حقول الـ wizard لإعادة بناء الاستعلام أثناء التشغيل.

كيف يعمل drill-by لمخططات متعددة الأبعاد (CategoryLabelValue، الأعمدة المكدّسة، إلخ):
- البُعد المُستعمق يحلّ محل التصنيف (محور X). إذا كان المخطط يحتوي أيضاً على بُعد تسمية (تفصيل السلسلة)، تلك التسمية تبقى في مكانها — يحافظ المخطط على نفس الشكل البصري مع المحور X الجديد.
- يتراكم في مكدّس الفلاتر فقط قيمة التصنيف التي نقرت عليها، لا قيمة التسمية. فالنقر بزر الأيمن على عمود "يناير / المنتج A" والتعمق حسب المنطقة يعطيك توزيع يناير الإقليمي عبر جميع المنتجات — لا المنتج A فقط.
- تُخفي قائمة زر الأيمن الأبعاد النشطة فعلاً على المخطط، لذا لا يمكنك التعمق بواسطة بُعد المخطط يُجمَّع بواسطته بالفعل.
إصدار الفلتر المتقاطع تدفق منفصل: النقر بزر الأيسر على نقطة بيانات يُصدر فلاتر لكل بُعد نشط لتلك النقطة (التصنيف + التسمية معاً)، بغض النظر عن drill-by.
Single-Click Drill-Down
افتراضياً، يتطلب drill-down نقر زر الأيمن. لكن يمكنك تهيئة widget بحيث يُشغّل نقر زر الأيسر هدف drill-down محدداً فوراً — دون حاجة لقائمة. يُهيَّأ هذا عبر إعداد clickAction في تبويبة Click & Links.
حوار Drill-Down
عندما يفتح drill-down في وضع النافذة المنبثقة (الافتراضي)، يعرض:
- مسار تنقل (breadcrumb trail) في الأعلى يُظهر المسار الذي سلكته (قابل للنقر للرجوع)
- المخطط المستهدف مُصيَّر مع فلاتر drill-down مُطبَّقة
- زر تكبير للعرض الكامل
- دعم drill-downs متداخلة — يمكنك التعمق من النافذة إلى نافذة أخرى

الروابط — التنقل إلى السجلات (Links — Navigate to Records)
أحياناً تريد الضغط على نقطة بيانات في مخطط والانتقال إلى سجل ERP الفعلي خلفها. هذا ما ربط الروابط (link mappings) مخصص له.
روابط الكيانات (Entity Links)
وجّه رابطاً نحو نوع كيان + عمود ID، والضغط يفتح شاشة التعديل لذلك السجل. مثلاً: الضغط على عمود "ABC Trading" يمكن أن يفتح سجل العميل لـ ABC Trading — في نافذة منبثقة أو نفس التبويب أو تبويب جديد.
لمسة جميلة: يمكنك تهيئة labelColumn بحيث تقول قائمة السياق "فتح العميل 'ABC Trading'" بدلاً من "فتح العميل" فقط.
روابط URL
إذا كان استعلام SQL يُرجع عمود URL، يمكنك الربط به مباشرة. URLs المطلقة (http/https) تفتح في تبويب جديد؛ URLs النسبية تتنقل داخل التطبيق.
أين تظهر الروابط
تظهر الروابط في قائمة السياق عند زر الأيمن تحت قسم "التنقل إلى". مثل drill-down، يمكنك أيضاً تهيئة رابط كإجراء النقر الأيسر الافتراضي.
قائمة السياق عند زر الأيمن (The Right-Click Context Menu)
عند النقر بزر الأيمن على نقطة بيانات في مخطط مُهيَّأ بتفاعلات، ترى قائمة منظمة يعلوها اسم النقطة التي نقرتها، ثم تُجمّع تحتها كل ما يمكنك فعله بتلك النقطة.

والأقسام هي:
- التنقل إلى (Navigate To) — روابط الكيانات وروابط URL المعرّفة على المخطط
- Open in… — أهداف التعمّق (widgets أو لوحات معلومات) المهيّأة على المخطط
- Drill down by… — المحددات التي يمكنك إعادة تجميع نفس المخطط بها
كل قسم يظهر فقط إذا كان الربط المقابل محدداً، ويشترط في Drill down by… زيادةً على ذلك أن يكون الـ widget مدعوماً بمصدر بيانات wizard. ومخطط بلا روابط ولا أهداف drill-down ولا محددات wizard لا يُظهر قائمة سياق على الإطلاق.
شريط أدوات المخطط (The Chart Toolbox)
يستطيع كل مخطط أن يحمل صفاً صغيراً من الأيقونات في ركنه العلوي، لكنها مخفية افتراضياً. تُظهرها من شريط أدوات اللوحة: خيارات العرض (View Options) — زر الـ ⋮ — ثم إظهار شريط الأدوات (Show Toolbox). والاختيار محفوظ في متصفحك وينطبق على كل لوحة تفتحها.
ومع تشغيل شريط الأدوات يوفّر المخطط:
- طيّ الـ widget — يطوي الـ widget إلى شريط عنوان، ونقر الشريط يعيده. والـ widgets المطوية محفوظة لكل لوحة على حدة، فتُفتح اللوحة كما تركتها.
- حفظ كصورة — يُنزّل المخطط كملف PNG.
- عرض البيانات (Data View) — يعرض الصفوف التي خلف المخطط كجدول للقراءة فقط، وهو أسرع طريق لقراءة الأرقام الدقيقة من صورة.
- خط / أعمدة / تكديس — في المخططات المرسومة على محورَي س وص، يبدّل طريقة الرسم في الحال، ومعه استعادة (Restore) لإرجاعها. ولا يظهر التكديس إلا إذا كان للمخطط أكثر من سلسلة.
- اختيار الخانات وقت التشغيل (Runtime Slot Selection) — في الـ widgets المبنية على مصدر Wizard، يفتح المنتقي الذي يتيح للقارئ تبديل البُعد أو المقياس المرسوم منه المخطط، لهذه الجلسة فقط. انظر مرجع وضع Wizard.
ويرى المسؤولون ثلاثة أزرار إضافية: فتح الـ Widget الذي يفتح سجل الـ widget، ونسخ EChart Option ونسخ استجابة الخادم، وهما يضعان JSON إعداد المخطط ورد الخادم الخام في الحافظة — وهما ما تحتاجه بين يديك حين يُرسم مخطط على غير ما توقعت.
أما الـ widgets غير البيانية — الجداول والبطاقات — فتحصل على زر طيّ في الركن نفسه ما دام شريط الأدوات ظاهراً. وwidgets المقسِّمات (Slicers) لا تُطوى.
ملخص تفاعلات المخطط (Chart Interactions Summary)
| الإجراء | ما يحدث |
|---|---|
| نقر أيسر على نقطة بيانات | يُصدر فلتراً متقاطعاً (افتراضي)، أو يتنقل/يُعمّق إذا كان clickAction مُهيَّأً |
| نقر أيسر على نفس النقطة مرة أخرى | يُزيل الفلتر المتقاطع (سلوك التبديل) |
| نقر أيمن على نقطة بيانات | يفتح قائمة السياق مع أهداف drill-down والروابط وخيارات drill-by |
| تمرير الماوس على نقطة بيانات | يعرض التلميح (وضع axis يعرض جميع السلاسل، وضع item يعرض نقطة واحدة) |
| عجلة التمرير | تكبير/تصغير إذا كان data zoom مفعّلاً |
| سحب شريط التكبير | يضبط نطاق البيانات المرئية |
| شريط الأدوات: حفظ كصورة (Save as Image) | يُنزّل المخطط كملف PNG |
| شريط الأدوات: عرض البيانات (Data View) | يفتح صفوف المخطط كجدول للقراءة فقط |
| شريط الأدوات: نسخ EChart Option | ينسخ JSON إعداد المخطط إلى الحافظة (للمسؤولين) |
Widgets الجداول (Table Widgets)
ليس كل شيء يحتاج إلى مخطط. تعرض widgets الجداول نتائج الاستعلامات في شبكة بأعمدة قابلة للفرز وتغيير الحجم. أسماء أعمدة SQL تصبح رؤوس الشبكة — لا إعداد إضافي مطلوب سوى الاستعلام وربط الفلاتر المتقاطعة.
تحترم widgets الجداول الفلاتر المتقاطعة تماماً مثل widgets المخططات، لذلك عند الضغط على فرع في مخطط أعمدة، الجدول المجاور يتصفح لعرض سجلات ذلك الفرع فقط.
أيقونة التصدير في رأس الجدول تُنزّل الجدول كملف Excel. يُسمّى الملف باسم الـwidget الإنجليزي (أو العربي إن لم يكن له اسم إنجليزي) متبوعاً بتاريخ ووقت التصدير، مثل Sales by Branch.20261005.1112.xlsx. وإذا كانت خلايا الجدول تعرض HTML، يصل إلى Excel النص الذي يراه المستخدم فعلاً في الخلية — دون الوسوم والعناصر المخفية والتنسيقات، مع الإبقاء على فواصل الأسطر. وفلتر العمود يطابق على النص الظاهر نفسه. ينطبق هذا على الجدول الكلاسيكي (Table) وعلى الجدول المحسن (Enhanced Table).
Enhanced Table Widget
الـ Table widget الكلاسيكية سريعة الإعداد لكنها تعرض الأعمدة تماماً كما يُرجعها SQL — أرقام خام، بلا تنسيق، بلا ترميز لوني، بلا مصيّرات خلايا مميزة. الـ Enhanced Table widget (Table v2 (Enhanced) في منتقي نوع الـ widget، عربي: "جدول محسن") هي جدول من الجيل الثاني حيث كل عمود مُهيَّأ صراحة، لتحصل على تنسيق لكل عمود، وشارات ملونة، وأشرطة تقدم، وشرارات مضمّنة (sparklines)، وتنسيق شرطي مبني على قواعد — كل هذا دون لمس أي كود مخصص.

TIP
Enhanced Table ترقية اختيارية. الـ Table widget الكلاسيكية تستمر في العمل كما كانت تماماً. اختر Enhanced Table عندما تحتاج واحداً أو أكثر من: تنسيق العملة/النسبة المئوية/التاريخ، تلوين الإيجابي بالأخضر والسلبي بالأحمر، شارات الحالة، أشرطة التقدم المضمّنة، sparklines، رؤوس مجموعات الأعمدة، أو تثبيت الأعمدة.
ما يمكنه فعله
كل عمود يُضبط وحده، فيمكن أن يجمع الجدول الواحد بين:
- التنسيق — رقم، وعملة (رمزها قبل القيمة أو بعدها)، ونسبة مئوية، وتاريخ، وتاريخ ووقت، ومدة، مع ما تريده من خانات عشرية وفواصل.
- طريقة رسم الخلية — نص عادي، وHTML قادم من الاستعلام، وشارات ملوّنة، وأشرطة وأشرطة تقدّم، ومخططات مصغّرة داخل الخلية، وأيقونات تُختار بحسب القيمة.
- التنسيق الشرطي — تلوين الخلية أو جعلها غامقة أو مائلة بحسب حدّ، أو نطاق، أو مقارنة بعمود آخر، أو قائمة قيم، أو قيمة فارغة. والقواعد تُقيَّم على الخادم، فتُقارن الأرقام كأرقام والتواريخ كتواريخ.
- تنسيق الصف — القواعد نفسها مطبّقة على الصف كله، كتمييز كل صف هامشه سالب.
- مجموعات الأعمدة، وتثبيت الأعمدة، وعرضها، وتجميع الصفوف والإجماليات، والتخطيط المحوري (Pivot).
- التفاعلات المعتادة — الفلاتر المتقاطعة والـ drill-down وروابط السجلات تعمل كما في أي widget، ويمكن قصر كل منها على النقر في عمود واحد.
الإعدادات الدقيقة لكل ذلك في مرجع Enhanced Table.
الجداول الكبيرة — الترقيم من الخادم
يرسل الجدول المحسن عادةً كل صفوفه إلى المتصفح عند فتح اللوحة. هذا أسرع خيار لجدول من بضع مئات من الصفوف، لكن الجدول الذي يحتوي عشرات الآلاف من الصفوف يجعل اللوحة بطيئة الفتح وثقيلة التمرير.
لهذه الجداول افتح Table Options واضبط طريقة تحميل الصفوف على تحميل صفحة بصفحة من الخادم، ثم اختر حجم الصفحة (الترقيم من الخادم) (الافتراضي 100). يُنفَّذ الاستعلام مرة واحدة كما كان؛ الفرق أن الخادم يحتفظ بالنتيجة ويستقبل المتصفح صفحة واحدة في كل مرة. الفرز وفلاتر الأعمدة يطبّقها الخادم على النتيجة الكاملة، فالفلتر في الصفحة الأولى يجد صفاً مطابقاً كان في الصفحة 300، والتصدير إلى Excel يصدّر كل الصفوف المطابقة للفلاتر الحالية — لا الصفحة الظاهرة فقط.
الترقيم من الخادم يعمل على القوائم البسيطة فقط. إذا كان للجدول تخطيط pivot، أو صف إجمالي كلي أو مجاميع فرعية، أو تجميع للصفوف، أو أي عمود عليه تجميع للقيم، يستمر الـwidget بصمت في تحميل كل الصفوف مرة واحدة — والمصمم ينبّه إلى ذلك أسفل مربع طريقة التحميل. في وضع الخادم لا يستطيع المستخدم سحب الأعمدة إلى مجموعات أو pivot، لكن النقر والفلاتر المتقاطعة والـdrill-down وروابط السجلات تعمل كالمعتاد. وإذا بقي الجدول دون استخدام 15 دقيقة، يجعله طلب الصفحة التالية يعيد تنفيذ استعلامه ويُحدِّث نفسه تلقائياً.
القواعد والإعدادات بالتفصيل في مرجع الجدول المحسن §2.1.
ملاءمات المسؤول (Admin Conveniences)
عند تسجيل الدخول كـ admin (أو أي مستخدم بـ treatAsAdmin مُفعَّل)، يُظهر شريط أدوات الـ widget زرَّين إضافيَّين:
- نسخ JSON البيانات (Copy Data JSON) — ينسخ الحمولة البيانية المحسوبة بالكامل للـ widget إلى الحافظة. مفيد لتصحيح قواعد التنسيق أو فهم سبب مظهر خلية معينة.
- فتح الـ Widget (Open Widget) — يفتح شاشة تعديل الـ widget في تبويب جديد. نفس الزر يظهر أيضاً على widgets
TableوMetrics CardsوCard MenuوEChartللمسؤولين، يُتيح وصولاً بنقرة واحدة لإعداد الـ widget من أي لوحة معلومات.
المصمم (Designer)
محرر إعداد المخطط للـ Enhanced Table widgets يستبدل تبويبة Data Mapping الخاصة بـ ECharts بتبويبة Table Columns.

ومن تلك التبويبة يمكنك:
- سرد الأعمدة وإعادة ترتيبها (أزرار سحب وإسقاط)
- تعديل id وfield ورؤوس كل عمود وعرضه وتثبيته ونوع المصيّر ونوع التنسيق مضمّناً
- البدء من استعلام SQL عبر زر توليد الأعمدة من مجموعة النتائج (Generate Columns From Result Set) — يُشغّل SQL مصدر البيانات ويُولّد عموداً افتراضياً لكل رأس في مجموعة النتائج، لتبدأ غير فارغ
تبويبة Table Options المرفقة تغطي مفاتيح مستوى الشبكة (pagination، تجميع الصفوف، صف الإجمالي الكلي، طريقة تحميل الصفوف، إلخ).
للإعداد الأكثر تقدماً — تحديداً مجموعات الأعمدة، وخيارات كل مصيّر مثل bar min/max أو تعيينات الأيقونات، وDSL قواعد التنسيق الشرطي الكاملة — استخدم تبويبة Raw JSON. ومرجع Enhanced Table يحتوي الـ schema الكاملة.
متى تستخدم أيًّا منهما
| حالة الاستخدام | الـ Widget |
|---|---|
| شبكة مخصصة سريعة على استعلام SQL، بلا تنسيق | Table |
| جداول مالية بتنسيق عملة، والسلبي باللون الأحمر، والإجماليات | Table v2 (Enhanced) |
| أعمدة الحالة / الأولوية / التصنيف التي ينبغي عرضها كشارات ملونة | Table v2 (Enhanced) |
| جداول نمط KPI مع أشرطة مضمّنة أو sparklines تعرض الحجم النسبي | Table v2 (Enhanced) |
| جداول بمجموعات أعمدة، أعمدة مثبّتة، أو إعدادات تجميع مسبقة لكل عمود | Table v2 (Enhanced) |
ترقية جدول موجود (Upgrading An Existing Table)
لا ترقية تلقائية — التبديل خيار متعمد لكل widget:
- عدّل سجل
DashBoardWidgetوغيّر نوعه منTableإلىTable v2 (Enhanced). - افتح محرر إعداد المخطط. تبويبة Table Columns تظهر بدلاً من تبويبة ربط بيانات ECharts.
- اضغط توليد الأعمدة من مجموعة النتائج لتولّد أعمدة من SQL الـ widget.
- اضبط التنسيق والمصيّرات والتنسيق الشرطي كما تريد.
- احفظ. أي ربط فلاتر متقاطعة وdrill-down وروابط موجود يستمر في العمل — حقل
columnعلى تلك الروابط يطابق بالفعلids الأعمدة الافتراضية (التي هي فقط أسماء أعمدة SQL).
مصادر البيانات (Data Sources)
كل widget تحصل على بياناتها من استعلام SQL خام أو مصدر بيانات wizard.
SQL الخام (Raw SQL)
تكتب استعلام SELECT بـ T-SQL قياسي. المتطلب الوحيد هو تضمين placeholder المكتوب /*AND-FILTERS*/ في عبارة WHERE — هنا يضخّ النظام شروط الفلتر المتقاطع في وقت التشغيل. لأنه تعليق SQL، يبقى استعلامك صالحاً إذا لصقته في SQL Server Management Studio للاختبار.
مصدر بيانات Wizard
بدلاً من كتابة SQL، تُعرّف مصدر بيانات باستخدام معرفات حقول نما (مسارات الخصائص مثل customer.customerCategory أو price.netValue). النظام يولّد SQL تلقائياً. حقول Wizard مُصنَّفة إما كـ Dimension (group-by / تصنيف) أو Measure (قيمة مجمّعة بـ Sum، Count، Average، Min، أو Max).

تُتيح مصادر بيانات Wizard عدة ميزات في المصمم ووقت التشغيل لا تحصل عليها widgets SQL الخام:
- Dimension drill-by — انقر بزر الأيمن على نقطة بيانات وتعمق بواسطة أي بُعد آخر محدد على الـ wizard. متاح فقط للـ widgets المدعومة بـ wizard لأن النظام يحتاج هيكل الحقل لإعادة بناء الاستعلام أثناء التشغيل.
- أعمدة الفلتر المتقاطع المستنتجة تلقائياً — عند إصدار فلتر متقاطع من حقل مرجع (مثل
customer.customerCategory)، لا تكتب أعمدة id / code / name1 / name2 / entityType. النظام يقرأها من بيانات وصفية لحقل الـ wizard، المخزّنة عند حفظ الـ wizard. - ربط نقر وdrill-down لكل بُعد — إذا كان المخطط يحتوي أبعاداً متعددة (مثل التصنيف والتسمية على عمود مكدّس)، كل بُعد له مجموعته الخاصة من إدخالات click-emit وdrill-down. مصمم المخطط يُظهر أداة اختيار "Active Dimension" في تبويبتَي Click & Links وDrill-Down للتبديل بينها.
- منتقيات معرف الحقل بدلاً من منتقيات اسم العمود — منتقيات ربط البيانات والفلتر المتقاطع وdrill-down في المصمم تُدرج معرفات حقول wizard (مع العناوين المترجمة والمعرف الخام لإزالة الغموض) بدلاً من أسماء أعمدة SQL الخام.
في كل مرة تحفظ wizard، يُحسب النظام مسبقاً سجل بيانات وصفية لكل حقل (الاسم المستعار للعرض، SQL LHS، نوع الكيان المُشار إليه، اسم مستعار للأعمدة الفرعية للمراجع) ويُخزّنه على سطر الحقل. تصيير المخطط يقرأ من هذه الذاكرة المؤقتة، لذا widgets وضع wizard لا تدفع تكلفة إعادة بناء الاستعلام عند كل طلب فقط للبحث عن الأسماء المستعارة.
تنسيق الأرقام (Number Formatting)
يمكنك تحديد كيفية عرض القيم الرقمية في التلميحات وتسميات المحاور وتسميات البيانات. تشمل خيارات التنسيق:
| نوع التنسيق | مثال الإخراج |
|---|---|
number | 1,234,567.89 |
currency | SAR 1,234,568 |
percent | 85.5% |
compact | 1.2M, 45K |
يمكنك أيضاً التحكم في الخانات العشرية وتحديد رمز العملة. إذا عيّنت النوع إلى currency دون تحديد العملة، يستخدم النظام العملة الافتراضية لمؤسستك.
مقارنة الفترات (Period Comparison)
أحياناً تحتاج الإجابة على "كيف يقارن هذا الربع بنفس الربع من العام الماضي؟" دون بناء لوحة معلومات مختلفة تماماً. ميزة مقارنة الفترات تتولى هذا — يُشغّل النظام استعلام الـ widget الموجود مرتين (مرة للتواريخ الحالية، مرة للتواريخ المنزاحة) ويدمج النتائج، لذا كل مخطط يشترك يعرض تلقائياً الفترتين جنباً إلى جنب.
الإعداد
ثلاثة مكونات مطلوبة:
إنشاء
BI Period Comparison Config— ملف رئيسي يُعرّف:- مقدار إزاحة التواريخ (مثل: سنة واحدة، 3 أشهر) باستخدام حقل
Subtracted Period - أسماء الأعمدة للأعمدة المحقونة للفترة (مثل:
periodAr/periodEn) - تسميات العرض لكل فترة (مثل: "السنة الحالية" / "السنة السابقة" بالعربية والإنجليزية)
- مقدار إزاحة التواريخ (مثل: سنة واحدة، 3 أشهر) باستخدام حقل
ربطه بفلاتر التاريخ المتقاطعة — على كل فلتر تاريخ متقاطع (مثل: من تاريخ، إلى تاريخ)، عيّن حقل
Period Comparison Configللـ config الذي أنشأته. يجب أن يشير كلا فلترَي التاريخ إلى نفس الـ config لإزاحة كلا طرفي النطاق معاً. وإن استخدمت فلتر نطاق تاريخ واحداً بدل زوج «من/إلى»، فعيّن الـ config على ذلك السجل وحده — ويُزاح طرفا مدته معاً.تفعيل المقارنة على كل widget — على الـ widget، ضع علامة على مربع الاختيار
Enable Comparison. الـ widgets التي بها هذا العلم فقط ستُشغّل مقارنة الاستعلام المزدوج. الـ widgets الأخرى على نفس لوحة المعلومات تستمر في العمل عادياً باستعلام واحد.

وضعان للمقارنة
الوضع A — عمود تسمية الفترة (للمخططات الاتجاهية)
الأفضل لمخططات الخطوط والمساحات وأي مخطط يستخدم ربط بيانات CategoryLabelValue. يضخّ النظام عمود فترة في مجموعة النتائج (باستخدام أسماء الأعمدة من الـ config)، ويمكن لـ labelColumn في المخطط الرجوع إليه للحصول تلقائياً على سلسلتين — سلسلة لكل فترة.

مثال: مخطط خط اتجاه المبيعات الشهرية مع categoryColumn: "monthLabel" وlabelColumn: "periodEn". عندما يختار المستخدم يناير–مارس 2026، يعرض المخطط خطّين: "السنة الحالية" و"السنة السابقة"، كلاهما مرسوم على الأشهر 01، 02، 03.
لهذا الوضع، نسّق شهرك/تصنيفك لاستبعاد السنة (مثل: FORMAT(l.valueDate, 'MM') بدلاً من 'yyyy-MM') بحيث تتوافق نفس الأشهر عبر الفترات.
الوضع B — تقسيم العمود (لمخططات الأعمدة والسلاسل الصريحة)
الأفضل لمخططات الأعمدة والقوائم المرتبة وأي مخطط يستخدم CategoryValue مع سلاسل محددة صراحة. بدلاً من إضافة بُعد فترة، يقسم هذا الوضع عمود القياس إلى اثنين: واحد للفترة الحالية، وواحد للفترة السابقة.
هيّئه في شبكة Comparison Data Mapping للـ widget:
| العمود الأصلي | عمود الفترة السابقة |
|---|---|
netValue | prevNetValue |

ربط بيانات CategoryValue للمخطط يحتوي حينئذ على سلسلتين: واحدة لـ netValue ("السنة الحالية") وواحدة لـ prevNetValue ("السنة السابقة")، مُنتجاً أعمدة جنباً إلى جنب.
لـ EChart widgets، لا تحتاج إلى ضبط Merge Comparison Results By Columns — طبقة ربط بيانات ECharts تدمج بالفعل الصفوف التي تشترك في نفس مفاتيح التصنيف/التسمية وتجمع قيمها تلقائياً. لكن Merge Comparison Results By Columns مهم لـ أنواع widgets غير المخططات مثل Tables وMetrics Cards وغيرها حيث لا توجد طبقة ربط بيانات للتعامل مع الدمج. عيّنه إلى CSV للأعمدة التي تُحدد صفاً فريداً (مثل: itemClassName)، وسيطابق النظام الصفوف من كلتا الفترتين ويجمعها في صف واحد بدلاً من إلحاق التكرارات.
معاملات الاستعلام (Query Parameters)
بغض النظر عن الوضع، يضخّ النظام معاملَين في كل استعلام مقارنة: periodArValue وperiodEnValue. يمكن لمؤلفي الـ widget استخدامها مباشرة في SQL — مثلاً في تعبيرات CONCAT() أو CASE — لتسمية أو تحويل البيانات بناءً على الفترة التي يُستعلم عنها حالياً.
إنشاء لوحات المعلومات بالذكاء الاصطناعي (Creating Dashboards with AI)
يوثّق المرجع التقني لوحدة BI كل هيكل JSON ونمط SQL وتنسيق استيراد تحتاجه لإنشاء لوحات المعلومات برمجياً. مكتوب خصيصاً لأدوات الذكاء الاصطناعي والمطورين — مما يعني أنه يمكنك استخدام مساعد ذكاء اصطناعي لتصميم وتوليد ملفات استيراد لوحات معلومات كاملة لك.
استخدام الذكاء الاصطناعي لبناء لوحات المعلومات
إليك سير عمل يُجدي جيداً:
أعطِ أداة الذكاء الاصطناعي رابط المرجع التقني:
https://docs.namasoft.com/platform/bi/bi-module-technical-reference.htmlأخبره بنموذج البيانات الذي تعمل معه — يمكنك توجيهه إلى dm.namasoft.com لاكتشاف الـ schema
صف لوحة المعلومات التي تريدها بلغة طبيعية، مثلاً:
"أحتاج لوحة تحليل مبيعات بمخطط دائري يعرض المبيعات حسب فئة العميل، ومخطط أعمدة أفقي يعرض أفضل 10 أصناف، ومخطط خط اتجاه شهري، وجدول تفاصيل. يجب فلترة جميع المخططات حسب الفرع ونطاق التاريخ وفئة العميل. المخطط الدائري يُصدر فلتر فئة العميل عند النقر، ومخطط الأعمدة يتعمق في تفاصيل الفاتورة."
اطلب من الذكاء الاصطناعي توليد ملف import JSON كامل وفق تنسيق المرجع التقني
استورد الـ JSON المولَّد إلى نما عبر المزيد ← استيراد سجلات (راجع كيفية الاستيراد) — ستحصل على لوحة معلومات عاملة مع جميع الفلاتر المتقاطعة والـ drill-downs والتنسيقات جاهزة
بما أن الذكاء الاصطناعي قد يخمّن أسماء الجداول أو الأعمدة أو الـ joins بشكل خاطئ، من الأفضل إعطاؤه استعلاماً نموذجياً يحتوي الأعمدة والـ joins التي تريد استخدامها.
للـ wizards، يمكن تخطي الاستعلام النموذجي والسماح للذكاء الاصطناعي بالرجوع إلى dm.namasoft.com لمسارات الخصائص — الـ wizard يحلّ الـ joins تلقائياً من معرفات الحقول.
هذا أسرع بكثير من بناء كل widget يدوياً، خاصة للوحات المعلومات ذات المخططات المترابطة الكثيرة وإعدادات الفلاتر المتقاطعة المعقدة.
دع الذكاء الاصطناعي يراجع عمله بنفسه
المساعد الذي يكتب widget دون أن يراه يعمل إنما يخمّن: لا يستطيع أن يعرف أن استعلامه لا يُرجع صفوفًا، أو أن ربطًا (join) يعدّ كل فاتورة مرتين، أو أن فلترًا متقاطعًا لا يصل إلى الاستعلام أصلًا. اربطه بالنظام عبر MCP وامنحه أدوات لوحات المعلومات — يضيفها زر Add Report Tools في شاشة AI Tool Definition — فيستطيع أن يُغلق هذه الحلقة بنفسه:
- يشغّل لوحة معلومات ويقرأ ما يعرضه كل مخطط وجدول وبطاقة، أرقامًا لا صورة، بالفلاتر المتقاطعة التي تختارها.
- يشغّل widget واحدًا ويقرأ استعلام SQL الذي نفّذه فعلًا — وقد كُتبت شروط الفلاتر المتقاطعة في موضع
/*AND-FILTERS*/ومُلئت المدخلات — بجانب الصفوف التي أرجعتها قاعدة البيانات. وهذا يكفي غالبًا للتفريق بين استعلام خاطئ وإعدادات مخطط خاطئة. - يعاين تعديلًا على استعلام الـ widget أو إعدادات مخططه دون حفظه، ويصحّحه حتى تصح الأرقام، ثم يستورده بعد ذلك فقط.
يعمل المساعد في كل ذلك بصلاحيات المستخدم الذي يتصل باسمه، ورؤية استعلام الـ widget تحتاج صلاحية تعديل عناصر لوحات المعلومات.