المقدمة

تتناول هذه المقالة أهمية تخصيص جدول التاريخ عند العمل على تحليلات زمنية في Power BI، بدلاً من الاعتماد على الخيارات الافتراضية التي قد لا تتناسب دائماً مع احتياجات المستخدم وتؤثر على الأداء والمساحة التخزينية.

ينصح الكاتب باستخدام دالة CalendarAuto لإنشاء جدول تاريخي مخصص، ويوضح أن اختيار الطريقة المناسبة يعتمد على مدى تعقيد التحليلات المطلوبة، مع التأكيد على ضرورة الوعي والاستفادة من الخيارات المتاحة لتحقيق أفضل النتائج.


الحمد لله الذي علَّم بالقلم، علَّم الإنسان ما لم يعلم، والصلاة والسلام على خير معلِّم الناس الخير سيدنا محمد — صلَّى الله عليه وسلم … أما بعد،

يعد برنامج (Microsoft Power BI) أحد أهم البرامج المستخدمة في تحليل وعرض البيانات بشكل واسع جدا" على المستوي العالمي والعربي، ويبدو هذا جليا" من خلال تصنيف جارتنر (Magic Quadrant) الشهير.

ما هو تصنيف Magic Quadrant؟

تصنيف Magic Quadrant من مؤسسة Gartner هو واحد من أهم المراجع التي تحدد من يتصدر سوق التقنيات. هذا التصنيف لا ينظر إلى الشركة ككل، بل يركز على المنتجات والمنصات التي تقدمها في مجال محدد مثل تحليل البيانات وذكاء الأعمال.

يعتمد على بعدين أساسيين:

  • قوة التنفيذ: أي مدى نجاح المنصة في السوق من حيث الاستخدام والانتشار.
  • وضوح الرؤية: أي خطط الشركة للمستقبل ومدى ابتكارها.

وبحسب هذين البعدين، تُصنّف الشركات إلى أربع مجموعات: قادة، منافسون، أصحاب رؤية، ولاعبون متخصصون. الفئة الأهم هي "القادة"، حيث نجد المنصات التي تجمع بين قوة المنتج ورؤية مستقبلية واضحة، مثل Microsoft Power BI, Tableau.

صورة توضيحية 1 - تصنيف جارتنر لبرامج تحليل البيانات وذكاء الأعمال عن شهر يونيو لعام 2024

Microsoft Power BI

برنامج تحليل وعرض البيانات (Microsoft Power BI) يبدو هو الحصان الرابح بالمنافسة حتى الأن وذلك لأسباب عدة أهمها أنه يوفر أداة مدمجة لبناء مسارات استخراج ومعالجة وتحميل البيانات (Extract – Transform – Load Data Pipelines) وكذلك أداة مدمجة لبناء نماذج قوية (Data Models) وكذلك لغة برمجة مخصصة لأعمال تحليل البيانات (Data Analysis eXpressions - DAX)، ولكن مع الميزة قد تأتي بعض التحديات والتي يجب علينا أخذها بعين الاعتبار. 


Challenges

أحد هذه التحديات هي الإعدادات الافتراضية التي يأتي بها البرنامج، وسنشارك بهذه المقالة إحدى هذه الإعدادات وما هي المشكلة التي تأتي معها وما هي الطريق الأكثر فعالية – على قدر ما لدينا من معرفة وخبرة – لمعالجة هذا الأمر ... عن وعي!

أهم هذه الخيارات هو الخيار المتعلق بإنشاء جدول للتاريخ مرتبط بكل عمود من أعمدة التاريخ المتواجدة بالنموذج (Data Model).

جدول للتاريخ مرتبط بكل عمود من أعمدة التاريخ المتواجدة بالنموذج
جدول للتاريخ مرتبط بكل عمود من أعمدة التاريخ المتواجدة بالنموذج

في البداية لابد من شرح طريقة عمل هذا الخيار:

  1. يقوم المحرك الداخلي لبرنامج (Power BI) بعمل مسح شامل لجميع الجداول أثناء تحميلها (Data Loading through Power Query) وعندما يجد عمود يحتوي على بيانات من النوع تاريخ يقوم مباشرة بإنشاء جدول خفي عبارة عن 7 أعمدة.
صورة توضيحية 3 - جدول خفي يتم إنشاؤه تلقائيا" لكل عمود بحتوي بيانات من نوع تاريخ
صورة توضيحية 3 - جدول خفي يتم إنشاؤه تلقائيا" لكل عمود بحتوي بيانات من نوع تاريخ
  1. يقوم (Power BI) بإنشاء الجدول ويكون عبارة عن جدول من النوع (Date Table) ويكون العمود الرئيسي به هو التاريخ وتكون القيمة الصغرى بهذا العمود هي أقل تاريخ ذكر في عمود التاريخ بالجدول الأساسي، والقيمة الكبري هي أعلي تاريخ ذكر بالجدول الأساسي، ثم يقوم بإنشاء عمود يوضح اسم الشهر ورقمه، واسم الربع سنة ورقمه، وعمود للعام وأخر لليوم.
صورة توضيحية 4 - شكل الجدول الخفي الخاص بالتاريخ التلقائي
صورة توضيحية 4 - شكل الجدول الخفي الخاص بالتاريخ التلقائي
  1. وكذلك لكل عمود من نوع التاريخ متواجد بالنموذج، فإن كان هناك عدد 10 أعمدة سيقوم المحرك بإنشاء عدد 10 جداول للتاريخ بنفس التركيب الموضح أعلاه مع اختلاف القيمة الصغرى والكبري علي حسب اختلاف التاريخ من عمود لأخر. 
  2. يتم استخدام هذا الجدول في عمل التحليلات الزمنية المختلفة وكذلك الحسابات الزمنية مثل (Time Intelligence To-Date Performance, Previous Period Calculations, Rolling Time Calculations).

علي سبيل المثال نستطيع باستخدام خاصية ال (Quick Measure) أن نقوم بإنشاء عدد من (Measures) باستخدام نفس الجدول بشكل تلقائي بدون تواجد جدول للتاريخ داخل النموذج أو حتى وجود علاقة بين الجدول الرئيسي وجدول التاريخ التلقائي، والسبب في ذلك هو أن الجدول التلقائي يتم إنشاؤه وتوجيهه للعمل داخل الجدول الذي يحتوي على عمود التاريخ وبالتالي لا حاجة لأي علاقات مباشرة داخل ال (Data Model).

إذا" ما الفائدة من تفعيل هذا الخيار؟ وما هي العيوب لوجود هذا الجدول الذي يتم إنشاؤه بشكل تلقائي لكل عمود تاريخ متواجد بالنموذج (Data Model)؟


الفوائد المتعلقة بتفعيل جدول التاريخ لكل عمود

  1. الفائدة الأولي أنه يمكننا من عمل تحليلات مختلفة للبيانات باستخدام التاريخ مثل السنة، ربع السنة، والشهر وذلك بدون تواجد أي جدول مخصص للتاريخ (تم إنشاؤه بواسطتنا نحن المستخدمين) ولكن لتعلم عزيزي القارئ أن التحليل الذي سينتج سيكون معتمدا" بشكل كلي على Table Context وهنا قد يكون ال Fact Table.
  2. يمكننا بناء Quick Measure بشكل سريع كما بالصورة وسيكون معتمد اعتمادا" كليا" على هذا الجدول المنشأ بشكل تلقائي.
صورة توضيحية 5 - سهولة إنشاء (Quick Measure) معتمد على التاريخ المتواجد بالجدول الافتراضي
صورة توضيحية 5 - سهولة إنشاء (Quick Measure) معتمد على التاريخ المتواجد بالجدول الافتراضي

إذا" الأمور تسير بشكل جيد، يقوم ال (Power BI) بحمل مسؤولية إنشاء الجدول بشكل تلقائي ويقوم بتوفير إمكانية عمل التحليلات الزمنية بشكل مستقل داخل كل جدول وما الي ذلك، إذا" أين المشكلة؟!


المشاكل والتحديات المتعلقة بتفعيل جدول التاريخ لكل عمود

المشكلة ببساطة أننا في حالة تفعيل هذا الخيار وكان لدينا العديد من الجداول التي تحتوي على العديد من أعمدة التاريخ فإن المحرك سيقوم بإنشاء جدول تلقائي بنفس المواصفات السابق ذكرها لكل عمود تاريخ بكل جدول داخل النموذج وبالتالي قد يفوق عدد هذه الجداول تلك المتواجدة بالنموذج أصلا" مما سيتسبب على المدي البعيد في مشاكل أداء من ناحيتي السرعة والمساحة التخزينية.

إذا"، ما الحل؟ ... الحل هو أن نقوم بعدم تفعيل هذا الخيار بشكل تلقائي وأن نقوم بإنشاء جدول واحد للتاريخ ليكون (Dimension Table) ومن ثم ربطه بكل الجداول التي نحتاجها لعمل تحليلات زمنية مختلفة، ولكن كيف؟!

الحقيقة تتواجد العديد من الطرق والوسائل لإنشاء هذا الجدول وسنكتفي في هذه المقالة بطرقة واحدة فقط وهي طريقة إنشاء هذا الجدول باستخدام دالة (CalendarAuto) مع بيان بعض التخصيصات التي تساهم في زيادة قدرتنا على التحكم في الجدول الناتج.

 إذا أردنا ان نقوم بإنشاء جدول خاص بالتاريخ ويكون مخصص للتعامل مع جميع بيانات النموذج فإن أول خيار هو استخدام (AutoCalendar Functions): يقوم البرنامج بعمل مسح شامل لجميع أعمدة التاريخ المتواجدة بالنموذج (Data Model) ومن ثم يقوم بإنشاء جدول من عمود واحد تاريخه يبدء من أقل تاريخ متواجد بأي عمود تاريخ، وينتهي عند أعلي تاريخ متواجد بأي عمود تاريخ.

فإن كان لدينا عمودين للتاريخ أحدهما (OrderDate) وأقل تاريخ متواجد به هو 1-1-2021 وأعلي تاريخ متواجد به هو 31-12-2021 وكان لدينا عمود أخر (StockDate) أقل تاريخ متواجد به 10-6-2020 وأعلي تاريخ متواجد به هو 31-12-2021، سيكون الجدول الذي تم إنشاؤه يتراوح تاريخ ما بين 1-1-2020 الي 31-12-2021.

وهنا قد تأتي مشكلة أننا نريد التعامل مع OrderDate فقط وبالتالي سيكون المدي الزمني المتواجد بجدول التاريخ كبير ويمتد لمدة عامين وإن كان هذا غير ملائم فإننا نستطيع تخصيص هذا الجدول ليحتوي على أقل وأعلي قيم التاريخ المتواجدة بعمود محدد مثل الكود المرفق.

Data Table Example
Data Table Example

ووقتها نكون قد قمنا بتوفير جميع الجداول التي يتم إنشاؤها تلقائيا" وقمنا بعمل جدول واحد مخصص وفقا" لاحتياجنا. 


في الختام

لابد لنا من فهم الخيارات الافتراضية المتواجدة بالبرنامج لأن بها العديد من الخيارات التي تؤثر بشكل مباشر على الأداء من ناحية السرعة والمساحة التخزينية. إذا كنت من محبي عمل التحليلات السريعة والخاطفة من خلال جدول واحد فقط، أنصحك بتفعيل هذا الخيار وحينها سيقوم ال (Power BI) بعمل ما يلزم نيابة عنك.

أما إذا كنت من محبي بناء نماذج البيانات والعمل على تحليلات زمنية على أكثر من جدول بشكل معقد، حينها أنصحك بعدم تفعيل ذلك الخيار والعمل على إنشاء الجدول الخاص بك ليكون ملائم أكثر لمتطلباتك.

بالنهاية، كن واعيا" عند استخدام الخيارات الافتراضية والق نظرة دائما" على جدواها ومدي فعاليتها واستغلها لأجل أن تقوم بعمل أفضل وأكثر فعالية.