فخ الهوة أو الفجوة (Chasm Trap)

0
من أصعب ما يوجه المتخصص في البيانات هو الفهم الصحيحة لهندسة البيانات والتعامل مع قواعد البيانات حيث يعتقد الكثير أنه بمجرد الوصول الى قواعد البيانات لم يتبقى عليه الا العمل على تصحيحها والتأكد من سلامتها. بكل أسف إن عدم توفر المؤهلات للتعامل مع ضوابط العلاقات بين جداول البيانات أو ملفات ذات العلاقات المتعددة يؤدي الى الوصول الى بيانات مخادعة حتى مع الالمام بالفهم الصحيح لقواعد إجراءات دورة الحياة النظام التي تعرف عند المبرمجين بتحليل الاعمال.
من هذا يجب على المتخصص في البيانات الالمام بقواعد عمل البيانات عن طريق معرفة أسباب جمع البيانات والهدف من النظام وكذلك فهم الإجراءات الخاصة بمعالجة البيانات التي بالعادة يجمعها ويوثقها محلل الاعمال. وكذلك فهم الهندسة البرمجية لقواعد البيانات التي يقوم مهندس البيانات بحصرها وتحديد قواعدها حيث تكون الموجه الأساسي لبناء مستودع البيانات وتظهر الحاجة لها في المشاريع الكبيرة.
وكثير من محلل البيانات يحصل على الوصول الى قواعد البيانات أو يجمعها على شكل ملفات أو حتى من البيانات المتوفرة على شبكة الانترنت دون الالمام بهندسة البيانات وفي الحقيقة يصعب عليه أن يجمع بين هندسة البيانات وتحليل البيانات لكن لابد من معرفة أساسيات هندسة البيانات إذا كان مضطر للعمل دون توفر مهندس بيانات.
في هذه المقالة سأشرح أكثر من فخ أو خدعة في عالم البيانات التي في الغالب تصادف متخصص البيانات في مرحلة تجهيز البيانات وهي فقط من أشهرها وليست حصر.
ومن خلال خبرتي في التعامل مع البيانات لن يستطيع محلل البيانات أو مهندس البيانات في السيطرة على البيانات بدون العمل كفريق واحد وأكاد أجزم أنه من المستحيل الوصول لنتائج دقيقة إذا لم يكن فريق إدارة البيانات يتكون من محلل ومهندس بيانات مع أعضاء الفريق الاخرين من عالم بيانات ومحلل الاعمال وبقية الفريق البرمجي. ولمزيد من المعلومات عن تكوين فرق إدارة البيانات يمكن مرجعة مقالة هندسة البيانات وإدارة البيانات.
تنويه: ستحقق هذه المقالة فائدة اكبر في حال معرفتك بالعلاقات بين الجداول ولغة SQL لذا ننصح بمراجعة دروس في قواعد البيانات. 
وكمراجعة بسيطة يوجد 4 علاقات بين الجداول هي على النحو التي:
1.     علاقة واحد الى واحد (One to One) مثل جدول الموطنين وجدول جوازات السفر فلكل مواطن جواز سفر واحد والعكس.
2.     علاقة واحد الى متعدد (One to Many) مثل جدول الموظفين وجدول الرواتب.
3.     علاقة متعدد الى واحد (Many to One) مثل جدول الموظفين وجدول الإدارات.
4.     علاقة متعدد الى متعدد (Many to Many) مثل جدول البضائع وجدول المبيعات.
فخ الهوة أو الفجوة (Chasm Trap):
تحدث هذه المشكلة عندما تكون العلاقة متعدد الى متعدد (Many to Many) فعند استخراج مجموع من كل الطرفين في جملة SQL واحدة تحدث هذه المشكلة وتصبح المجاميع خطأ.
مثال:


جدول العملاء (Customers) وجدول المبيعات (Sales) وجدول الطلبات (Orders)
العلاقة بين المبيعات (Sales) والطلبات (Orders) متعدد الى متعدد (Many to Many) عن طريق جدول العملاء (Customers).

والبيانات على النحو التالي:
جدول العملاء (Customers)
CustomerID
CustomerName
1
Fahad
2
Nasser
جدول المبيعات (Sales)
CustomerID
QuantitySold
1
5
1
5
1
2
2
2
2
2
2
5
2
5
جدول الطلبات (Orders)
CustomerID
OrderValue
1
10
1
10
1
10
2
20
2
20
2
20
عند محاولة عرض البيانات في جدول واحد تظهر المشكلة كما هو موضح في هذه الصورة

كما هو واضح الارقام الخاطئة في حالة الدمج في المربع الأحمر. وعند فصل البيانات تظهر الأرقام الصحيحة في المربع الأخضر.
هذة الأخطاء واضحة في قاعدة البيانات لكن ما هو الوضع عند عرضها في برامج تصوير البيانات (Data Visualization) ولقد تم اختبارتها على 2 منها هي Tableau – Power BI وظهرت النتائج التالية:

Tableau:
يوجد في Tableau حالتين لجلب البيانات إما Live وهي الربط المباشر مع قاعدة البيانات أو Extract وهي تحمل البيانات في نفس ملف ولا حاجة للربط المباشر مع قاعدة البيانات. ولقد عرض Tableau البيانات مع الأخطاء في كلتا الحالتين حتى عند فصل البيانات وليس فقط عند الدمج كما هو في الصورة التالية:


Power BI:
أستطع Power BI في كلتا الحالتين Direct Query وهي الربط المباشر مع قاعدة البيانات و Import وهي حفظ البيانات في نفس الملف من عدم الوقوع في Chasm Tarp عند الدمج ولكن مع ذلك اظهر البيانات الخطأ عند عدم جلب حقل CustomerID من جدول Customers وأخطأ في كلتا الحالتين في واحد من الأرقام وتعامل مع رغبة المستخدم وكذلك اظهر رسالة خطأ عند اجباره على دمج كل حقول الجداول بحجة أنه لم يستطع التعرف على العلاقة بينها. كما أظهر الأرقام الخطأ عند جلبها عن طريق جملة SQL بشكل مباشر وهي على النحو التالي:
SELECT A.CustomerID
      ,sum(B.OrderValue) SumOrderValue
         ,sum(C.QuantitySold) SumQuantitySold 
  FROM [Chasm Trap].[dbo].[Customers] A
  join [Chasm Trap].[dbo].Orders B on (A.CustomerID=B.CustomerID)
  join [Chasm Trap].[dbo].Sales C on (A.CustomerID=C.CustomerID)
 A.CustomerIDgroup by 

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

الاستنتاجات:
·         في التجربة السابقة يظهر التقدم التقني في Power BI أكثر من Tableau الا أنه مازال يتمتع بمميزات أكثر من Power BI ولم يصل Power BI الى مرحلة النضج الكامل ولكن سيصل لها قريبا.
·         فخ الهوة أو الفجوة (Chasm Trap) فخ خطير جدا ولا أعتقد أن هناك قاعدة بيانات لا يوجد بها علاقة متعدد الى متعدد.
·         الحماية في أفضل حالتها هي الالمام بهذا الفخ وليس الاعتماد على التقنية الحديثة خاصة في الوقت الراهن
·         يوجد عدة حلول لهذا الفخ اختر ما يناسب حسب الحاجة يمكن البحث عنها في الانترنت.
·         الالمام بقواعد البيانات السطحي دون التعمق فيها ربما يقودك لمثل هذه المشاكل.

·         مراعاة الهندسة البرمجية لقواعد البيانات التي أنت بصدد تحليلها أمر أساسي ومهم.

لتنزيل ملف المثال على Power BI من خلال هذا الرابط
ولتحميل برنامج Power BI من خلال هذا الرابط

في المقالة القادمة نستعرض فخ أخر يسمى فخ المروحة (Fan Trap)

لا يوجد تعليقات

أضف تعليق