اذهب إلى المحتوى

البحث في الموقع

المحتوى عن 'بيانات'.

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المحتوى


التصنيفات

  • الإدارة والقيادة
  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • السلوك التنظيمي في المؤسسات
  • عالم الأعمال
  • التجارة والتجارة الإلكترونية
  • نصائح وإرشادات
  • مقالات ريادة أعمال عامة

التصنيفات

  • مقالات برمجة عامة
  • مقالات برمجة متقدمة
  • PHP
    • Laravel
    • ووردبريس
  • جافاسكربت
    • لغة TypeScript
    • Node.js
    • React
    • Vue.js
    • Angular
    • jQuery
    • Cordova
  • HTML
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • لغة C#‎
    • ‎.NET
    • منصة Xamarin
  • لغة C++‎
  • لغة C
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • لغة Rust
  • برمجة أندرويد
  • لغة R
  • الذكاء الاصطناعي
  • صناعة الألعاب
  • سير العمل
    • Git
  • الأنظمة والأنظمة المدمجة

التصنيفات

  • تصميم تجربة المستخدم UX
  • تصميم واجهة المستخدم UI
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب GIMP
    • كريتا Krita
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • مقالات DevOps عامة
  • خوادم
    • الويب HTTP
    • البريد الإلكتروني
    • قواعد البيانات
    • DNS
    • Samba
  • الحوسبة السحابية
    • Docker
  • إدارة الإعدادات والنشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
    • ريدهات (Red Hat)
  • خواديم ويندوز
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • شبكات
    • سيسكو (Cisco)

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح
  • مبادئ علم التسويق

التصنيفات

  • مقالات عمل حر عامة
  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • العمل الحر المهني
    • العمل بالترجمة
    • العمل كمساعد افتراضي
    • العمل بكتابة المحتوى

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
    • بريستاشوب
    • أوبن كارت
    • دروبال
  • الترجمة بمساعدة الحاسوب
    • omegaT
    • memoQ
    • Trados
    • Memsource
  • برامج تخطيط موارد المؤسسات ERP
    • تطبيقات أودو odoo
  • أنظمة تشغيل الحواسيب والهواتف
    • ويندوز
    • لينكس
  • مقالات عامة

التصنيفات

  • آخر التحديثات

أسئلة وأجوبة

  • الأقسام
    • أسئلة البرمجة
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات

التصنيفات

  • كتب ريادة الأعمال
  • كتب العمل الحر
  • كتب تسويق ومبيعات
  • كتب برمجة
  • كتب تصميم
  • كتب DevOps

ابحث في

ابحث عن


تاريخ الإنشاء

  • بداية

    نهاية


آخر تحديث

  • بداية

    نهاية


رشح النتائج حسب

تاريخ الانضمام

  • بداية

    نهاية


المجموعة


النبذة الشخصية

  1. يُستخدم التنسيق الشرطي لتحليل البيانات بشكل مرئي. وهو عبارة عن إشارات بألوان أو أيقونات معينة تساعدك على فهم ما تعنيه بياناتك في لمحة. يمكنك تطبيق التنسيق الشريطي على أي نوع من البيانات سواء كانت نصية أو رقمية، وتختلف خيارات التنسيق حسب نوع البيانات. المثال التالي عبارة عن جدول يُبيّن نسبة إنجاز عدد من المشاريع، ونرغب في تنسيق عمود "نسبة الإنجاز" لتحليل البيانات داخله بشكل مرئي: سنقوم أولا بتحديد نطاق الخلايا في عمود "نسبة الإنجاز"، ثم ننقر على زر التحليل السريع: من تبويب تنسيق Formatting الخاص بزر التحليل السريع يمكنك اختيار أي نوع من التنسيقات المتاحة لتمثيل البيانات، كأشرطة البيانات Data Bars، تدرج الألوان Color Scale، أكبر من Greater Than، إلخ. سنقوم بتنسيق الخلايا بأشرطة البيانات: وسيتم تمثيل نسب الإنجاز بأشرطة تختلف أطوالها حسب النسبة. يمكن أيضا أن نطبق أكثر من تنسيق على نفس نطاق الخلايا، سنختار مجموعة الرموز بالإضافة إلى أشرطة البيانات: تمثل الأسهم الحمراء الثلث الأدنى لقيم البيانات (0-39% في هذا المثال)، الأسهم الصفراء الثلث الوسطي لقيم البيانات (40-69%) والأسهم الخضراء الثلث الأعلى لقيم البيانات (70-100%). المثال أدناه مجموعة من البيانات النصية، ونرغب بتطبيق تنسيق شرطي لمعرفة المنتجات النافدة. وبما أنّها بيانات نصية فإنّ خيارات التنسيق تختلف عن خيارات البيانات الرقمية: سنختار الشرط Equal To لتنسيق الخلايا التي تحتوي على النص "نافد"، وسنختار اللون الأصفر لتمييزها: من خصائص التنسيق الشرطي أنّ التنسيق يتغير عند تغيير محتويات الخلايا. فإذا قمنا بتغيير إحدى الخلايا التي تحتوي على القيمة "متوفر" إلى "نافد" سيتغير لونها إلى الأصفر تلقائيا. التنسيق الشرطي للتواريخلنفترض أنه لديك مجموعة من المهام وتواريخ انتهائها، وترغب في معرفة المهام المتأخرة، أو المهام التي تنتهي في وقت محدد أو وقت قريب. يمكنك استخدام التنسيق الشرطي لتمييز الخلايا التي تحقق شروط معينة. في المثال أدناه سنقوم بتنسيق الخلايا المتأخرة والتي تجاوزت الميعاد النهائي. سنقوم بتحديد الخلايا أولا، ونختار الشرط Less Than من زر التحليل السريع: لن نقوم بكتابة تاريخ محدد في مربع الحوار، لأننا سنضطر إلى تحديث التنسيق بين فترة وأخرى. سنستخدم بدلا من ذلك دالة TODAY بالصيغة التالية: ()TODAY= والنتيجة ستكون تمييز تواريخ المهام التي تجاوزت الميعاد النهائي لها، والتي من المفترض إنجازها قبل تاريخ اليوم. ولمعرفة المهام التي تأتي مواعيدها النهائية بعد أسبوع من تاريخ اليوم سنستخدم شرط Greater Than: كما سنستخدم دالة اليوم بالصيغة التالية: TODAY()+7= ونختار اللون الأخضر لتنسيق الخلايا: وبذلك سيتم تنسيق الخلايا التي تُحقّق الشرط، أي المواعيد النهائية التي تأتي بعد أسبوع من تاريخ اليوم. ولتنسيق المواعيد النهائية للمهام خلال هذا الأسبوع يجب أن نستخدم الشرط Between. لكن هذا الشرط ليس موجودا ضمن خيارات زر التحليل السريع. لذلك سنستخدم أمر التنسيق الشرطي Conditional Formatting. سنقوم أولا بتحديد نطاق الخلايا، ومن تبويب الصفحة الرئيسية Home سننقر فوق أمر التنسيق الشرطي، ونختار الشرط Between من قائمة Highlight Cells Rules: في مربع الحوار سندخل الصيغة ()TODAY= في الحقل الأول، والصيغة TODAY()+7= في الحقل الثاني، وسنختار اللون الأصفر لتنسيق الخلايا: والنتيجة ستكون تنسيق المواعيد النهائية للمهام بتواريخ بين تاريخ اليوم وتاريخ بعد 7 أيام من تاريخ اليوم. التنسيق الشرطي للنصوصلاحظنا أنه من خلال زر التحليل السريع يمكننا تطبيق عدد من الشروط لتنسيق الخلايا، كتنسيق النصوص المتكررة Duplicate، النصوص الفريدة Unique، أو النصوص التي تساوي قيمة محددة ندخلها Equal To. يمكننا أيضا أن نطبق التنسيق الشرطي على صف كامل على أساس نص موجود في إحدى خلايا الصف. في المثال التالي سنقوم بتنسيق الصفوف بلون أزرق إذا كانت القيمة المقترنة بذلك الصف في عمود "الحالة" تساوي "نافد". ولفعل ذلك سنقوم بتحديد جميع خلايا الجدول وليس عمود "الحالة" فقط، لاحظ أنّ الخلية النشطة هي A3، سنحتاج إليها لاحقا في كتابة الصيغة: ومن تبويب الصفحة الرئيسية Home سننقر أمر التنسيق الشرطي Conditional Formatting ونختار New Rule: في مربع الحوار New Formatting Rule سنحدد الخيار Use a formula to determine which cells to format لاستخدام صيغة محددة لتنسيق الصفوف: في حقل الصيغة سنكتب الصيغة التالية: =$C3="نافد" لقد استخدمنا علامة الدولار قبل العمود C لجعله مرجعًا مطلقًا absolute reference، أي يتم الرجوع إلى القيم في العمود C للصف أثناء تطبيق التنسيق الشرطي على ذلك الصف. واستخدمنا الصف رقم 3، لأنّ جدول البيانات يبدأ من الصف الثالث. والدليل هو أنّ أول خلية في الجدول هي A3. أما علامة الاقتباس مع القيمة "نافد" فقد استخدمناها لإرشاد البرنامج إلى معاملتها معاملة النصوص. الخطوة التالية هي اختيار لون التنسيق، سننقر تنسيق Format من نفس مربع الخيار ونختار اللون من تبويب تعبئة Fill: والنتيجة ستكون تمييز الصفوف التي تحتوي على القيمة "نافد" باللون الأزرق. نسخ التنسيق الشرطي وإزالتهفي المثال التالي قمنا بتنسيق الخلية B3 باللون الأحمر بشرط أن تكون قيمة الخلية أقل من 50% (Less Than). ولنسخ التنسيق وتطبيقه على بقية خلايا العمود سنحدد الخلية B3 وننقر فوق أمر ناسخ التنسيق Format Painter من تبويب الصفحة الرئيسية Home: بعدها سنقوم بتحديد نطاق الخلايا لتطبيق نفس التنسيق الشرطي عليها: ولإزالة التنسيق الشرطي من مجموعة الخلايا سنقوم بتحديدها النقر فوق Clear من زر التحليل السريع: أما إزالة التنسيق الشرطي من جميع الخلايا في ورقة العمل فتتم بالنقر على أمر تنسيق شرطي Conditional Formatting، والتأشير فوق Clear Rules ثم اختيار Clear Rules from Entire Sheet:
  2. سنشرح اليوم أداة من الأدوات المفيدة التي يوفرها مايكروسوفت اكسل؛ والمُتعلّقة بتجميد/تثبيت الأجزاء عند العمل على جداول بيانات كبيرة لتسهيل رؤية أجزاء مختلفة من المصنف في نفس الوقت. يقصد بـ "تجميد الأجزاء" تثبيت جزء معين من ورقة العمل وإبقائه مرئيًا حتى بعد التمرير بأشرطة التمرير الجانبية أو السفلية. وهذا الخاصية مفيدة في أوراق العمل التي تحتوي على جداول بيانات كبيرة. يمكنك مثلا تجميد صف أو عمود العناوين لجدول معين والاحتفاظ بها ثابتة عند التمرير: لتجميد صف (كصف العناوين مثلا)، اذهب إلى تبويب عرض View، واختر تجميد الصف العلوي Freeze Top Row من زر تجميد الأجزاء Freeze Panes: ولتجميد عمود (كعمود العناوين مثلا)، اذهب إلى تبويب عرض، واختر تجميد العمود الأول Freeze First Column من زر تجميد الأجزاء Freeze Panes: لاحظ أنّك عندما تقوم بتجميد العمود الأول يتم إلغاء تجميد الصف العلوي تلقائيا. مع ذلك يمكنك تجميد الصفوف والأعمدة معا في نفس الوقت. لإلغاء تجميد الصف/العمود اختر إلغاء تجميد الأجزاء Unfreeze Panes من زر تجميد الأجزاء Freeze Panes: خيارات التجميديمكنك تجميد الصفوف والأعمدة معا وتجميد عدد من الصفوف وعدد من الأعمدة، وليس صف أو عمود واحد فحسب. لتجميد الصف والعمود في نفس الوقت، حدد الخلية التي تقع أسفل الصف الذي تريد تجميده مباشرة، وبجانب العمود الذي تريد تجميده مباشرة ثم اختر تجميد الأجزاء Freeze Panes من زر تجميد الأجزاء Freeze Panes. في هذا المثال سنحدد الخلية B2، لأنها الخلية التي تجاور الصف 1 مباشرة وتجاور العمود A مباشرة: وبهذه الطريقة سيتم تثبيت كل من الصف والعمود عند التمرير إلى الأسفل أو إلى الجانب. إذا كنت ترغب بتجميد عدد من الصفوف، وعدد من الأعمدة بشرط أن تكون متجاورة، حدد الخلية التي تقع تحت مجموعة الصفوف مباشرة وبجانب مجموعة الأعمدة مباشرة، ثم اختر تجميد الأجزاء Freeze Panes من زر تجميد الأجزاء Freeze Panes. في هذا المثال سنقوم بتجميد الصفين 1 و2، والعمودين A وB، ولذلك سنحدد الخلية C3: ولتجميد عدد من الصفوف دون تجميد الأعمدة حدد أول خلية في العمود A تحت مجموعة الصفوف مباشرة، (وهي الخلية A3 في هذا المثال) ثم اختر تجميد الأجزاء Freeze Panes من زر تجميد الأجزاء: استخدم نفس الطريقة إذا كنت ترغب بتجميد مجموعة من الأعمدة دون تجميد الصفوف. حدد خلية في الصف 1 والتي تجاور مجموعة الأعمدة مباشرة (وهي الخلية D1 في هذا المثال لأننا سنقوم بتجميد الأعمدة الثلاثة الأولى) ثم اختر تجميد الأجزاء Freeze Panes من زر تجميد الأجزاء: وبذلك سيتم تجميد جميع الأعمدة إلى يسار العمود C دون تجميد الصفوف، لأنه لا يوجد صف فوق الصف الأول. يجب أن تأخذ في الاعتبار أنّ زر تجميد الأجزاء يصبح غير مفعلا أثناء تحرير الخلايا، أو عند استخدام طريقة العرض تخطيط الصفحة Page Layout. وكذلك، يمكنك طباعة صفوف أو أعمدة بشكل متكرر في جميع الصفحات وبطريقة مشابهة لطريقة تجميد الأجزاء. على سبيل المثال؛ إذا كنت ترغب بتكرار الصفين العلويين لورقة العمل في جميع الصفحات عند طباعتها، اذهب إلى تبويب تخطيط الصفحة Page Layout وانقر طباعة العناوين Print Titles. في مربع الحوار إعداد الصفحة Page Setup ضع المؤشر في حقل Rows to repeat at top، ومن ورقة العمل حدد الصفوف التي تريد تكرارها، ثم انقر معاينة الطباعة Print Preview وستشاهد أن الصفوف التي قمت بتحديدها ستظهر في الجزء العلوي لجميع الصفحات:
  3. الفرز Sort والتصفية Filter من أدوات تحليل البيانات الرائعة التي يوفرها اكسل وهي من أكثر الخصائص المستخدمة، وتكون مفيدة جدًّا في جداول البيانات الكبيرة على وجه الخصوص. يستخدم أمر الفرز لترتيب البيانات في نطاق من الخلايا أو جدول حسب معيار محدد. ويستخدم أمر التصفية لعرض مجموعة جزئية من البيانات في نطاق من الخلايا أو جدول والتي ينطبق عليها معيار محدد أيضا. سنستخدم الجدول التالي كمثال لتطبيق أوامر الفرز والتصفية وتوضيحها: لعمل فرز لمحتويات أي عمود، انقر على أحد الخلايا داخل العمود بزر الفأرة الأيمن، ثم اذهب إلى الخيار فرز Sort لعرض الخيارات المتاحة: تختلف خيارات الفرز حسب نوع البيانات سواء كانت نصية أو رقمية، وبما أنّ البيانات في عمود "العمر" رقمية فالخيارات المتاحة هي فرز من الأكبر إلى الأصغر Sort Largest to Smallest، وفرز من الأصغر إلى الأكبر Sort Smallest to Largest، وهذه هي الخيارات لأغلب البيانات الرقمية. سنقوم بعمل فرز من الأكبر إلى الأصغر، وسيقوم البرنامج بترتيب الأعمار من الأصغر إلى الأكبر مع الاحتفاظ بما يقابلها من البيانات في بقية الأعمدة: لعمل تصفية للبيانات بإظهار مجموعة جزئية من نطاق البيانات، قم بتحديد خلية داخل أحد اللأعمدة، ثم انقر على فرز وتصفية Sort & Filter من تبويب الصفحة الرئيسية Home واختر تصفية Filter: عند تطبيق أمر تصفية ستظهر أسهم في عناوين الأعمدة يمكنك استخدامها لعمل تصفية، علما أنّ هذه الأسهم ستكون موجودة من الأصل فيما لو قمت بتنسيق البيانات بصيغة جدول Table (في هذا المثال قمت بعمل حدود وتنسيقات للخلايا ولكن لم أقم بتنسيقها بصيغة جدول). انقر على السهم في عناوين أحد الأعمدة التي تريد عمل تصفية لها، ثم قم بتأشير الخيارات التي تريد عرضها. في مثالنا هذا سأقوم بعمل تصفية لعمود "اسم الدورة" لإظهار مجموعة "اللغة الإنجليزية" فقط. لذلك سأقوم بإلغاء تأشير تحديد الكل Select All وأقوم بتأشير "اللغة الإنجليزية": وسيقوم البرنامج بعرض نطاق الخلايا المرتبط باللغة الإنجليزية فقط (لاحظ ظهور أيقونة "قمع" في عنوان عمود "اللغة الإنجليزية" إشارة لتصفيته): خيارات الفرزفي المثال السابق قمنا بفرز عمود يحتوي على بيانات رقمية عادية. يمكنك عمل فرز لبيانات رقمية بأنواع أخرى (كالتواريخ أو الأوقات)، أو فرز البيانات النصية. وتختلف خيارات الفرز كل حسب نوع البيانات. مثلا لو أردنا فرز البيانات في عمود "اسم الدورة"، وهي بيانات نصية، ستكون خيارات الفرز حسب الأبجدية؛ فرز من الألف إلى الياء Sort A to Z، أو فرز من الياء إلى الألف Sort Z to A. سنقوم بعمل فرز من الألف إلى الياء: وإذا قمنا بعمل فرز للبيانات في عمود "تاريخ البداية"، وهي بيانات رقمية بصيغة تاريخ، ستكون خيارات الفرز من الأقدم إلى الأحدث Sort Oldest to Newest، أو فرز من الأحدث إلى الأقدم Sort Newest to Oldest. سنقوم بعمل فرز من الأحدث إلى الأقدم: هناك خيارات أخرى متقدمة للفرز، كفرز عمودين أو أكثر معا، يمكنك الوصول إليها من تبويب بيانات. أولا عليك تحديد خلية في نطاق الخلايا أو الجدول، اذهب إلى تبويب بيانات Data وانقر فوق فرز Sort لفتح نافذة خيارات الفرز: من الخيارات المفيدة لأمر فرز هو خيار تحتوي البيانات على عناوين My Data has headers. ويقصد بها عناوين أعمدة الجدول (أي "الرقم التعريفي للمتدرب"، "العمر"، إلخ في هذا المثال). عند تأشير هذه الخيار ستظهر عناوين الأعمدة في خانة فرز حسب Sort By: وهذا الأمر يسهل اختيار العمود الذي تريد فرزه. لأنه عند إلغاء تأشير هذا الخيار ستظهر عناوين الأعمدة بأسمائها الأصلية (Column A، Column B، إلخ) وقد يؤدي ذلك إلى الالتباس عندما يكون الجدول كبيرا ولا تتذكر أي عمود هو الذي يحتوي على البيانات التي تريد فرزها. سنقوم هنا بعمل فرز لعمودي "اسم الدورة" و"تاريخ البداية"، بحيث يتم ترتيب العمود الأول حسب الأبجدية أولا، بعدها يتم ترتيب العمود الثاني من الأقدم إلى الأحدث. في خانة فرز حسب Sort سنحدد "اسم الدورة"، وفي خانة الترتيب Order سنحدد من الألف إلى الياء A to Z. ثم سنقوم بإضافة مستوى فرز آخر للعمود الثاني Add Level. في المستوى الثاني سنحدد "تاريخ البداية في خانة ثم حسب Then By، وفي خانة الترتيب سنحدد من الأقدم إلى الأحدث Oldest to Newest: وستكون نتيجة الفرز كالتالي (لاحظ عمودي "اسم الدورة" و"تاريخ البداية") ليس هذا فحسب، إذ تستطيع عمل فرز حسب قائمة مخصصة تضيفها بنفسك. مثلا لو أردنا فرز عمود "الحالة" ستكون الخيارات المتاحة هي فرز حسب الأبجدية (أي اخفاق، توقف، ثم نجاح) لأنّ البيانات نصية. لكن أرغب هنا بعمل ترتيب بحيث تُعرض البيانات المرتبطة بالتوقف أولا، ثم النجاح، ثم الإخفاق. والخطوات هي كالتالي: من تبويب بيانات Data انقر فوق فرز Sort. في نافذة فرز ومن خانة فرز حسب Sort By قم بتحديد العمود الذي تريد فرزه (عمود "الحالة" في هذا المثال). ومن خانة الترتيب اختر قائمة مخصصة Custom List: في حقل List entries قم بإدخال أول قيمة ثم اضغط Enter، ادخل ثاني قيمة ثم اضغط Enter وهكذا لحين الانتهاء من كتابة جميع القيم في العمود الذي تريد فرزه (أو اكتب قيم القائمة على شكل سطر تفصلها فارزة بدلا من استخدام مفتاح Enter). في مثالنا، ستكون أول قيمة "توقف"، ثاني قيمة "نجاح"، وثالث قيمة "اخفاق". بعدها انقر فوق إضافة Add ثم موافق OK: وسيكون الترتيب حسب القائمة التي قمنا بإضافتها، كالتالي: يمكنك أيضا أن تقوم بالفرز حسب تنسيق الخلية، كلون النص أو لون الخلية. من نافذة فرز حدد العمود الذي تريد فرزه حسب التنسيق (يجب أن تكون خلايا منسقة بنسق معين) من خانة فرز حسب Sort by. ومن خانة فرز Sort On حدد التنسيق الذي تريد فرز العمود على أساسه سنختار لون الخلية مثلا. ومن خانة الترتيب Order اختر اللون وترتيبه. سأقوم هنا بعرض الخلايا باللون الأحمر في الأعلى On Top: أما اللونان المتبقيان (الأصفر وبلا لون) فسنقوم بنسخ المستوى لتحديد ترتيبهما. انقر فوق نسخ المستوى Copy level ثم حدد اللون وترتيبه. سأقوم بعرض الخلايا بلا لون بعد اللون الأحمر، أي سيكون في الأعلى أيضا وبذلك سيكون اللون الأصفر هو اللون الأخير في الترتيب: وستكون النتيجة كالتالي: يمكنك أيضا أن تقوم بفرز الصفوف كما تقوم بفرز الأعمدة لكن يجب أولا أن تعد البرنامج لذلك. من تبويب: بيانات Data > فرز Sort > خيارات Options > فرز من اليمين إلى اليسار Sort Right to Left > موافق OK ثم اتبع نفس خطوات فرز الأعمدة: إذا رغبت في التراجع عن أمر الفرز استخدم زر التراجع في شريط الوصول السريع، أو استخدم الاختصار Ctrl+Z. التصفية التلقائيةكما هو الحال في الفرز، تتوفر عدة خيارات في أمر التصفية. إذ تستطيع تصفية نطاق الخلايا أو الجدول حسب معايير محددة كل حسب نوع البيانات في العمود. في البداية حدد خلية داخل الجدول أو نطاق الخلايا ثم انقر فرز وتصفية Sort & filter من تبويب الصفحة الرئيسية Home، ثم اختر تصفية Filter لإظهار أسهم التصفية التلقائية AutoFilter. سنطبق بعض الأمثلة لتوضيح خيارات التصفية. إذا كانت بعض الخلايا فارغة في العمود سيقوم البرنامج بتضمين هذا الخيار في خيارات التصفية: في المثال أعلاه لدي بعض الخلايا الفارغة في عمود "الرقم التعريفي للمتدرب" وأرغب في تصفية البيانات لعرض الصفوف المقترنة بهذه الخلايا فقط. سأقوم بالنقر على السهم في عنوان العمود، ثم ألغي تأشير تحديد الكل Select All وأقوم بتأشير الفراغات Blanks فقط: وسيقوم البرنامج بعرض الصفوف المقترنة بالخلايا الفارغة فقط: بالإضافة إلى ذلك هناك معايير محددة لتصفية البيانات تختلف حسب نوع تلك البيانات. فإذا كانت البيانات رقمية، انقر فوق سهم التصفية التلقائية الخاص بالعمود الذي يحتوي على بيانات رقمية، أشر فوق عوامل تصفية الأرقام Number Filters، ثم اختر أحد المعايير المتاحة: مثال: سنقوم بتصفية عمود "العمر" لعرض الأعمار أكبر من 30 سنة باختيار المعيار أكبر من Greater Than، وإدخال الرقم 30 في مربع حوار تصفية تلقائية مخصصة: وإذا كانت البيانات رقمية بصيغة تاريخ انقر فوق سهم التصفية التلقائية الخاص بالعمود الذي يحتوي على تواريخ، أشر فوق عوامل تصفية التاريخ، ثم اختر أحد المعايير المتاحة: مثال: سنقوم بتصفية عمود "تاريخ البداية" لعرض التواريخ بين 1/5/2011 و1/12/2011 باختيار المعيار بين Between، ثم إدخال التاريخين المحددين في مربع حوار تصفية تلقائية مخصصة: ونفس الطريقة تطبق على بقية أنواع البيانات. وكذلك يمكنك تصفية نطاق الخلايا أو الجدول حسب تنسيق الخلية كلون النص أو لون الخلية إذا كانت الخلايا منسقة بعدة ألوان، كما في عمود "الحالة" في مثالنا: ولديك أيضا خيار تطبيق أمر التصفية أكثر من مرة على نفس نطاق الخلايا أو الجدول. مثال: أرغب في عرض المتدربين الناجحين في دورات اللغة الإنجليزية. سأقوم أولا بتصفية الجدول حسب اللون باختيار معيار بلا تعبئة No Fill: ثم سأقوم بإلغاء تأشير تحديد الكل Select All في عمود "اسم الدورة" وأبقي على قيمة "اللغة الإنجليزية": وبذلك سيتم عرض الصفوف حسب المعيارين. لاحظ أن البرنامج يخبرنا في شريط الحالة عن عدد الصفوف المطابقة للمعايير (2 من أصل 13 صف في هذا المثال). لإلغاء التصفية من عمود معين انقر على أيقونة القمع واختر مسح عامل التصفية من Clear Filter From: ولإيقاف التصفية التلقائية بشكل تام انقر فوق فرز وتصفية Sort & Filter من تبويب الصفحة الرئيسية Home واختر تصفية Filter: التصفية المتقدمةفي التصفية المتقدمة تتوفر المزيد من الخيارات لتصفية البيانات، كتصفية القيم الفريدة unique values أو استخدام المعاملات operators مثل المعامل أو OR. في الجدول أدناه توجد قيمة فريدة (متكررة) وهي المميزة باللون الأخضر. هنا لدينا خياران، أما تصفية هذه القيمة من خيارات التصفية المتقدمة أو إزالتها من الجدول بشكل نهائي. لتصفية القيم الفريدة من نطاق الخلايا أو الجدول اذهب إلى تبويب بيانات Data، ثم انقر فوق خيارات متقدمة Advanced: في مربع حوار تصفية متقدمة، ومن خانة List range حدد نطاق الخلايا/العمود الذي يحتوي على القيم الفريدة بالنقر والسحب من أول خلية في النطاق/العمود إلى آخر خلية. بعد تحديد الخلايا حدد خيار السجلات الفريدة فقط Unique records only وانقر موافق OK: في المثال أعلاه قمت بتحديد عمود "العمر"، علما أنني سأحصل على النتيجة نفسها فيما لو قمت بتحديد أحد الأعمدة الأخرى لأن جميعها تحتوي على قيمة فريدة: لاحظ كيف قام البرنامج بتصفية القيمة الفريدة. الخيار الآخر هو استخدام أمر إزالة التكرارات Remove Duplicates في تبويب بيانات Data، لكن في هذه الحالة سيتم حذف القيم المتكررة وليس تصفيتها فقط: تستطيع أيضا استخدام التصفية المتقدمة للتصفية حسب معايير متعددة. لكن أولا عليك أن تقوم بإنشاء نطاق المعايير. ويجب أن تكون الخلايا العليا لنطاق المعايير هي نفسها عناوين الأعمدة التي تريد تصفيتها حسب تلك المعايير. في المثال أدناه قمت بإنشاء نطاق المعايير لعرض الصفوف التي تحتوي على "عمر" مساو لـ"30" و"حالة" مساوية لـ"نجاح": لاحظ أنني قمت بإنشاء الخلايا العليا لنطاق المعايير بنفس عناوين الأعمدة التي أريد تصفيتها حسب تلك المعايير، وهي "العمر" و"الحالة". لتصفية الجدول حسب نطاق المعايير هذا انقر فوق خيارات متقدمة من تبويب بيانات. في مربع حوار تصفية متقدمة حدد الجدول بأكمله في خانة List Range، وحدد نطاق المعايير في خانة Criteria range ثم انقر موافق OK: سيقوم البرنامج بعرض الصفوف التي تحقق المعيارين معا، وليس أحدهما. أما إذا كنت تريد عرض الصفوف التي تحقق أحد المعيارين أو كلاهما، أي استخدام المعامل OR، قم بترتيب الخلايا في نطاق المعايير بشكل قطري، كما في الشكل: انقر فوق خيارات متقدمة من تبويب بيانات واتبع نفس الطريقة السابقة. سيقوم البرنامج بعرض الصفوف التي تحتوي على "عمر" مساو لـ"30" أو "حالة" مساوية لـ"نجاح": لإزالة التصفية انقر فوق مسح Clear من تبويب بيانات Data. يمكنك استخدام معايير أكثر تعقيدا، مثلا معيار "أكبر من" بدلا من معيار "مساو" الذي يطبق بشكل افتراضي والذي استخدمناه في المثال السابق. مثلا إذا أردنا عرض "العمر" أكبر من "30" سنستخدم علامة أكبر مع القيمة "30" في نطاق المعايير ليصبح بالشكل التالي: وسنتبع نفس الطريقة بالنقر فوق خيارات متقدمة وتحديد نطاق الخلايا ونطاق المعايير لعرض الصف الذي يحقق المعيارين "أكبر من 30" و"نجاح" يمكنك أيضا إنشاء معايير أخرى باستخدام أحرف البدل wildcard characters مثل النجمة (*) علامة الاستفهام (؟) أو الأسهم (<>) كما في المثال: يستخدم المعيار الموضح في المثال أعلاه لعرض القيم في عمود "الحالة" مع البيانات المقترنة بها والتي لا تنتهي بحرف الحاء. هذه المرة سنقوم بعرض نتيجة التصفية في مكان آخر وليس تصفية الجدول الأصلي نفسه، كالتالي: انقر فوق خيارات متقدمة من تبويب بيانات. في مربع حوار تصفية متقدمة حدد خيار النسخ إلى موقع آخر Copy to another location. في خانة List range حدد الجدول بأكمله، في خانة Criteria range حدد نطاق المعايير (أي الخليتين H1 + H2 في هذا المثال)، وفي خانة Copy to حدد الخلية التي تريد نقل نتيجة التصفية إليها (الخلية H8 في هذا المثال) ثم انقر موافق: وبالتالي ستعرض الصفوف التي لا تنتهي قيمها بحرف الحاء بجدول آخر خارج الجدول الأصلي:
  4. نعيش حرفيًا في عالم من البيانات، فما نقرؤه وما نكتبه وما نفكر به أنواع من البيانات، وما تستند عليه أفعالنا اليومية وسلوكنا هي أنواع من البيانات. قد تقرر الذهاب إلى التسوق لأنك تحتاج إلى بعض الحاجيات التي سجلتها على قائمتك، إن ما سجّلته على قائمتك هي بيانات، ثم تمضي في طريقك لتقف عند إشارة مرور حمراء، إن وقوفك عند الإشارة الحمراء عائد إلى بيانات أيضًا، فالأحمر للوقوف والأخضر للمتابعة، ثم تصل بعد ذلك إلى المتجر لتتفقد ما تحتاج إليه، فقد تنظر إلى العلامة التجارية للمنتج وهذه بيانات قد تعطيك فكرة عن جودة المنتج، وقد تنظر إلى سعر المنتج وهذه أيضًا بيانات تستخدمها لاتخاذ قرار الشراء وفقًا لميزانيتك، وإن كان المنتج غذائيًا مثلًا ستهتم بتاريخ الإنتاج وتاريخ انتهاء الصلاحية والمكوّنات، فهي بيانات ستؤثر على صحتك، وأخيرًا عندما تنتهي من التسوق وتتوجه إلى كوة المحاسبة سيقرأ الماسح الضوئي رمز المنتج وهو نمط من البيانات التي تعرّف هذا المنتج وتحدد هويته وقد خُزّنت ضمن هذا الرمز وفق سلسلة من الأرقام أو الأحرف أو كليهما كما خزّنت على حاسوب كوة المحاسبة أيضًا بطريقة ما. ما هي البيانات إذًا وما هي أنواع البيانات؟ من أين تأتي البيانات؟ كيف نستقبلها وكيف نفهمها؟ كيف نصنّف أنواع البيانات المختلفة وأين نخزّنها وكيف نسترجعها ونحللها؟ وكيف نستفيد منها في المحصلة؟ سنحاول في هذا المقال الإجابة عن الأسئلة السابقة بشيء من التفصيل لتكون عونًا لك في تعاملك مع أنواع البيانات سواء كنت راغبًا في أن تكون مصممًا لقواعد البيانات أو محللًا لأنواع البيانات أو مبرمجًا لها. إليك فهرس بعناوين المقال لتسهيل الوصول إلى مختلف أجزاء المقال: تعريف البيانات الفرق بين البيانات والمعلومات من أين تأتي البيانات؟ أنواع تخزين البيانات تصنيف أنواع البيانات Data Types البيانات الكمية البيانات النوعية البيانات المنطقية أنواع البيانات في الحاسب تصنيفات البيانات الرقمية أنواع البيانات في لغات البرمجة أنواع البيانات المستخدمة في قواعد البيانات خاتمة تعريف البيانات البيانات Data تُعرَّف بأنها مقادير منفصلة على شكل رموز أو إشارات قابلة للتحليل والمعالجة، ويمكن للبيانات أن تكون واضحةً ومفهومة لنا دون سياق محدد -أي دون أي تسلسل أو ترابط- مثل مجموعة أرقام تمثل أحجية، فالأرقام مقاديرٌ مفهومةٌ بالنسبة لنا، لكن الربط بينها لحل الأحجية قد يكون عصيًا. وقد لا تكون البيانات مفهومةً كخطوط رمز الماسح الضوئي (بار كود). تُدعى النتيجة المستخلصة من تحليل مجموعة من البيانات والربط بينها بالمعلومة أو المعلومات عمومًا information، كما تُدعى أصغر وحدة من مجموعة بيانات يمكن أن تُستخدم أو تفهم باستقلالية بعنصر البيانات datum. عندما نجمع المعلومات المتعلقة بموضوع معين وننظمها ثم نفهمها من خلال التطبيق والممارسة، سيكون توثيق هذه المعلومات المصنّعة انطلاقًا من البيانات معرفةً knowledge، أما الأسلوب الأمثل في تطبيق هذه المعرفة فقد ندعوه حكمة wisdom. إذًا فالبيانات عمومًا هي وسيلة للحصول على معلومات أو وسيلة لتمثيلها بطريقة أفضل كي تُعالح وتُستخدم. وقد تكون هذه البيانات مجرّدة كأسماء علامات تجارية وقد تكون مقاسة كدرجات الحرارة أو نسبة الفائدة أو عدد الولادات خلال عام. تُنظم البيانات ضمن بنىً خاصة تسمى بنى البيانات أو هياكل البيانات data structure لتسهيل الوصول إليها واستخلاص المعلومات منها مثل الجداول، وقد جُمعت أنواع البيانات ما قبل الثورة الرقمية في مراجع وكتب ووثائق، لكن مع بزوغ فجر الحوسبة كان الانتقال إلى البيانات الرقمية أمرًا حتميًا لتقود بالفعل العالم الرقمي منتجات ومختصين نحو تقنيات أكثر قدرة وترابطًا ابتداءً بقواعد البيانات النمطية databases إلى تقنيات التعامل مع البيانات الضخمة Big data وصولًا إلى تطوير الذكاء الصنعي AI. الفرق بين البيانات والمعلومات يجري الخلط في مواضع عدة بين البيانات والمعلومات على أنها الشيء ذاته وهذا أمر خطأ، فهناك فرق بيّن بين المصطلحين تعريفًا وغاية، ولقد أشرنا سابقًا أن البيانات تعرّف حقائق مفردة، بينما تمثل المعلومات تنظيمًا لهذه الحقائق أو تفسيرًا لها. تأتي البيانات بأشكال مختلفة، نصوصًا وأرقام وأشكال وصور وتواريخ لكنها لا تحمل دلالات على أهميتها أو الحاجة لوجودها، فقد يشير جهاز قياس تردد الصوت إلى القيمة 12 كيلو هرتز عندما يعجز المريض عن سماع أي صوت في عيادة تخطيط السمع، إذ القراءة بحد ذاتها لا دلالة لها ولن يتمكن سوى المختص من تأويلها إلى المعلومة التالية "المريض يعاني نقصًا في السمع". وقد تجد أيضًا أن مقدار المبيعات من منتج ما هو 20 جهازًا في العام، لن يقدم كذلك عنصر البيانات هذا أي دلالة ما لم يحلل ويوازن ويتحول إلى معلومة مثل "حققت الشركة هذا العام نسبة مبيعات عالية!". وهكذا يمكن أن نلخص الفرق بين البيانات والمعلومات كالتالي: البيانات مجموعة من الحقائق غير المنظمة، أما المعلومات فهي من يضع تلك البيانات في سياقها الصحيح. البيانات مصدر خام للحقائق دون أية دلالات وقد لا تتمكن من قراءتها أحيانًا، أما المعلومات فهي التي توضّح أنواع البيانات وتستخلص منها ما يُفهم ويُطبق ويُختبر. البيانات حقائق مستقلة بذاتها وقد لا تربط بينها أية علاقات، بينما تجد المعلومات العلاقات التي تربط بين أنواع البيانات لعرض صورة أوسع عن الظاهرة المدروسة. لا تعتمد البيانات على المعلومات لكن العكس صحيح. لا يمكن الاعتماد على البيانات لاتخاذ القرارات، فلا بد من وجود معلومات حتى يُتّخذ القرار الصحيح. من أين تأتي البيانات؟ تأتي البيانات -والتي تتنوع إلى أنواع البيانات- من تطور الفهم البشري للبيئة المحيطة به، وبالتالي من تطور معارفه والحاجة إلى توثيق هذه المعارف ووضعها حيز التنفيذ بالأسلوب الأمثل والأكثر كفاءة من جميع النواحي تحليلًا ومعالجة وسرعة، لكن يمكننا القول أن الأساليب الأساسية التي نحوز بها على بيانات أو نحدّث الموجودة منها قد تنحصر بما يلي: الافتراض assumption المراقبة observations القياس measurement التحليل analysis الافتراض assumption عادة ما يكون الافتراض منهجيًا، أي يستند إلى أفكار مسبقة عن موضوع ما أو إلى معلومات غير دقيقة أو بياناتها غير كافية. عادة ما تكون أنواع البيانات المفترضة خطوة مرحلية تُلغى لاحقًا عند حيازة البيانات المطلوبة، إلا أن توثيقها ضروري جدًا. فلو أردنا مثلًا أن نقدّر عدد المشترين المتوقعين لمنتج جديد في مدينة ما لدراسة جدوى توزيعه فيها سيكون هذا الرقم مفترضًا والنتائج التي تتأتى عنه افتراضيةً أيضًا ستصحح مع الوقت لكن بالطبع سيكون عدد المشترين متوقعًا بناء على أفكار أو دراسات مشابهة. المراقبة observations وهي إحدى الطرق الإحصائية Statistics المتبعة في حيازة البيانات، إذ تجري مراقبة ظاهرة اجتماعية أو اقتصادية أو غيرها ضمن جماعة population محددة للحصول على أنواع بيانات محددة تتعلق بالحالة المدروسة، كأن نسجل بيانات عن عدد المتزوجين تحت سن الثلاثين في منطقة معينة مثل سن الزواج وتاريخه وعدد الأطفال. تقدم هذه البيانات قاعدة قوية للحصول على الكثير من المعلومات التي يحتاجها الإحصائي للإجابة عن الأسئلة التي صمم هذه الدراسة لأجلها. القياس measurement تُعنى هذه الطريقة بالحصول على بيانات كمية (سنتحدث عنها لاحقًا) ثابتة توصّف الحالة المدروسة، ويقصد بالحصول على قيمة: إجراء ما يلزم من الاختبارات لتحديد القيمة المقاسة بأقل خطأ ممكن. من الأمثلة على البيانات المحازة عن طريق القياسات درجات الحرارة في مدينة محددة أو منسوب المياه في نهر خلال العام أو كمية المشتريات من منتج محدد وغيرها. التحليل analysis تهدف هذه العملية إلى تفكيك ظاهرة مجهولة أو مجموعة معلومات مجهولة التكوين إلى بياناتها الأولية لفهمها والاستفادة منها كالبيانات الناتجة عن تحليل الطيف الضوئي لنجم بعيد أو تحليل إشارة لاسلكية مركبة إلى مكوناتها الأساسية للحصول على بيانات تتعلق بالتردد والشدة. إذًا فعمليات الحصول على أنواع البيانات أو حيازتها تتعلق بالظاهرة المدروسة والهدف النهائي من هذه الدراسة والمعلومات التي يجب الحصول عليها أو فهمها تمهيدًا لتخزينها أو وضعها حيز التطبيق. أنواع تخزين البيانات تخزن البيانات في وسائط تخزين والتي إما أن تكون فيزيائية باستعمال الأوراق والدفاتر وكل ما يصلح للكتابة عليه أو باستعمال وسائط تخزين رقمية عبر الحواسيب التي هي الأشيع حاليًا بما أنها تسهل عمليات البحث والفهرسة ومعالجة البيانات. فبالنسبة لتخزين البيانات في الحواسيب، فإنها تعتمد على وسائط تخزين رقمية مثل الأقراص المدمجة والأقراص الصلبة HDD وذواكر الحالة الصلبة SSD والتي تتطور تدريجيًا مع الزمن وفيها إما أن تخزن البيانات مباشرةً باستعمال نظام ملفات يوفره نظام التشغيل أو تخزن بطريقة مهيكلة عبر جداول مثلًا لتسهيل معالجتها والوصول إليها وهنا يمكن استعمال برامج بسيطة مثل برنامج إكسل من مايكروسوفت أوفيس وقواعد بيانات أكسس وحتى استعمال قواعد بيانات مخصصة تكون عادة الأساس الذي ترتكز عليه تطبيقات الحاسوب كلها. تصنيف أنواع البيانات Data Types أنواع البيانات Data Types تُصنّف ضمن ثلاثة فئات رئيسية هي: البيانات الكمية quantitative data البيانات النوعية qualitative data البيانات المنطقية logical data وسنشرح كل تصنيف منها. البيانات الكمية البيانات الكمية هي البيانات التي تأخذ قيمًا عددية أو ناتجة عن الموازنة مع مقاييس عددية ومن الأمثلة عليها ارتفاع بناء، فلا بد من أن يكون قيمة عددية محددة 30 متر مثلًا، أو أن تحدد مستوى مهارتك في لغة برمجة معينة على مقياس من 1 إلى 10. تنتج هذه البيانات عن طريق قياس المقادير عبر الأجهزة المختلفة كمقاييس الضغط والحرارة والارتفاع، وقد نحصل عليها من الاستبيانات questionnaire التي تُنشر وتتطلب الإجابة عنها عن طريقة التقييم العددي لأسئلتها. قد نجد أيضًا تصنيفات فرعية لهذا النوع من البيانات: بيانات منفصلة discrete data: وهي بيانات كمية تأخذ قيمها من مجموعة قيم محددة سلفًا كعدد الوجبات التي يمكن للمطاعم أن تقدمها أو عدد الأولاد في عائلة محددة. بيانات مستمرة continuous data: وتمثل عادة القيم التي تقيسها التجهيزات والتي يمكن أن تأخذ أي قيمة عددية ضمن مجال محدد مثل درجات الحرارة، ويمكن تصنيف هذه الأخيرة إلى: بيانات مجالية interval data: وهي بيانات تمثل قيم عددية مرتبة تزيد كل قيمة عن التي تسبقها بمقدار محدد تمامًا كأن نعرض تسلسل طلبات الشراء، أو أن نسجل ارتفاع بالون في الجو كلما ارتفع 10 أمتار عن سطح البحر. بيانات نسبية Ratio data: وهي بيانات مستمرة تمثل نسبة تكرار حالة إلى جميع الحالات الممكنة كأن تحدد احتمال إصابة هدف أو إمكانية ولادة طفل مصاب بمرض وراثي. بيانات إحصائية: وهي البيانات التي تنتج عن تطبيق العلاقات الرياضية الخاصة بالإحصاء ومن أنواع البيانات الإحصائية: المتوسط الحسابي mean: ويقيس مجموع عدة قراءات إلى عددها كأن نحسب المتوسط الحسابي لأطوال الذكور في بيئة معينة بجمع أطوال جميع الذكور المشاركين في الدراسة ثم تقسيم الناتج على عددهم. المتوسط الهندسي geometric mean: وهو الجذر من المرتبة n لجداء القراءات المتعلقة بظاهرة معينة. الوسيط median: ويحدد القيمة التي تأتي في وسط مجموعة قيم مرتبة أي بمعنى آخر القيمة التي تقسم مجموعة قيمة مرتبة إلى مجموعتين متساويتين. الانحراف المعياري standard deviation: ويمثل مقدار ابتعاد عينة عن المتوسط الحسابي. المدى range: الفرق بين أعلى وأدنى قراءة من مجموعة قراءات. المنوال mode: ويحدد القيمة أو القيم الأكثر ورودًا. البيانات النوعية البيانات النوعية هي البيانات التي تصف نوعية أو خصائص الظاهرة المدروسة وبالتالي هي غير قابلة للعد وصعبة القياس والتحليل الدقيق، كأن تكون ملاحظات مأخوذة عن نوعية الوجبات المقدمة في مطعم أو أسماء الناجحين في اختبار. قد تكون هذه البيانات على شكل كلمات تصف الظاهرة ولا تحتاج إلى تحليل أبعد أو يمكن أن تكون لهذه البيانات أنماط محددة أو معانٍ محددة لا بدّ من تحليلها للحصول على المعلومات المطلوبة مثل سمات السلوك العدواني لعينة من المرضى النفسيين أو الميزات الأنسب لأحد المرشحين للحصول على وظيفة معينة. كما قد تكتب البيانات النوعية على شكل بيانات رقمية لكنها لا تحتمل معنى الأعداد الرياضي ولا توازن بأعداد لا تماثلها كأن نجعل الرقم 1 يدل على جنس المولود إن كان أنثى و 0 إذا كان ذكرًا. وقد نجد أيضًا تصنيفات فرعية لهذا النوع من أنواع البيانات مثل: بيانات فئوية categorical data: وهي بيانات تمثل ميزة محددة للعينة المدروسة مثل العمر، والجنس، واللغة. بيانات مسماة nominal data: وهي بيانات نوعية تأخذ قيمها ضمن مجموعة محددة من الخيارات كأن تختار لغة من بين خمس لغات محددة سلفًا أو أن تختار تقييمًا لخدمة زبائن من بين عدة تقييمات متاحة. بيانات مرتبة ordinal data: وهي ببساطة بيانات مسماة لكنها مرتبة على أساس محدد كأن تحدد البيانات قائمة العقوبات التدريجية التي تطبق على مخالفي النظام الداخلي لمؤسسة او شركة أو تسلسل خطوات إصلاح خلل في برنامج. ما الفرق بين البيانات الكمية والنوعية؟ شرحنا ما هي البيانات الكمية والنوعية ويجدر الذكر أنه يمكن لعينة بيانات نفسها أن تنقسم إلى بيانات كمية ونوعية في الوقت نفسه مثل عينة بيانات من مجموعة مدارس، فقد تنقسم إلى بيانات كمية من عدد الطلاب وقد تنقسم إلى بيانات نوعية بناءً على جنس الطلاب بين ذكر وأنثى وهكذا لذا وجب التفريق جيدًا بين البيانات الكمية والنوعية. أمر آخر وهو أن العمليات المطبقة على البيانات الكمية قد تختلف أغلب الأحيان عن تلك المطبقة على البيانات النوعية فقد يصلح تطبيق عمليات إحصائية وعمليات رياضية على بيانات كمية في وقت لا يصلح تطبيقها على بيانات نوعية بما أن قيمة البيانات الكمية تمثَّل مباشرةً بعدد، وهذا خلاف البيانات النوعية فحتى لو مثلناها بعدد مثل تمثيل الطلاب الذكور بعدد 1 والطلاب الإناث بعدد 2 فهو طريقة لعرض البيانات بشكل آخر. البيانات المنطقية وهي أبسط أنواع البيانات، وتجيب عن سؤال ما بصحيح أو خاطئ، نعم أو لا وقد تأخذ إحدى القيمتين الرقميتين 0 أو 1، وتدعى أيضًا البيانات البوليانية نسبة إلى الجبر البولياني. قد تصنف هذه البيانات على أنها بيانات نوعيّة إذا جاءت على شكل "صحيح/خاطئ" أو "نعم/لا"، وقد تصنّف أنها بيانات كمية إن جاءت على شكل "0/1". أنواع البيانات في الحاسب عزز ظهور الحواسب قدرة البشر على حيازة وتخزين كميات هائلة من البيانات وأمنت الوسائل اللازمة لتحليلها واستخلاص المعلومات عنها والاستفادة من تلك المعلومات في عمليات اتخاذ القرار، ولا تختلف أنواع البيانات في الحاسب وفي العالم الرقمي من حيث التعريف والغاية لكنها تخزّن وتعالج بطريقة أفضل وأسرع، لهذا السبب وضعت بعض التصنيفات الفرعية وحددت أنواع للبيانات تلائم طريقة عمل الحواسيب. تمثّل البيانات في الحواسيب على شكل سلاسل من الواحدات والأصفار وهي ما يفهمه الحاسوب أولًا وآخرًا ويُدعى أصغر حجم لتخزين عنصر البيانات "بت Bit" ويخزن القيمة 0 أو 1 ومن البت يتكون البايت Byte الذي هو 8 بت والكيلو بايت والميغا بايت …إلخ. تصنيفات البيانات الرقمية تُدعى أنواع البيانات التي تُخزّن على شكل سلاسل من الأصفار والواحدات وتعالج وفق هذه الطريقة بالبيانات الرقمية digital data، وقد نجد أن البيانات الرقمية قد تأخذ أصنافًا جديدة منها: بيانات مهيكلة structured: تُرتب البيانات المهيكلة وفق نموذج بيانات محدد لتسهل معالجتها وتخزينها والوصول إليها مثل الجداول المكوّنة من أسطر وأعمدة والتي تُعد أساس قواعد البيانات العلاقيّة relational databases أو على شكل بنية هرمية متداخلة hierarchical data structure أو أنها قادرة على تخزين كائنات objects لها هيكليات محددة سلفًا. بيانات غير مهيكلة not structured: البيانات غير المهيكلة هي تلك التي تُنظّم فيها البيانات بطريقة محددة كأن توضع في ملفات نصية أو تُستخدم بعض اللغات التوصيفية في تنظيمها. بيانات وصفية metadata: وهي بيانات نصية تصف بيانات أخرى كأن تحدد إصدار برنامج وتاريخ الإصدار ومعلومات عن ترخيص الاستخدام وهكذا. بيانات خام raw Data: وهي تسلسل غير منسّق من الواحدات والأصفار يُخزّن للمعالجة اللاحقة. القواميس dictionary: وهي نوع من أنواع البيانات التي يمكن الوصول إليها بطريقة "مفتاح-قيمة" أي تُفهرس فيها بيانات "القيمة" وفقًا لبيانات "المفتاح" وللوصول إلى القيمة قراءةً أو تخزينًا لا بد من معرفة المفتاح المرتبط بها. البيانات الضخمة big data: ظهر هذا المصطلح في فترة قريبة نسبيًا ليدل على أنواع البيانات التي تتجاوز أحجامها البيتا بايت (1000 تيرا بايت)، وبالتالي سيصعب معالجة هذا الكم الهائل من البيانات من قبل حاسوب واحد أو تنظيمها باستخدام قواعد البيانات النمطية، لهذا توزّع المهام على عدة حواسب رئيسية تتمتع بقدرات كبيرة في المعالجة من خلال استخدام خوارزميات واختبارات متقدمة بغية استخلاص المعلومات والرؤى التي تقدمها تلك البيانات خلال فترة زمنية مقبولة. أنواع البيانات في لغات البرمجة تختلف أنواع البيانات التي تستخدمها لغات البرمجة للتعبير عن القيم التي تتعامل معها وفقًا للغة البرمجة نفسها فكل لغة برمجة لها مجموعة أنواع بيانات محددة تتعامل معها توضحها في توثيقها الرسمي فانظر مثلًا مقال أنواع البيانات في لغة بايثون في أكاديمية حسوب وقسم أنواع البيانات في لغة بايثون في توثيق موسوعة حسوب وكذلك صفحة أنواع البيانات في لغة PHP وصفحة أنواع البيانات الأساسية في لغة TypeScript وصفحة أنواع البيانات الأساسية في لغة كوتلن وغيرها، فكل لغة كما أشرنا تملك أنواع بيانات تحددها صراحة لما يترتب عليها لاحقًا من ضبط العمليات التي يمكن تنفيذها على كل نوع بيانات، فمثلًا الأعداد تطبق عليها عمليات رياضية من جمع وطرح وضرب والنصوص تطبق عليها عمليات القص والجمع مع نصوص أخرى والتنسيق وغيرها. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن وتنقسم لغات البرمجة في طريقة تحديد أنواع البيانات إلى قسمين إما بتحديدها صراحةً أثناء كتابة الشيفرة وتدعى آنذاك لغات برمجة صارمة في تحديد الأنواع Strongly typed language أو بترك الأمر للغة البرمجة لتحديدها أثناء تنفيذ الشيفرة وتدعى آنذاك لغات برمجة متهاونة في تحديد الأنواع Loosely typed language. أما في لغات البرمجة التي تعد صارمة في تحديد الأنواع مثل لغة سي C وجافا Java، فهي تفرض على المبرمج تحديد نوع المتغير عند تعريفه أول مرة ويبقى هذا النوع ملازمًا له طيلة عمل البرنامج ولا يمكن تغييره مطلقًا ولا يمكن استعماله إلا في العمليات المرتبطة بنوعه المحدد وغيرها من القواعد الأخرى التي تختلف باختلاف اللغة، فالمثال التالي من لغة سي يعرِّف ثلاثة متغيرات الأول عدد صحيح والثاني عدد عشري والثالث محرف واحد: int intNumber = 2; float floatNumber = 2.3; char character = 'e'; وإن لم يتبع المبرمج هذه القواعد فسيحصل على خطأ قبل تنفيذ الشيفرة وقت تصريفها (إن كانت اللغة مصرَّفة compiled مثلًا)، فستحصل على خطأ إن جربت جمع العدد الصحيح intNumber السابق مع الحرف character بالشكل intNumber + character مباشرةً وكذلك إن أردنا جمعه مع العدد العشري floatNumber وهنا يجب إجراء عملية تحويل صريحة للنوع انظر مثلًا: int intNumber = 2; float floatNumber = 2.3; int sum = intNumber + (int)floatNumber; printf("Value of sum : %d\n",sum); عندما جمعنا العدد الصحيح intNumber مع العدد العشري floatNumber حولنا الأخير إلى عدد صحيح عبر تحديد النوع بين القوسين قبل المتغير ثم جمعنا العدد لنحصل على الناتج التالي: Value of sum : 4 ولاحظ أن الفاصلة العشري قد أُهملَت بما فيها من أجزاء عشرية وهذا ناتج عملية التحويل. تختلف لغات البرمجة أيضًا من ناحية التصريح والتلميح في عمليات التحويل بين الأنواع casting ففي التصريح يضطر المبرمج إلى ذكر النوع المراد التحويل إليه صراحةً وسيحصل على خطأ إن لم يفعل، وفي التلميح تكون اللغات ذكية في استنتاج النوع المراد التحويل إليه وتدعى smart casting فمثلًا إن جربت ما يلي في لغة سي: int intNumber = 2; float floatNumber = 2.3; int sum = intNumber + floatNumber; printf("Value of sum : %d\n",sum); فستحصل على الناتج 4 كعدد صحيح لأن لغة سي مباشرةً حولت العدد العشري إلى صحيح بما أن المتغير الذي سنخزن فيه النتيجة من نوع عدد صحيح وكذلك العدد الأول عدد صحيح، أما إن جربنا ما يلي: int intNumber = 2; float floatNumber = 2.3; float sum = intNumber + floatNumber; printf("Value of sum : %f\n",sum); فستحصل على ناتج 4.3 حتى لو كان العدد الأول صحيح إلا أن المتغير المراد تخزين القيمة فيه اختلف نوعه فاختلفت عملية التحويل الآلية وجرى تحويل العدد الصحيح إلى عدد عشري. وأما في لغات البرمجة التي تعد متهاونة في تحديد النوع مثل جافاسكربت وبايثون ولغة PHP فلا حاجة لتحديد أنواع البيانات للمتغيرات ويكتفي المبرمج بالتصريح عن المتغير فقط دون نوعه، فانظر إلى المثال التالي في لغة جافاسكربت الذي يعرف المتغيرات الثلاثة كما في المثال السابق: let intNumber = 2; let floatNumber = 2.3; let character = 'e'; سيُترك الأمر إلى لغة البرمجة لتحديد نوع المتغير أثناء وقت تنفيذ الشيفرة runtime لتحديد العمليات التي يمكن تنفيذها مع كل متغير وفق نوع، ولاحظ أنه يمكن لمتغير أخذ نوع عدد صحيح أن يأخذ نوع آخر مثل عدد عشري أو نص ولا يُعد ذلك خطأ: let intNumber = 2; intNumber = 'e'; وأما بخصوص عمليات التحويل بين الأنواع فهو أمر متروك كليًا إلى لغة البرمجة وذكائها، فإن جربنا الجمع بين العدد الصحيح والعشري كما فعلنا مع لغة سي الصارمة في تحديد الأنواع: let intNumber = 2; let floatNumber = 2.3; let sum = intNumber + floatNumber; console.log('Value of sum: ' + sum) فسنحصل على النتيجة التالية: Value of sum: 4.3 لاحظ أن عملية التحويل مالت إلى كفة العدد العشري ولاحظ أيضًا أننا جمعنا نصًا 'Value of sum: ‎' مع عدد sum أثناء طباعة النتيجة وكان الناتج نصًا ولم نحصل على خطأ بل اجتهدت لغة جافاسكربت في عملية التحويل ما يمكنها قبل أن تطلق أي خطأ للمبرمج، وقد شاعت الكثير من الدعابات بين المبرمجين حول عثرات لغة جافاسكربت تحديدًا في ضبط عملية التحويل بين أنواع البيانات بدقة. وهذا الأمر يربك المبرمجين بعض الأحيان في اللغات المتهاونة في تحديد النوع لعدم معرفة نوع البيانات النهائي للعملية بالضبط، فتخيل مثلًا في تطبيق بنكي مبني بلغة متهاونة في ضبط النوع أو أن الأمر متروك للغة البرمجة لاستنتاج نوع البيانات أثناء وقت التنفيذ فيرسل مستخدمًا مبلغ 100.54 دولار لصديقه ليستلم الأخير مبلغ 100 فقط ويُعلل الأمر بأن لغة البرمجة قد أخطأت في عملية تحويل نوع البيانات لذا اختيار طريقة التعامل مع البيانات أمر مهم جدًا يعتمد على نوع التطبيق المراد العمل عليه! في النهاية، المتغيرات في لغات البرمجة هي حاويات للبيانات التي تصنف إلى أنواع وقد تُحدد أحجام تلك الحاويات وفقًا لحجم البيانات المخزنة فيها تلقائيًا كما في اللغات المتهاونة في تحديد النوع أو وفقًا لنوع البيانات المحدد لها ويحصل خطأ إن تجاوزت البيانات الحجم المضبوط بنوع البيانات ذاك كما في اللغات الصارمة في تحديد النوع فمثلًا يأخذ متغير بنوع بيانات short حجم 2 بايت من الذاكرة لتخزين أعداد تتراوح بين القيمة ‎-32768 والقيمة 32767 فقط بينما يأخذ متغير من النوع bool حجم 1 بت فقط في لغة سي. وأيًا كانت أنواع البيانات التي تُعرّفها لغات البرمجة المختلفة إلا أنها تشترك جميعها بأنواع بيانات عامة سنتحدث عنها بالتفصيل. الأعداد الصحيحة تعبّر الأعداد الصحيحة Integer عن البيانات بالأعداد الكاملة أي دون فواصل عشرية سواء كانت الأعداد موجبة أو سالبة مثل 5، 110-، 42345، وهكذا، وتُستخدم الأعداد الصحيحة لتمثيل مقادير مثل عدد الولادات في عام أو عدد مرات وقوع حدث معين أو الأرقام التسلسلية لمنتجات أو رقم جواز السفر وما شابه. تمثل لغات البرمجة الأعداد الصحيحة ببايت واحد أو 2 بايت أو 4 بايتات، ويعود السبب في ذلك إلى حجم البيانات التي تريد تمثيله فإن أردت أن تمثل أعدادًا صحيحة من 0 إلى 100 مثلًا لا حاجة عندها لأربعة بايتات ويُكتفى ببايت واحد، أما إن احتجت إلى تخزين أرقام ضخمة ككتلة الأرض مثلًا فستحتاج إلى عدد صحيح من أربع بتات بالتأكيد. إليك بعض الأمثلة: في اللغة C++/C: // متغير حجمه أربعة بايتات ويخزّن فيه بيانات عددية صحيحة سالبة وموجبة int a =0; // متغير حجمه بايت واحد ويخزّن فيه بيانات عددية صحيحة موجبة وسالبة int8_t a=0; // متغير حجمه بايتين ويخزّن فيه بيانات عددية صحيحة موجبة وسالبة int16_t a=0; // متغير حجمه بايت واحد ويخزّن فيه بيانات صحيحة موجبة فقط uint8_t a=0; في اللغة Java: // متغير حجمه بايت واحد ويخزّن فيه بيانات عددية صحيحة موجبة وسالبة byte x=0; // متغير حجمه بايتين ويخزّن فيه بيانات عددية صحيحة موجبة وسالبة short x=0; // متغير حجمه أربعة بايتات ويخزّن فيه بيانات عددية صحيحة موجبة وسالبة int a=0; إذًا تختلف طريقة تمثيل الأعداد الصحيحة وفقًا للحجم المحجوز من الذاكرة من لغة إلى أخرى ويمكنك العودة إلى ويكيبيديا لتتعرف على طريقة تمثيل البيانات الصحيحة في أكثر اللغات انتشارًا. الأعداد الحقيقية تمثل الأعداد الحقيقية Real numbers جميع الأعداد الصحيحة والعشرية ذات الفاصلة الموجبة منها والسالبة مثل 2.56 أو 2341.234- وهكذا، وتُستخدم هذه الأعداد عند الحاجة إلى تخزين قراءات لمقادير فيزيائية مثل درجات الحرارة أو نواتج العمليات الحسابية المتنوعة كناتج عملية قسمة أو حساب الجذور التربيعية وما شابه. تمثل لغات البرمجة الأعداد الحقيقية بكلمة ذات أربع بايتات 232 عددًا أو كلمة ذات ثمان بايتات 264 عددًا، وتختلف تسمية الأعداد الحقيقية من لغة إلى أخرى. إليك بعض الأمثلة: في اللغات #C++/Java/C: // متغير حجمه أربعة بايتات ويخزّن فيه بيانات عددية حقيقية بإشارة float a=0; // متغير حجمه ثمان بايتات ويخزّن فيه بيانات عددية حقيقية بإشارة double a=0; الاختلاف بين نوع البيانات float ونوع البيانات double هو في دقة الأجزاء العشرية أي الأرقام المخزنة بعد الفاصلة العشرية، فالثاني هو عدد عشري مضاعف الدقة عن الأول. البيانات المنطقية البوليانية تمثل هذه البيانات إحدى القيمتين 0 أو 1 وتحجز بتًا واحدًا من الذاكرة، تُستخدم هذه البيانات لتخزين البيانات الناتجة عن أسئلة تحتمل فقط جوابًا بنعم/لا أو صح/خطأ، كأن تكون غرفة في فندق ما محجوزة أو هل اشترى عميل منتج معين أم لا وهكذا. إليك بعض الأمثلة: في لغة JAVA: // متغير حجمه بت واحد ويخزّن فيه قيمة منطقية 0 أو 1 boolean a=1; في لغة ++C: // متغير حجمه بت واحد ويخزّن فيه قيمة منطقية 0 أو 1 bool a=0; المحارف والنصوص تُمثّل هذه البيانات محرفًا واحدًا character كحرفٍ "ب" مثلًا أو رمزٍ "#" مثلًا أو علامة ترقيمٍ ":" مثلًا أو بعض المحارف الخاصة (لها استخدامات خاصة ولا تطبع على الشاشة كالمحارف التي تهيئ موقع الحركات في اللغة العربية)، وتُمثّل المحارف بكلمة من بايت أو بايتين أو ثلاثة أو أربعة وذلك وفقًا لطريقة الترميز. فترميز ASCII مؤلف من 128 أو 256 محرفًا أي يستخدم بايت واحد وقد وُسِّعت إلى الترميز الموحد UTF-8 الذي يستخدم من بايتين إلى أربعة بايتات ويرمز ملايين المحارف التي تغطي معظم الرموز والحروف في جميع اللغات المعروفة كما ظهرت توسيعات أخرى لمحارف ASCII مثل ISO وOEM وwindows125x وغيرها. تتعامل مختلف لغات البرمجة مع المحارف وتعرفها بطرق مختلفة، وإليك بعض الأمثلة: في لغات ++JAVA/C#/C: // متغير يعبّر عن محرف واحد char ch="#"; هذا بخصوص المحارف ولكن ماذا لو أردنا تخزين نص في متغير؟ النص String هو في الواقع سلسلة متلاحقة من المحارف أو مصفوفة من المحارف array of characters وبالتالي تُشتق الأنواع النصية انطلاقًا من المحارف وتتعامل معها انطلاقًا من العمليات على المحارف أيضًا، وتُعرف معظم اللغات هذا النوع بالاسم string. إليك مثالًا: في لغة ++C: #include <string> //إدراج المكتبة المعيارية الخاصة بالتعامل مع النصوص using std::string // استخدام فضاء أسماء النوع النصي int main(){ string s1= "مرحبًا"; sting s2="أيها العالم"; cout<< s1+s2;// "ستكون النتيجة "مرحبًا أيها العالم return 0; } انتبه إلى أنَّ لغة البرمجة قد تعامل المحرف معاملة النص وتدخله ضمن نوع النص String مثل لغة جافاسكربت وقد تميز اللغة بين المحرف Char وبين النص أو السلسلة النصة String كما في لغة جافا وسي. أنواع البيانات مقابل هياكل البيانات تُدعى الأنواع المدمجة في أي لغة بالأنواع الأساسية basic أو البدائية primitive ويمكنك استخدامها مباشرة في تعريف المتغيرات دون أية مقدمات فلغة جافاسكربت مثلًا التي تتصف بأنها متهاونة في تحديد أنواع البيانات تملك الأنواع الأساسية التالية: String: يمثل النصوص والسلاسل النصية. Boolean: يمثل القيم المنطقية مثل صح/خطأ. Number: يمثل الأعداد. BigInt: يمثل الأعداد الكبيرة جدًا. Undefined: يمثل عدم التعريف. Null: يمثل القيمة الفارغة أو عدم وجود قيمة. Symbol: يمثل الرموز الفريدة الخاصة. Object: يمثل هيكلة لتخزين البيانات. ناقشنا بعض الأنواع السابقة في القسم السابق والتي قلنا أن أغلب لغات البرمجة تشترك فيها ولكن أريد التركيز على النوع الأخير Object فقد تطلق لغة البرمجة على طريقة وهيكلة محددة لتخزين البيانات بنوع بيانات وقد تكون من ضمن الأنواع الأساسية كما رأينا في لغة جافاسكربت التي هي عبارة عن طريقة تخزين بيانات على شكل مفتاح/قيمة key/value مثل: const colorsObj = { black: '#000000', white: '#ffffff', red: '#ff0000', cyan: '#00ffff', pink: '#ffc0cb' } لاحظ أننا ربطنا اسم كل لون بقيمته الست عشرية والتي تمثِّل سلسلة نصية string ويمكننا الوصول إلى قيمة اللون الأسود مثلًا بالشكل colorsObj.black، ويمكن وضع أي نوع بيانات من الأنواع السابقة مكان النص. ومن هذه الهيكلة تُشتق هياكل بيانات أخرى أشهرها على الإطلاق المصفوفات Arrays التي تمثل بالشكل التالي في جافاسكربت: const colorsObj = [ '#000000', '#ffffff', '#ff0000', '#00ffff', '#ffc0cb' ] ستجد الكثير من أشكال هياكل البيانات ولا يسعنا في هذا المقال حصرها كلها ولكن وجبت الإشارة إليه بأنه وسيلة مهمة جدًا لتنظيم البيانات وهيكلتها وقد يعدها البعض نوعًا من أنواع البيانات إلا أنها عبارة عن حاويات تحوي البيانات وتسهل الوصول إليها. أنواع البيانات المستخدمة في قواعد البيانات تحدد معظم قواعد البيانات -وهي برمجيات صممت لاحتواء البيانات وتنظيمها والتعامل معها- أنواع البيانات التي تخزّنها كي يسهل التعامل معها وتعديلها، وتستعمل قواعد البيانات جميع الأنواع التي تستخدمها لغات البرمجة أي: الأعداد الصحيحة integer. الأعداد العشرية (وهي أعداد حقيقية) ذات الفاصلة العائمة float. البيانات المنطقية (0 أو 1). المحارف character. القيم النصية string. ويضاف إليها: المحارف متغيرة الطول varchar: وتمثل مجموعة محددة الطول من المحارف المتتابعة فعندما نحدد نوع أحد البيانات على أنه varchar(20)‎ أي أن العدد الكلي للمحارف في هذا المتغير هو 20 محرفًا. القيم الزمنية والتاريخ date-time: وتخزن بيانات تتعلق بالتاريخ (يوم:شهر:سنة) والوقت (ساعة:دقيقة). إن كنت ستتخصص في قواعد البيانات وستعمل مع أحد أنظمة قواعد البيانات، فيمكنك آنذاك التحقق من توثيقات قاعدة البيانات التي ستستخدمها وما ستوفره من أنواع بيانات يمكن استخدامها، وعمومًا ننصحك بالاطلاع على مقال البيانات في SQL: أنواعها والقيود عليها وانظر أيضًا توثيق أنواع البيانات في لغة SQL العربي من موسوعة حسوب. ملاحظة: تطور حاليًا ما يُدعى بقواعد البيانات الكائنية OODB التي تخزّن بياناتها على شكل كائنات بدلًا من الأنواع الأساسية التي تعرفنا عليها وستجد لنفسها قريبًا مكانًا في عالم البيانات الضخمة المتغير. خاتمة رأينا في هذا المقال أن الأساس المتين للمعرفة البشرية مبني على البيانات التي نستخلصها من بيئتنا المحيطة عند محاولة فهم أو توصيف أو تحليل ما يجري حولنا. لقد حُفظت البيانات على جدران الكهوف وعلى جلود الحيوانات وعلى الأوراق وفي الكتب وصولًا إلى الخوادم المخصصة التي تخزن كميات هائلة من أنواع البيانات وتساعد عبر إمكاناتها التقنية في معالجة هذه البيانات وإيجاد الروابط فيما بينها والحصول على معارف ورؤىً جديدة. تحدثنا أيضًا عن طرق حيازة المعلومات وكيفية تصنيفها، وتعرفنا على الطريقة الرقمية في تخزين واسترجاع البيانات، وفصلنا الشرح في أنواع البيانات في لغات البرمجة وضربنا مختلف الأمثلة عليها لما لها من أهمية كبيرة في فهم أي لغة برمجة تريد أن تتعلمها. وهكذا نكون قد أحطنا ببعض المفاهيم الأساسية التي قد تجدها عونًا لك إن أردت الخوض في مجال البيانات المزدهر وسريع التطور كتحليل البيانات وتصميم قواعدها وتحليل الأنظمة والحوسبة الحدية والتنقيب في البيانات الضخمة أو حتى العمل في البرمجة التي ستعالج البيانات أولًا وآخرًا. اقرأ أيضًا تعلم البرمجة المدخل الشامل لتعلم علوم الحاسوب علم البيانات Data science: الدليل الشامل مفهوم علم البيانات Data Science المرجع الشامل إلى تعلم لغة بايثون
  5. تُستخدم خاصية التحقق من صحة البيانات Data Validation للتحكم في القيم المُدخلة إلى خلية ما حسب معيار محدد. وتعتبر مفيدة على وجه الخصوص عندما تشارك مصنفاتك مع زملائك في الشركة وترغب في التأكّد من إدخال القيم الصحيحة في تلك الخلية. على سبيل المثال، تقييد المستخدمين بإدخال نص بعدد حروف محدد، أو إدخال قيم موجبة فقط في الخلية. وتتوفر مع هذه الخاصية إمكانية إنشاء رسالة إدخال Input Message تُرشد المستخدمين إلى القيم المناسبة المطلوب إدخالها في الخلية، بالإضافة إلى عرض نافذة تحذيرية Error Alert تنبّه المستخدمين عند إدخال قيمة خاطئة. مثال1: في المصنف التالي، نرغب في التأكد من أن يقوم المستخدمون بإدخال قيم لـ "نسبة الخصم" تتراوح من 15 إلى 25%. أولا، سنحدد الخلية التي نريد تطبيق التحقق من صحة المدخلات عليها، وهي الخلية B15 في هذا المثال، ثم نذهب إلى تبويب بيانات Data وننقر على أمر التحقق من صحة البيانات Data Validation: في مربع الحوار توجد 3 تبويبات. الأول، الإعدادات Settings، ومنه نحدد المعيار الذي يتم التحقق من المدخلات على أساسه، ونلاحظ أنّ الخيار الافتراضي هو السماح بأي قيمة Any Value. وبما أننا في هذا المثال نريد تقييد المستخدم بإدخال قيمة بين 15 و25%، سنسمح بإدخال القيم العشرية باختيار Decimal من حقل Allow، المعيار بين Between من حقل Data، ثم ندخل الحدين الأقصى والأدنى: وفي التبويب الثاني، رسالة الإدخال Input Message، نقوم بإدخال العنوان والتلميح الذي نريد إظهاره للمستخدمين عند تحديد الخلية لتغيير محتواها: إنّ إظهار رسالة التلميح اختياري، يمكنك عدم إظهارها بإلغاء تأشير الخيار Show input message when cell is selected. في التبويب الثالث، التنبيه إلى الخطأ Error Alert، نقوم بإدخال الرسالة التي تظهر للمستخدم عند إدخال قيمة خاطئة، ويفضّل أن تكون رسالة واضحة تُرشد المستخدم إلى الشيء الذي يجب فعله بالضبط. بعدها نحدد نوع التنبيه Style: تختلف أنواع التنبيه كالتالي: إيقاف Stop: يمنع المستخدم من إدخال قيمة غير صحيحة، ولا تؤخذ القيمة ما لم تحقق المعيار. وهذا النوع من التنبيه هو الأكثر تقييدا. تحذير Warning: تُحذر المستخدم بأنّ القيمة التي قام بإدخالها غير صحيحة، لكن يمكن قبول هذه القيمة عند النقر على نعم Yes حتى وإن لم تحقق المعيار، أو تعديل القيمة عند النقر على كلا No. معلومات Information: تُخبر المستخدم بأنّ القيمة غير صحيحة فقط، وهذا النوع من التنبيه عادة ما يكون مرنا ويتم تجاهله من قبل المستخدمين. يمكن عدم إظهار رسالة التنبيه بإلغاء تأشير الخيار Show error alert after invalid data is entered . عند الانتهاء من تعديل كافة الخيارات ننقر موافق OK. وبذلك ستظهر رسالة التلميح عند تحديد الخلية: وعندما نقوم بإدخال قيمة خارج المدى، 12% مثلا، ستظهر رسالة التنبيه حسب النوع الذي اخترناه. بما أننا اخترنا نوع الإيقاف Stop لدينا خيار إعادة المحاولة Retry وإدخال قيمة صحيحة، إلغاء عملية التحرير Cancel، أو الذهاب إلى صفحة المساعدة Help. أما عند اختيار النوع الثاني، تحذير Warning، وإدخال قيمة خاطئة، فيمكننا المواصلة مع هذه القيمة عند النقر على نعم Yes، إعادة إدخال قيمة صحيحة عند النقر على كلا No، إلغاء عملية التحرير بالنقر على Cancel، أو الذهاب إلى صفحة المساعدة Help. وفي النوع الثالث، معلومات Information، يمكننا تجاهل التنبيه بالنقر على موافق OK، إلغاء عملية التحرير Cancel، أو الذهاب إلى صفحة المساعدة Help. مثال2: في هذا المثال البسيط، نريد تقييد المستخدم باختيار لغة من مجموعة لغات تظهر في قائمة منسدلة: سنحدد أولا الخلية التي نريد إضافة القائمة إليها، وهي D3 في هذا المثال، ثم ننقر التحقق من صحة البيانات Data Validation من تبويب بيانات Data: سنختار قائمة List من حقل Allow، ثم نحدد القيم التي نريد إدراجها في القائمة، وقد قمنا بكتابتها مسبقا على جنب: لا نريد هنا إظهار رسالة إدخال ورسالة تنبيه، لذلك سنتجاوز هذه الخطوة وننقر موافق OK. والنتيجة ستكون ظهور سهم بجانب الخلية D3، عند النقر عليه تظهر قائمة اللغات المتاحة التي يمكن الاختيار منها: اقرأ أيضًا دليلك الشامل إلى أنواع البيانات
  6. غالبًا ما تشكّل الأرقام الجزء الأعظم والأهم من جداول بيانات اكسل. وهي تختلف بأنواعها، صيغها، وأطوالها. وعلى غرار الخلايا التي يمكن تنسيقها بعدة أنماط، يمكن تنسيق محتويات الخلية، سواء كانت نصوص أو أرقام. ما سنغطيه في هذا المقال هو تنسيق الأرقام، ونقصد بالتنسيق اختيار الصيغة المناسبة لعرض الرقم بعد إدخاله. يوفّر اكسل مجموعة خيارات لصيغ الأرقام، كالعملات، الوقت، التاريخ، الأرقام عشرية، أو مجرّد أرقام اعتيادية. يجب أن تأخذ في الاعتبار أن تغيير تنسيق الرقم سيؤثر على مظهر الرقم فقط، ولا يؤثّر على قيمة الرقم التي يخزّنها اكسل. على سبيل المثال؛ لنفرض أنّك قمت بإدخال الرقمين 0.6666667 و 0.3333333 في جدول بيانات اكسل وتريد جمعها بعملية الجمع البسيطة. لكن قبل ذلك قمت بتغيير صيغة الرقمين لإظهار مرتبة عشرية واحدة، أي بالشكل التالي: 0.6 و 0.3. أي شخص يعرف بالعمليات الحسابية الأساسية سيقول أنّ نتيجة جمع 0.6 + 0.3 تساوي 0.9 وهذا صحيح. إلّا أنّ النتيجة التي سيرجعها اكسل ستكون 1 بدلًا من 0.9؛ أي أنّه قام بجمع 0.6666667 + 0.3333333 والسبب كما أسلفنا هو أنّ قيمة الرقم المخزونة في اكسل لا تتغيّر عند تغيير تنسيق الرقم، وإنّما يتغيّر مظهر الرقم فقط. بإمكانك ضبط إعدادات اكسل الافتراضية ليقوم بتغيير قيمة الرقم المخزونة وليس مظهره فقط عند تغيير صيغته. اذهب إلى: File > Options > Advanced انتقل إلى قسم When Calculating this workbook ثم قم بتأشير مربّع الخيار Set precisions as displayed: مع ذلك، يُنصح بترك هذا الخيار غير مؤشّر لأنّ سيؤثّر على دقة الأرقام، وهذا غير مفيد في الحسابات التي تتطلّب أرقامًا دقيقة جدًا والتي تكون فيها أعشار الرقم مهمة جدًا. تنسيقات الأرقام المضمنة افتراضيا في اكسل توجد قائمة تنسيقات الأرقام المضمّنة في اكسل في تبويب الصفحة الرئيسية Home وبالتحديد في خانة رقم Number: يمكنك تطبيق التنسيق بتحديد الخلية التي تحتوي على الرقم ومن ثم اختيار التنسيق المناسب من القائمة: من التنسيقات المضّمنة الشائعة التي تُستخدم في أغلب جداول البيانات: عام General هو التنسيق الافتراضي الذي يُستخدم تلقائيًا عند كتابة أي رقم. ويعني التنسيق العام أنّه لم يتم تطبيق أي تنسيق آخر على الرقم سواء كان من التنسيقات المضمّنة أو المخصصة: الرقم Number يُستخدم هذا التنسيق مع الأرقام بشكل عام. سيظهر الرقم عند اختيار هذا التنسيق بفواصل عشرية: يمكنك تحديد المنازل العشرية المعروضة بعد الفاصلة بالنقر على زر زيادة/إنقاص المنازل العشرية: يمكنك أيضًا التحكّم في عدد المنازل العشرية، وكذلك طريقة عرض الأرقام السالبة من خلال مربع الحوار تنسيق الخلايا Format Cells. انقر على مشغّل مربّع الحوار، حدد تبويب Number ثم اختر التنسيق المرغوب: العملة Currency يستخدم هذا التنسيق مع القيم النقدية العامة. حيث يقوم بإظهار رمز العملة الافتراضي بجانب الرقم. وبإمكانك التحكّم في عدد المنازل العشرية للرقم، كيفية عرض القيم السالبة، وكذلك رمز العملة من خلال مربع الحوار Format Cells وكما ذكرنا أعلاه: محاسبة Accounting يستخدم هذا التنسيق أيضًا مع القيم النقدية، لكنّه يقوم بمحاذاة رمز العملة بشكل منفصل عن الرقم داخل الخلية: بإمكانك تغيير رمز العملة، أو نوعها، بواسطة زر Accounting Number Format الذي يعرض مجموعة من الخيارات البديلة. ويمكن الوصول إلى المزيد من خيارات رموز العملات بالنقر على More Accounting Formats: وبخلاف تنسيق العملة، لا يمكن التحكّم في طريقة عرض القيم السالبة عند استخدام تنسيق محاسبة، وستُعرض الأرقام السالبة كما هي بالإضافة إلى رمز العملة: التاريخ Date يوفّر اكسل عدة خيارات مفيدة لتنسيق الأرقام بصيغة تواريخ. وعندما تقوم بإدخال تاريخ معيّن باستخدام أي نوع من الفواصل، سيقوم اكسل بتحويله تلقائيًا إلى صيغة تاريخ، ويختار نوع الفاصل الأنسب. على سبيل المثال، إذا قمنا بإدخال التاريخ 22-03-2016 في الخلية، سيتم تطبيق تنسيق التاريخ تلقائيًا، كما يغيّر مظهر التاريخ إلى الصيغة الموضّحة أدناه: أي أنّه استخدم الفاصلة المائلة بدلًا من التي قمنا بإدخالها. توجد العديد من صيغ التاريخ التي يمكنك الاختيار من بينها، ويمكنك الوصول إليها من مربع الحوار Format Cells: بعض هذه الصيغ تتغيّر بتغيّر إعدادات الوقت والتاريخ للمنطقة التي تم تحديدها لنظام تشغيل جهازك. هناك خيارات أيضًا لعرض التاريخ بصيغة طويلة، أي بكتابة اسم الشهر بدلًا من رقمه. اختر الصيغة المرغوبة ثم انقر على OK. الوقت Time الوقت، حاله حال التاريخ، يمكن أن يسبب لك الالتباس عند إدخاله. فقد يختلف ما تقوم بإدخاله عما يظهر في الخلية. والسبب هو أيضًا في تنوّع تنسيقات الوقت المضمّنة في اكسل. حيث يقوم البرنامج بالتعرّف على صيغة الوقت وعرضها بتنسيق معيّن قد يكون مختلفًا عمّا قصدته. على سبيل المثال، إذا أردت إدخال 4 دقائق و 56 ثانية، يمكنك كتابتها بالشكل 4:56 داخل الخلية. لكن ستلاحظ، من خلال شريطة الصيغة، أنّ اكسل يقوم بتخزين الوقت بالشكل 04:56:00 ص. كما يتم تحديد التنسيق Custom: وعندما تذهب إلى مربّع الحوار Format Cells، ستجد أنّ الوقت قد تم عرضه بصيغة hh:mm (أي ساعة: دقيقة)، وتم اعتبار الرقم 4 هو ما يمثّل الساعات والرقم 56 هو ما يمثّل الدقائق: وستلاحظ أيضًا وجود العديد من التنسيقات المتنوّعة للوقت. فإذا كنت ترغب في عرض الدقائق: الثواني اختر التنسيق mm:ss. من جديد سيقوم اكسل بعرض وقت مخالف للوقت الذي قمت بإدخاله: لذلك يجب أن تكون أكثر دقة في إدخال الوقت. وفي مثالنا هذا يجب كتابة الوقت بالشكل 00:04:56، لكي نكون أكثر تحديدًا في بيان رقم الساعة، الدقيقة، والثانية. بعد أن تتأكد من إدخال الوقت بصورة صحيحة، يمكنك تغيير التنسيق واختيار صيغة أخرى لعرض الوقت مثل hh:mm AM/PM لإظهار ص (صباحًا) أو م (مساءً) بجانب الوقت، أو h:mm:ss إذا كنت تريد جمع الوقت وطرحه، حيث تكون هذه الصيغة مفيدة في هذه الحالة على وجه الخصوص. نسبة مئوية Percentage يُستخدم هذا التنسيق لعرض محتوى الخلية كنسبة مئوية، أي يقوم بضرب الرقم الموجود في الخلية × 100 ويضيف رمز النسبة المئوية. يمكنك تطبيق هذا التنسيق إما بالنقر على أمر النسبة المئوية في خانة Number، أو استخدام مفتاح الاختصار Ctrl+Shift+% أو من خلال قائمة التنسيقات. ويمكن التحكّم في عدد المنازل العشرية بواسطة مربع الحوار Format Cells: كسور Fraction يُستخدم هذا التنسيق لعرض الأرقام بشكل كسور صحيحة، وحسب نوع الكسر الذي تختاره (من مربع الحوار Format Cells): علمي Scientific في هذا التنسيق، يتم عرض الأرقام باستخدام الرمز الأسي. حيث يتم ضرب الرقم بالأساس 10 ويرفع لأس محدد حسب طول الرقم. على سبيل المثال، عند كتابة الرقم 255 وتطبيق هذا التنسيق سيتم عرض الرقم بالشكل التالي: نص Text إذا كنت تريد أن تتم معاملة الرقم كنص عادي في الخلية يمكنك استخدام هذا التنسيق. عند تطبيقه سيتم محاذاة الرقم إلى جهة مخالفة لجهة الأرقام لتمييزه عنها: تنسيقات خاصة Special هناك بعض التنسيقات الخاصة المضمّنة في اكسل مثل تنسيق الرموز البريدية، أرقام الهواتف، أو أرقام الحماية الاجتماعية. يمكنك الوصول إلى هذه الخيارات من مربع الحوار Format Cells: مثلا، عند تطبيق تنسيق رقم الهاتف Phone Number على الرقم 1112224445، ستتم إضافة فواصل وسطية صغيرة، وسيظهر بصيغة رقم هاتف. لكن يبقى الرقم في حقل الصيغة كما تم إدخاله، وهذا مثال آخر على تغيير مظهر الرقم وليس قيمته عند تغيير التنسيق: اقرأ أيضًا دليلك الشامل إلى أنواع البيانات
  7. إن تطبيق جداول بيانات جوجل هو عبارة عن تطبيق ويب وأحد مجموعة تطبيقات جوجل درايف المكتبية التي تضم تطبيقت مستندات جوجل وتطبيق العروض التقديمية وغيرها، ويعتبر هذا التطبيق شبيه لبرنامج مايكروسوفت إكسل وبرنامج ليبر أوفيس كالك. وعلى الرغم من أنه لا يقدم جميع ميزات إكسل وكالك المتقدمة، إلا أنه من السهل إنشاء جداول بيانات وتعديلها سواء كانت بسيطة أم معقدّة. إن استخدام تطبيقات جداول بيانات جوجل ليس مقتصرًا على المحاسبين ومستخدمي جداول البيانات المعقدة والمطورين، بل يمكن استخدامها لإنشاء جداول بيانات بسيطة لأمور حياتية يومية كجدول مهام عمل يومية أو حسابات البقالة أو أي شيء آخر يمكنك التفكير فيه، تعد جداول البيانات طريقة رائعة لتنظيم المعلومات. ولإنشاء مستند جدول بيانات جوجل جديد توجه إلى صفحة جوجل درايف الخاصة بك ثم انقر على زر (جديد) أعلى يمين الصفحة ومن القائمة المنبثقة اختر (جدول بيانات Google). وسيتم الآن فتح التطبيق على كامل الصفحة حيث سيظهر بمظهر مشابه إلى حد كبير برامج الإكسل والكالك، حيث شريط القوائم في الأعلى يليه شريط الأدوات الرئيسي ثم حقل جدول بيانات فارغ مع شريط ورقات العمل أسفله. بداية سيكون اتجاه العمل في التطبيق من اليسار لليمين بشكل افتراضي، يمكنك تعديله ليصبح من اليمين إلى اليسار عبر زر في شريط الأدوات أو من القائمة تنسيق > الاتجاه > ورقة من اليمين إلى اليسار ويمكن إعادة اتجاه العمل بذات الطريقة. تم ترميز الأعمدة بالأحرف اللاتينية A, B, C,…. الخ فيما تم ترميز الصفوف بالأرقام 1, 2, 3, …. الخ. ويسمى المستطيل الواحد ضمن هذا الجدول بالخلية، ولكل خلية عنوان وعنوانها هو تقاطع حرف العمود مع رقم الصف التي تتوضع فيه الخلية فعلى سبيل المثال (كما في الصورة التالية) عنوان الخلية التي في الصورة هو B5 وذلك لوجودها ضمن العمود B والصف 5. وكما تعلمنا في درس مستندات جوجل فإن تسمية المستند في جداول بيانات جوجل يتم بنفس الطريقة حيث يكفي النقر على العنوان أعلى صفحة التطبيق ليسمح لنا بتعديل الإسم ومن ثم نكتب الاسم الذي نريده ونضغط Enter أو ننقر بالفأرة في أي مكان آخر ليتم تطبيق التسمية الجديدة على الملف. وكبقية تطبيقات جوجل المكتبية فلا حاجة لحفظ المستند ولا يوجد في الأصل خيار لحفظ المستند إذ أن مستندات جوجل في مختلف التطبيقات تقوم بحفظ التغييرات مباشرة وبشكل تلقائي، ويتم حفظ المستندات المختلفة الناتجة عن تطبيقات جوجل هذه ضمن سحابة جوجل درايف الخاصة بك ولتغيير موضع حفظ المستند ضمن المجلدات التي أنشأتها سابقًا أو قد تود إنشاءها مباشرة في جوجل درايف عليك النقر على أيقونة المجلد الرمادي بجانب عنوان المستند لتحدد الموقع الذي تريد نقل المستند إليه. بالإمكان فتح ملفات برنامج مايكروسوفت إكسل وليبر أوفيس كالك عبر هذا التطبيق عبر القائمة ملف > فتح ومن ثم ستفتح لنا نافذة تسمح لنا باختيار أحد الملفات الموجودة ضمن سحابة جوجل درايف الخاصة بنا وكذلك يمكننا تحميل الملف من حاسوبنا عبر سحبه إلى مساحة التحميل أو البحث عنه يدويًا ليتم حفظ الملف تلقائيًا في سحابة جوجل درايف الخاصة بنا ومن ثم فتحه ضمن التطبيق. وللتعرف أكثر على واجهة التطبيق سنقوم بتسمية عناصر هذه الواجهة: اسم المستند أيقونة جداول بيانات جوجل وتذهب بك عند النقر عليها إلى صفحة البداية للتطبيق والتي تحوي جميع المستندات التي تم إنشاؤها باستخدام التطبيق شريط القوائم التنبيه إلى حفظ المستند بشكل تلقائي باستمرار (لن يتم حفظ المستند تلقائيًا في حال العمل بدون اتصال بالإنترنت) أزرار المشاركة والتعليقات شريط الأدوات والتنسيقات شريط الصيغ والدوال الأعمدة الصفوف الخلية شريط أوراق العمل هذه نظرة أولية على تطبيق جداول بيانات جوجل وسنتابع في الدروس القادمة تفاصيل أكثر حول كيفية استخدام المزايا المختلفة لهذا التطبيق.
  8. Subtotals أو المجاميع الفرعية هي من خصائص اكسل التي تتيح تطبيق بعض الدوال مثل دالة الجمع Sum، دالة المتوسط Average، دالة الضرب Product وغيرها من الدوال، على قوائم البيانات الفرعية في الجدول الواحد والتي تنتمي إلى نفس المجموعة. وتفيد هذه الخاصية في تلخيص جداول البيانات الكبيرة بخطوات بسيطة جدا. لا يمكن إدراج المجاميع الفرعية في جداول البيانات المنسقة على شكل جدول، كما في الجدول أدناه، وسيكون أمر الإجمالي الفرعي Subtotal غير مفعّل: ولتحويل الجدول إلى مجموعة خلايا عادية، نحدد إحدى الخلايا داخل الجدول، ننقر على أمر تحويل إلى نطاق Convert to Range من تبويب تصميم Design السياقي، ثم ننقر على نعم Yes للتأكيد: سنلاحظ اختفاء أسهم التصفية من عناوين الأعمدة. بعد تحويل الجدول إلى نطاق خلايا عادي، سنقوم بإدراج الإجمالي الفرعي لمعرفة مجموع الرواتب المخصصة لكل قسم من الأقسام. وكما ذكرنا تُطبّق دوال الإجمالي الفرعي على مجموعة البيانات المتشابهة، لذلك سنقوم بفرز البيانات في عمود "القسم" حسب الأبجدية لجمع الأقسام المتشابهة معا. نذهب إلى تبويب بيانات Data وننقر على أمر الإجمالي الفرعي Subtotals: في مربع الحوار الإجمالي الفرعي، نحدد العمود الذي يتم حساب الإجمالي الفرعي عند كل تغيّر في قيمه من حقل At each change in. ونحدد الدالة التي نرغب في تطبيقها على مجموعات البيانات من حقل Use Function، وسنختار دالة الجمع (Sum) لأنّنا نريد إيجاد مجموع الرواتب المخصصة لكل قسم. ومن حقل Add Subtotal to نحدد عمود الراتب لتطبيق دالة الجمع عليه، ثم ننقر موافق OK: ستتم إضافة صف فارغ أسفل كل مجموعة، وعرض الملخّص (المجموع Total في هذا المثال) في هذا الصف: وستتوفّر ثلاث طرق لعرض بياناتك. فعند النقر على الرقم 1 أعلى يمين الورقة (أو أعلى يسار الورقة إذا كان اتجاه الورقة من اليسار إلى اليمين) سيُعرض الإجمالي الكلي Grand Total للرواتب لكافة الأقسام: وعند النقر على الرقم 2 ستُعرض قيم الإجمالي الفرعي لكل قسم مع الإجمالي الكلي: وعند النقر على الرقم 3 ستُعرض تفاصيل جدول البيانات مع قيم الإجمالي الفرعي والإجمالي الكلي: كما يمكننا استخدام الأيقونتين +/- لإظهار/إخفاء تفاصيل الإجمالي الفرعي لكل قسم على حدة: بهذه الطريقة سنوفر الكثير من الوقت بإيجاد المجموع لكل قسم بنقرة واحدة دون أن نضطر إلى تطبيق دالة الجمع لكل قسم في كل مرّة. وكما قمنا باستخدام الإجمالي الفرعي لإيجاد مجموع الرواتب لكل قسم، يمكننا استخدام دوال أخرى من الدوال المتاحة، وإدراج مستويات متداخلة من المجاميع الفرعية. على سبيل المثال، الجدول أدناه: سنقوم بإيجاد مجموع المبيعات (Sum) عند كل تغيّر في عمود "الصنف". ننقر على أمر الإجمالي الفرعي Subtotal من تبويب بيانات Data ونحدد الخيارات المذكورة: وسنقوم بإيجاد متوسط المبيعات (Average) لكل تغيّر في عمود "الصنف" أيضا. لكن هذه المرة نتأكد من إلغاء تأشير الخيار استبدال المجاميع الفرعية الحالية Replace current subtotals لكيلا يتم إلغاء الإجمالي الفرعي السابق الذي قمنا بإدراجه (وهو مجموع المبيعات عند التغير في الصنف): وبذلك سيتم إيجاد متوسط المبيعات عند كل تغيّر في عمود الصنف، بالإضافة إلى المجموع الذي تم إيجاده سابقا: وفي نفس الوقت بإمكاننا إيجاد مجموع المبيعات (Sum) لكل تغيّر في عمود "النوع"، ولا ننسى إلغاء تأشير الخيار Replace current subtotals لكيلا تُزال المجاميع الفرعية السابقة: وستكون النتيجة كالتالي: وبالطبع يمكننا استخدام أيقونات الأرقام و +/- على جانب الورقة لعرض كافة التفاصيل أو الملخصات فقط: وبالإمكان إلغاء جميع المجاميع الفرعية التي قمنا بإدراجها من تبويب: بيانات Data > الإجمالي الفرعي Subtotal > إزالة الكل Remove all
  9. تعلمنا في الدرسين السابقين كيف نوصِّف الأشخاص والمنظمات، وسنتناول في هذا الدرس الأحداث والمراجعات توصيف الأحداث تحدث بعض المناسبات في أوقاتٍ معيّنة، ألن يكون من الجميل أن تستطيع إخبار محركات البحث متى ستقع تلك المناسبات تحديدًا؟ هنالك طريقةٌ لفعل هذا في HTML5. لنبدأ بإلقاء نظرة على الجدول الزمني الخاص بالمحاضرات والكلمات التي سألقيها. <article> <h1>Google Developer Day 2009</h1> <img width="300" height="200" src="http://diveintohtml5.org/examples/gdd-2009-prague-pilgrim.jpg" alt="[Mark Pilgrim at podium]"> <p> Google Developer Days are a chance to learn about Google developer products from the engineers who built them. This one-day conference includes seminars and “office hours” on web technologies like Google Maps, OpenSocial, Android, AJAX APIs, Chrome, and Google Web Toolkit. </p> <p> <time datetime="2009-11-06T08:30+01:00">2009 November 6, 8:30</time> – <time datetime="2009-11-06T20:30+01:00">20:30</time> </p> <p> Congress Center<br> 5th května 65<br> 140 21 Praha 4<br> Czech Republic </p> <p><a href="http://code.google.com/intl/cs/events/developerday/2009/home.html">GDD/Prague home page</a></p> </article> جميع المعلومات التي تخص الحدث موجودةٌ في عنصر <article>، وهو المكان الذي نريد وضع خاصيتي itemtype و itemscope فيه. <article itemscope itemtype="http://schema.org/Event"> رابط URL لنوع الاصطلاحات Event هو http://schema.org/Event، الذي يحتوي أيضًا على جدولٍ يصف خاصيات هذه النوع من الاصطلاحات؛ التي ذكرتُ بعضها في هذا الجدول. الخاصية الشرح name اسم الحدث url رابط لصفحة تفاصيل الحدث location الموقع الذي سيُجرى فيه الحدث الذي يمكن أن يُمثَّل بنوع الاصطلاحات PostalAddress أو Place description وصفٌ قصيرٌ للحدث startDate تاريخ بدء فعاليات الحدث بصيغة ISO endDate تاريخ انتهاء فعاليات الحدث بصيغة ISO duration المدة الزمنية لفعاليات الحدث بصيغة ISO image صورة تعبيرية متعلقة بالحدث اسم الحدث موجودٌ في عنصر <h1>، ووفقًا للنموذج الهيكلي للبيانات الوصفية في HTML5، عنصر <h1> ليس له معالجةٌ خاصةٌ، وستكون قيمة خاصية البيانات الوصفية هي المحتوى النصي للعنصر <h1>، لذا كل ما نحتاج له هو إضافة الخاصية itemprop لكي نُصرِّح أنَّ هذا العنصر يحتوي على اسم الحدث. <h1 itemprop="name">Google Developer Day 2009</h1 نقول بالعربية: «اسم هذا الحدث هو Google Developer Day 2009». يحتوي الحدث على صورة، التي يمكن توصيفها باستخدام الخاصية image، وكما تتوقع، تُعرَض الصورةُ عبر عنصر <img>، وكما في خاصية image في نوع الاصطلاحات Person، الصورة في نوع الاصطلاحات Event هي رابط URL، ولأن النموذج الهيكلي للبيانات الوصفية يقول أنَّ قيمة الخاصية الموجودة في العنصر <img> هي قيمة خاصية src، فكل ما علينا فعله هو إضافة الخاصية itemprop إلى العنصر <img>. <img itemprop="image" width="300" height="200" src="http://diveintohtml5.org/examples/gdd-2009-prague-pilgrim.jpg" alt="[Mark Pilgrim at podium]"> نقول بالعربية: «إحدى الصور المتعلقة بهذا الحدث موجودٌ في رابط http://diveintohtml5.org/examples/gdd-2009-prague-pilgrim.jpg» يأتي بعد الصورة وصفٌ مختصرٌ للحدث، وهو فقرةٌ نصيةٌ من الكلام العادي. <p itemprop="description">Google Developer Days are a chance to learn about Google developer products from the engineers who built them. This one-day conference includes seminars and “office hours” on web technologies like Google Maps, OpenSocial, Android, AJAX APIs, Chrome, and Google Web Toolkit.</p> المعلومة التي تلي الوصف جديدةٌ علينا. تقع الأحداث عمومًا في تواريخ مُحدَّدة وتبدأ وتنتهي في أوقاتٍ معيّنة. يجب أن نضع الأوقات والتواريخ في HTML5 في عنصر <time>، وهذا ما فعلناه. لذا سيُصبِح السؤال الآن: كيف سنتمكن من إضافة خاصيات البيانات الوصفية إلى عناصر <time> السابقة؟ بالنظر مرةً أخرى إلى النموذج الهيكلي للبيانات الوصفية في HTML، سنلاحظ أنَّ هنالك معالجةٌ خاصةٌ للعنصر <time>. فقيمة خاصية البيانات الوصفية هي قيمة خاصية datetime في العنصر <time>. لكن مهلًا، أليست الصيغة المعيارية لخاصيات البيانات الوصفية startDate و endDate هي ISO، مَثَلُهَا كمَثَلِ خاصية datetime في العنصر <time>. وأكرر مرةً أخرى كيف تتوافق ةتتناغم البُنى الهيكلية من أساس HTML مع البُنى الهيكلية التي نُضيفها من نوع الاصطلاحات الخاص بالبيانات الوصفية. عملية توصيف تواريخ بداية ونهاية الحدث عبر البيانات الوصفية سهلةٌ وتتم كالآتي: استخدام HTML استخدامًا صحيحًا في المقام الأول (باستخدام عناصر <time> للوقت والتاريخ)، ومن ثم إضافة خاصية itemprop <p> <time itemprop="startDate" datetime="2009-11-06T08:30+01:00">2009 November 6, 8:30</time> &ndash; <time itemprop="endDate" datetime="2009-11-06T20:30+01:00">20:30</time> </p> بالعربية: «هذا الحديث يبدأ في November 6, 2009 الساعة 8:30 صباحًا، ويستمر إلى November 6, 2009 الساعة 20:30 (بتوقيت مدينة براغ المحلي، GMT+1)». ثم ستأتي خاصية location، التي تقول عنها صفحة تعريف نوع الاصطلاحات Event أنها قد تكون من نوع PostalAddress أو Place. وفي حالتنا، سيُقام الحدث في مكانٍ متخصصٍ بالمؤتمرات، وهو Congress Center في مدينة براغ. وإمكانية توصيفه على أنَّه «مكان» (Place) ستسمح لنا بتضمين اسمه بالإضافة إلى عنوانه. لنبدأ بالتصريح أنَّ العنصر <p> الذي يحتوي على العنوان هو خاصية location لنوع الاصطلاحات Event، وهذا العنصر يحتوي على خاصياتٍ تابعةٍ لنوع الاصطلاحات http://schema.org/Place. <p itemprop="location" itemscope itemtype="http://schema.org/Place"> ثم سنُعرِّف اسم المكان بوضعه في عنصر وإضافة الخاصية itemprop إليه. <span itemprop="name">Congress Center</span><br> وبسبب قواعد المجالات (scoping rules) في البيانات الوصفية، خاصية itemprop=”name”‎ السابقة تُعرِّف اسم المكان في نوع الاصطلاحات Place وليس في نوع الاصطلاحات Event. وذلك لأنَّ العنصر <p> السابق قد صرَّح عن بداية خاصيات المكان (Place)، ولمّا يُغلَق عنصر <p> بعدُ عبر وسم <‎/p>. أيّة خاصيات نُعرِّفها والتي تَتبَع للبياناتِ الوصفيةِ تكونُ من خصائصِ آخرِ نوعِ اصطلاحاتٍ دخلَ المجالَ. يمكن أن تتداخل أنواع الاصطلاحات مثل المكدس (stack). لم نحذف إلى الآن آخر عنصر من المكدس، وهذا يعني أننا ما زلنا ضمن مجال نوع الاصطلاحات Place. في الحقيقة، سيلزمنا إضافة نوع اصطلاحات ثالث إلى المكدس: عنوانٌ (Address) للمكان (Place) الذي سيُقام به الحدث (Event). <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> مرةً أخرى، علينا أن نضع كل جزء من العنوان كخاصية بيانات وصفية مستقلة، لذلك علينا أن نُضيف عددًا من عناصر <span> لكي نضع خاصيات itemprop فيها (إذا رأيتني أشرح الأمور بسرعة هنا، فأنصحك بالعودة إلى الأقسام السابقة وقراءة كيفية توصيف العنوان للأفراد وكيفية توصيف العنوان للمنظمات). <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> <span itemprop="streetAddress">5th května 65</span><br> <span itemprop="postalCode">140 21</span> <span itemprop="addressLocality">Praha 4</span><br> <span itemprop="addressCountry">Czech Republic</span> </span> لا توجد خاصيات إضافية للعنوان، لذا لنغلق عنصر <span> الذي بدأ المجال الخاص بنوع الاصطلاحات Address. </span> علينا الآن إضافة الخاصية geo لتمثيل الموقع الفيزيائي للحدث. سنستخدم نفس نوع الاصطلاحات (GeoCoordinates) الذي استعملناه في القسم السابق لتحديد موقع المنظمة. سنحتاج إلى عنصر <span> لكي يعمل كحاوية، والذي يملك الخاصتين itemtype و itemscope. وضمن العنصر <span> سنضع عنصرَي <meta>، واحدٌ لتحديد إحداثيات العرض (الخاصية latitude) والآخر لتحديد إحداثيات الطول (الخاصية longitude). <span itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates"> <meta itemprop="latitude" content="50.047893" /> <meta itemprop="longitude" content="14.4491" /> </span> بعد إغلاقنا لعنصر <span> الذي يحوي خاصيات الموقع الجغرافي، سنعود إلى مجال Place، لكن لم تعد هنالك أيّة خاصيات لإضافتها إلى Place، لذا سنُغلِق العنصر <p> الذي بدأ مجال نوع الاصطلاحات Place، وبهذا سنعود إلى تعريف الخاصيات التابعة لنوع الاصطلاحات Event. </p> وأخيرًا وليس آخرًا، بقيت الخاصية url، التي يجب أن تكون مألوفةً لك. تُضاف روابط URL المتعلقة بالأحداث بنفس طريقة إضافة الروابط للأشخاص وطريقة إضافة روابط للمنظمات. إذا كنتَ تستعمل HTML استعمالًا صحيحًا (أي وضع الروابط في عنصر <a href>)، فآلية التصريح أنَّ الروابطَ تُمثِّلُ خاصيةَ url في البيانات الوصفية بسيطةٌ جدًا وذلك بإضافة خاصية itemprop إلى تلك العناصر فقط. <p> <a itemprop="url" href="http://code.google.com/intl/cs/events/developerday/2009/home.html"> GDD/Prague home page </a> </p> </article> يجدر بالذكر أنَّك تستطيع توصيف أكثر من حدث في نفس الصفحة. المقتطفات المنسقة من جديد! وفقًا لأداة اختبار البيانات المنظمة من Google، المعلومات التي تحصل عليها عناكب محرك البحث من صفحة الحدث السابقة هي: كما لاحظتَ، جميع البيانات التي وصَّفناها موجودةٌ هنا. لاحظ كيف تُظهِر أداة اختبار البيانات الهيكلية تشعّب أنواع الاصطلاحات؛ هذا التمثيل الرسومي سيساعدك كثيرًا على تخيّل الوضع. هذا رسمٌ توضيحيٌ للطريقة المتوقعة لتمثيل الصفحة في نتائج بحث Google (أكرر مرةً أخرى أنَّ هذا مجرد مثال، فقد يُغيّر Google طريقة تنسيق نتائج البحث في أيّ وقت، ولا توجد هنالك ضمانة أنَّ Google ستُفسِّر البيانات الوصفية في صفحتك من الأساس!). بعد عنوان الصفحة والمُقتطف المولَّد تلقائيًا، سيبدأ محرك Google باستعمال البيانات الوصفية التي أضفناها إلى الصفحة لعرض جدول المحتويات. لاحظ طريقة تنسيق التاريخ «Fri, Nov 6». لم ترد هذه السلسلة النصية في أيّ مكانٍ في عناصر HTML أو خاصيات البيانات الوصفية. لكننا استخدمنا سلسلتين نصيتين هما التاريخ بصيغةٍ معياريةٍ (‎2009-11-06T08:30+01:00 و ‎2009-11-06T20:30+01:00). أخذ Google هاذين التاريخين وعَرِفَ أنَّهما في نفس اليوم، وقرر عرض تاريخٍ وحيدٍ بصيغةٍ قراءتها أسهل. انظر الآن إلى العنوان الفيزيائي. اختار Google أن يعرض اسم المكان + البلدة (locality) + الدولة، لكنه لم يعرض عنوان الشارع المُفصَّل. أصبح هذا ممكنًا لأننا قسّمنا العنوان إلى خمسِ خاصياتٍ مستقلةً –streetAddress وaddressLocality و addressRegion و postalCode و addressCountry– استفاد Google من هذا لعرض عنوانٍ مختصرٍ للمكان. قد يختار مستهلكونَ آخرونَ للمعلوماتِ التي توفرُها عبر البيانات الوصفية استخدامها بطرائقَ مختلفةٍ، إذ سيقررون ما الذي سيَعرضوه وما الذي لن يعرضوه. لا يوجد خيارٌ صائب وخيارٌ خاطئ هنا. عليكَ أن توفرَ أكبرَ قدرٍ من البيانات الهيكلية، وبأكبر دقةٍ ممكنةٍ، واترك الباقي على الآخرين ليفسروه كيفما يشاؤون. توصيف المراجعات هذا مثالٌ آخر عن كيفية جعل الويب (وربما نتائج البحث) أفضل عبر استخدام البيانات الوصفية: مراجعات (reviews) الشركات والمنتجات. هذه مراجعةٌ قصيرةٌ كتبتُها لأحد مطاعم البيتزا المُفضَّلة لدي (بالمناسبة، هذا المطعم حقيقي). لننظر أولًا إلى الشيفرة الأصلية قبل إضافة البيانات الوصفية: <article> <h1>Anna’s Pizzeria</h1> <p>★★★★☆ (4 stars out of 5)</p> <p>New York-style pizza right in historic downtown Apex</p> <p> Food is top-notch. Atmosphere is just right for a “neighborhood pizza joint.” The restaurant itself is a bit cramped; if you’re overweight, you may have difficulty getting in and out of your seat and navigating between other tables. Used to give free garlic knots when you sat down; now they give you plain bread and you have to pay for the good stuff. Overall, it’s a winner. </p> <p> 100 North Salem Street<br> Apex, NC 27502<br> USA </p> <p>— reviewed by Mark Pilgrim, last updated March 31, 2010</p> </article> هذه المراجعة موجودةٌ ضمن عنصر <article>، الذي علينا وضع خاصيتي itemtype و itemscope فيه. رابط URL لمجال أسماء نوع الاصطلاحات الذي سنستعمل هو http://schema.org/Review. <article itemscope itemtype="http://schema.org/Review"> ما هي الخاصيات الموجودة في نوع الاصطلاحات Review؟ أنا ممتنٌ لسؤالك. الخاصية الشرح itemReviewed اسم العنصر الذي ستتم مراجعته. يمكن أن يكون منتجًا أو خدمةً أو شركةً… إلخ. reviewRating التقييم الذي أعطاه المُراجِع للعنصر. يُمثَّل بنوع الاصطلاحات Rating ‏(http://schema.org/Rating) author اسم الشخص الذي كتب المراجعة datePublished تاريخ نشر المراجعة بصيغة ISO name عنوان مختصر للمراجعة reviewBody الوصف الذي كتبه المُراجِع للعنصر أولُ خاصيةٍ بسيطةٌ: itemReviewed هي نصٌ عاديٌ، وقيمتها موجودةٌ في عنصر <h1>، لذا سنضع تلك الخاصية في ذاك العنصر. <h1 itemprop="itemReviewed">Anna’s Pizzeria</h1> سأتجاوز حاليًا قسم التقييم وسأعود إليه لاحقًا في النهاية. الخاصيتان التاليتان سهلتان وبسيطتان. خاصية name هي عنوانٌ مختصرٌ للمراجعة، وخاصية reviewBody هي النص الذي كتبه المراجع لوصف العنصر المُراجَع. <p itemprop="name">New York-style pizza right in historic downtown Apex</p> <p itemprop="reviewBody"> Food is top-notch. Atmosphere is just right for a “neighborhood pizza joint.” The restaurant itself is a bit cramped; if you’re overweight, you may have difficulty getting in and out of your seat and navigating between other tables. Used to give free garlic knots when you sat down; now they give you plain bread and you have to pay for the good stuff. Overall, it’s a winner. </p> يجب أن يكون توصيف العنوان وإحداثيات الموقع الجغرافي مألوفًا لديك الآن (إذا لم تكن تتابع معنا منذ بداية هذه الدروس، فراجع آلية توصيف عنوان شخص، وآلية توصيف عنوان منظمة، وآلية توصيف إحداثيات الموقع الجغرافي من الدروس السابقة). <p itemprop="contentLocation" itemscope itemtype="http://schema.org/Place"> <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress"> <span itemprop="streetAddress">100 North Salem Street</span><br> <span itemprop="addressLocality">Apex</span>, <span itemprop="addressRegion">NC</span> <span itemprop="postalCode">27502</span><br> <span itemprop="addressCountry">USA</span> </span> <span itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates"> <meta itemprop="latitude" content="50.047893" /> <meta itemprop="longitude" content="14.4491" /> </span> </p> في آخر سطرٍ مشكلةٌ شائعة: يحتوي على معلومتين في عنصرٍ وحيدٍ. اسم الشخص الذي كتب المراجعة هو Mark Pilgrim، وتاريخ المراجعة هو March 31, 2010. كيف نستطيع توصيف هاتين الخاصيتين المستقلتين؟ ضعهما في عنصرَين منفصلين وضع خاصية itemprop في كلٍ عنصرٍ. يجدر بنا في هذا المثال أن نضع التاريخ في عنصر <time>، لكي يوفر لنا طريقةً سليمةً لوضع خاصية itemprop المناسبة. لكن اسم المُراجِع يمكن أن يُحتوى في عنصرٍ ليس له قيمةٌ دلاليةٌ مثل <span>. <p>— <span itemprop="author">Mark Pilgrim</span>, last updated <time itemprop="datePublished" datetime="2010-03-31"> March 31, 2010 </time> </p> </article> حسنًا، لنتحدث عن التقييمات. أصعب جزء في توصيف المراجعة هو التقييم. افتراضيًا، التقييمات في نوع الاصطلاحات Rating تكون على مقياس من 1 إلى 5، حيث 1 هو «سيء جدًا» و5 هو «رائع». لكنك ما تزال قادرًا على توصيف التقييم إذا كنت تستخدم مقياسًا مختلفًا، لكن دعنا نناقش المقياس الافتراضي أولًا. <p>★★★★☆ (<span itemprop="reviewRating">4</span> stars out of 5)</p> إذا كنتَ تستعمل مقياسًا افتراضيًا من 1 إلى 5، فالخاصية الوحيدة التي عليك توصيفها هي التقييم نفسه (4 في مثالنا). لكن ماذا لو كنتَ تستعمل مقياسًا مختلفًا؟ كل ما عليك فعله هو التصريح عن حدود المقياس الذي تستعمل. على سبيل المثال، إذا أردت أن تستعمل مقياسًا من 0 إلى 10، فما يزال عليك التصريح عن خاصية itemprop=”rating”‎ لكن بدلًا من إعطاء قيمة التقييم مباشرةً، سيتوجب عليك استخدام نوع http://schema.org/Rating لتعيين أقل قيمة وأعلى قيمة في مقياسك المُخصَّص بالإضافة إلى تحديد قيمةٍ للتقييم الفعلي ضمن ذاك المقياس. <p itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"> ★★★★★★★★★☆ (<span itemprop="ratingValue">9</span> on a scale of <span itemprop="worstRating">0</span> to <span itemprop="bestRating">10</span>) </p> بالعربية: «هذا المنتج الذي أكتب مراجعةً عنه يملك تقييمًا قيمته 9 في مقياسٍ من 0 إلى 10». هل ذكرتُ لك أنَّ البيانات الوصفية المُضافة للمراجعات قد تؤثر على نتائج البحث؟ هذه هي البيانات التي تستيطع أداة اختبار البيانات المنظّمة استخلاصها من مراجعتنا: وهذه صورةٌ توضيحيةٌ لكيف يمكن أن تبدو المراجعة عند عرضها في نتائج البحث: أليس هذا مُبهرًا؟ مصادر إضافية مصادر عن البيانات الوصفية (Microdata): مواصفة Microdata في HTML5 صفحة Microdata في ويكيبيديا مصادر عن المقتطفات المنسقة: صفحة Rich Snippets أداة اختبار البيانات المنظمة موقع schema.org الذي يحتوي معلوماتٍ عن أنواع الاصطلاحات المختلفة التي ذكرناها في هذا دروس هذه السلسلة. ترجمة -وبتصرّف- لفصل «Microdata» من كتاب Dive Into HTML5 لمؤلفه Mark Pilgrim. اقرأ أيضًا المقال السابق: توصيف المنظمات/الشركات باستخدام microdata في HTML5 النسخة العربية الكاملة من كتاب نحو فهم أعمق لتقنيات HTML5
  10. هل وجدتَ موقعك الذي يعتمد على ووردبريس معطلًا وكل ما يمكنك قوله هو «لم أفعل شيئًا! صدقًا!» ومع ذلك سترى رسائل الخطأ التي تقول أنَّ ملفاتك ناقصة أو قاعدة بياناتك تالفة… لا تقلق في حال اختفت المنشورات والتصنيفات فجأةً، أو ظهرت رسائل خطأ مثل: “Warning: require_once(path/to/file.php) [function.require-once]: failed to open stream: No such file or directory in…” أو “Cannot establish database connection.” فسأشرح كيف تحدث مختلف أنواع رسائل الخطأ السابقة، وكيفية حل تلك المشاكل؛ وسأبيّن لك كيف أنَّه من غير المرجّح أن تكون أنت سبب المشكلة. حسنًا، ما هي الفكرة الرئيسية هنا؟ يصعب عادةً معرفة المُسبِّب الرئيسي لأيٍّ من الأخطاء السابقة لوجود عدد كبير (نسبيًا) من المسببات. هذه هي الأسباب الرئيسية التي تؤدي إلى تلف في قاعدة البيانات، أو فقدانها: لم توضَع معلومات الدخول بشكلٍ صحيحٍ في ملف wp-confing.php. حدثت مشكلة في نظام التشغيل. تعطلت إحدى القطع العتادية في الخادوم. حدثت علّة في خادوم MySQL أو مفسر PHP أو في القوالب والإضافات التي تستعملها. استهلاكك للموارد أصبح كبيرًا مما أدى إلى إيقاف محاولة الوصول إلى قاعدة البيانات (مثل PHP memory limit). ربما تعرضتَ إلى هجومٍ إلكتروني، وتم اختراق موقعك. هنالك قائمةٌ أطول للأسباب المحتملة لفقدان ملفاتك: أذونات الملفات غير مضبوطة ضبطًا صحيحًا. الجدار الناري (أو برمجيات الحماية الأخرى) لخادومك يمنع الوصول إلى بعض أجزاء موقعك. أدخلتَ رابط URL للموقع بشكلٍ خاطئ في صفحة «Settings > General» (الإعدادات > عام). الإضافات الخارجية حذفت أحد الملفات أو سببت مشكلةً في المسارات. ثبّتت شهادة SSL ونسيت استبدال روابط الصور. الروابط الدائمة غير مضبوطة ضبطًا صحيحًا. هنالك أخطاء في ملف ‎.htaccess. رُفعِتَ الصور في مجلدٍ خاطئ. تمت مقاطعة عملية رفع المحتوى. هنالك علّة في إضافة أو سكربت أو قالب تستعمله في موقعك. ربما حدثت مشكلة في الخادوم. ربما تعرضتَ إلى هجومٍ إلكتروني، وتم اختراق موقعك. بغض النظر عن المسبب الرئيسي، فهنالك بضع طرائق لإصلاح مشاكل الملفات وقاعدة البيانات. النسخ الاحتياطي والاستعادة منه أسهل طريقة لحل مشكلة تتعلق بقواعد البيانات أو فقدان الملفات هي استعادة نسخة احتياطية من موقعك؛ أما لو لم يكن لديك نسخةٌ احتياطيةٌ لتستعيدها، فهنالك حلولٌ أخرى يمكنك تجربتها. لكن قبل أن تجرِّب الحلول الأخرى، فأنصحك بأخذ نسخة احتياطية لكامل موقعك، حتى لو لم يكن يعمل، لأنَّه قد تسوء بعض الأمور ومن الأفضل أن تكون لديك نسخةٌ أساسيةٌ (حتى لو كانت معطلةً) عوضًا أن تكون خالي الوفاض. ألق نظرة على هذا المقال للمزيد من التفاصيل عن النسخ الاحتياطي: الحماية وإضافات النسخ الاحتياطي في ووردبريس وبعد أن تأخذ نسخةً احتياطيةً من موقعك لتستعملها في حال وقوع كارثة، فأنت جاهزٌ لتبدأ بإصلاح الموقع. إصلاح مشكلة في قاعدة البيانات هنالك عدِّة طرائق يمكنك فيها إصلاح قاعدة البيانات. يمكنك أن تجرب الطريقة الآتية التي تحل أغلبية المشاكل التي تواجه قواعد البيانات. يمكنك إضافة السطر الآتي إلى ملف wp-config.php والموجود في المجلد الجذر لموقعك: define( 'WP_ALLOW_REPAIR', true ); يمكنك إضافة السطر السابق في أي مكان في الملف لكن لا تضفه داخل دالة (على سبيل المثال). أنصحك بوضعه قبل السطر الآتي مباشرةً: /* That's all, stop editing! Happy blogging. */ لتفاصيلٍ إضافيةٍ حول طريقة تعديل ملف wp-config.php فراجع درس «كيف تستخدم FTP لنقل ملفات مدونة ووردبريس الخاص بك؟». بعد أن أضفتَ السطر السابق، فيمكنك زيادة صفحة إصلاح قاعدة البيانات من الرابط الآتي: http://your-site.com/wp-admin/maint/repair.php أو عليك زيارة https://your-site.com/wp-admin/maint/repair.php إذا كانت عندك شهادة SSL. لا تنسَ وضع اسم نطاق موقعك بدلًا من your-site.com. ابقِ في ذهنك أنَّه ليس من الضروري أن تسجِّل دخولك لرؤية هذه الصفحة، لذا بعد انتهاءك من إصلاح قاعدة البيانات، فاحرص على حذف السطر السابق، وإلا فسيستطيع أيُّ شخصٍ الوصولَ إلى تلك الصفحة. عندما تزور الصفحة السابقة، تستطيع أن تضغط على زر «Repair Database» لإصلاح قاعدة البيانات، أو يمكنك إصلاح قاعدة البيانات وتحسينها عبر الضغط على زر «Repair and Optimize Database». بعد إنهاء العملية السابقة، يجب أن يكون موقعك قد أُصلِحَ وأصبحَ جاهزًا للاستعمال. لكن إذا لم تفلح محاولتنا السابقة، فيمكننا إصلاح قاعدة البيانات عبر phpMyAdmin. بعد تسجيل الدخول إلى phpMyAdmin، فاضغط على اسم قاعدة البيانات الموجود في القائمة على يسار الشاشة، ثم بعد ظهور جداول قاعدة البيانات في الصفحة، فمرِّر إلى الأسفل ثم اضغط على مربع الاختيار المُعَنوَن Check All، ثم اختر «Repair table» من القائمة المنسدلة الموجودة بجوار مربع الاختيار. سيتم إصلاح جداول قاعدة البيانات تلقائيًا ويجب أن يعمل موقعك مجددًا. إصلاح الملفات التالفة أو المفقودة لكن ماذا لو كانت ملفاتك هي الناقصة أو التالفة؟ يمكنك إصلاحها أيضًا. إذا ثبّتتَ شهادة SSL في الآونة الأخيرة في موقعك، فقد يبدو أنَّ الصور أمست مفقودةً، ولحلّ هذه المشكلة عليك استبدال روابط الصور لكي تُضمِّن فيها السابقة https. لتفاصيل عن كيفية فعل ذلك، فراجع الدرس «استبدال روابط الصور على مواقع ووردبريس بعد تثبيت شهادة SSL». أما للغالبية العظمى من المشاكل الأخرى، فوضع نسخة جديدة من الملف المعطوب يجب أن يحل المشكلة. يمكنك استخدام FTP للوصول إلى موقعك واستبدال الملفات المعطوبة ووضع أخرى جديدة بدلًا منها، التي يمكنك أن تعثر عليها بتنزيل نسخة من برمجية ووردبريس من موقع WordPress.org. بعد فك ضغط ملف ZIP، يمكنك أن تنقل الملفات الجديدة إلى خادومك، لكن احرص على ترك المجلد ‎/wp-content/‎ دون تعديل، أو قد تعرِّض نفسك لخسارة جميع ملفات الوسائط والصور التي رفعتها إلى موقعك. يمكنك تطبيق ما سبق على الإضافات والقوالب، لكن الفرق الوحيد هو أنَّ عليك تنزيل نسخة حديثة من الإضافات أو القوالب بدلًا من ووردبريس نفسها. إذا فشل كل ما سبق… إذا جرّبتَ كل ما سبق، لكن لم يحالفك الحظ في تشغيل موقعك، فيمكنك أن تجرّب تفعيل نمط التنقيح في ووردبريس، لتفاصيل عن كيفية فعل ذلك، فارجع إلى درس «Debugging WordPress: How to Use WP_DEBUG». ربما تنظر أيضًا في سجل الأخطاء فلربما استطعت التعرف على المشكلة من هناك، ومن ثم ترسلها إلى شركة الاستضافة لتحليل الخطأ. ابحث عن ملفٍ باسم debug.log داخل مجلد ‎/wp-content/‎. إذا لم يحّل أيٌّ مما سبق مشكلتك، فحان الوقت لكي تراسل شركة الاستضافة، فقد تكون المشكلة من ضبط الخادوم، أو ربما أصابته مشكلة. والحل الوحيد لهذه المشكلة هو التواصل مع شركة الاستضافة وإعلامها بالأمر. حسنًا، هنالك حلٌّ أخير لا أحبذه: إذا لم تكن لديك نسخةٌ احتياطيةٌ وليست لديك مشكلة مع فقدان بيانات موقعك بالكامل، فيمكنك حذف الموقع وإعادة تثبيت ووردبريس. الخلاصة إذا طبّقتَ ما ذكرناه في هذا الدرس وحالفك الحظ فيجب أن يعمل موقعك عملًا سليمًا دون أن ترى أيّة رسائل خطأ تُشير إلى ملف ناقص أو قاعدة بيانات معطوبة. ولتجنب الصداع الناجم عن محاولة إصلاح الموقع (إذا صَدَفَ وتعطّل) فأنصحك بأخذ نسخ احتياطية دوريًّا. ترجمة -وبتصرّف- للمقال Repairing Corrupted, Broken or Missing Files and Databases in WordPress لصاحبته Jenni McKinnon.
  11. في 1790، أرادت باريس إبلاغ المسؤولين في قرية سيكس الصغيرة والتي تقع بالقرب من تولوز، أن طلبهم لجعل بلدتهم عاصمة بلديتهم قد رُفض. أرسلوا رسالتهم في مغلف أبيض إلى قرية سيكس. وصلت الرسالة ... لكن في الخامس من يونيو / حزيران 2009 أي بعد مائتين وعشرين عامًا من إرسالها. كيف يمكن لهذا أن يحدث؟ ذهبت الرسالة إلى قرية سيكس Saix، بدلا من سيكس Seix بسبب خطأ صغير في العنوان. انقضت الثورة الفرنسية، وغرقت تيتانيك، واختُرعت السيارات والطائرات، وغيرت الإنترنت وجه العالم، ووصلت الرسالة بعد أن تأخرت قرنين. قد يكون للأخطاء الصغيرة في البيانات عواقب وخيمة. إلى جانب الخطأ الإنساني، قد ننسى أحيانًا ربط البيانات بأصحابها. كثيرًا ما يقوم الناس بالتغيير في حياتهم، فهم يغيرون الوظائف والعناوين وأرقام الهواتف، وينجبون أطفال، ويتم اختراق حساباتهم، ويكبرون. ومع كل هذه التغييرات، تفتقد بياناتهم الدقة. ونتيجة لذلك، يصبح من الصعب تقديم خدمة جيدة. وهكذا يصبح الجزء الشائك هو كيفية التأكد من أن بياناتك آمنة من هذه المشاكل؟ البيانات الموثوقة هامة جدًا لإضفاء الطابع الشخصي المناسب المعلومات هي واحدة من أقوى الأدوات التي يمكن أن تستغلها الشركات - بفضل المعلومات التي يتم استخراجها من البيانات التي تم جمعها، يمكننا أن نفهم عملائنا ومنافسينا، وموضعنا في السوق وتطوير المنتجات والاستراتيجيات والتكتيكات كي ننمو ونتطور في عالم الأعمال. وإذا كانت هذه البيانات غير صحيحة، أو إذا لم يكن لدينا إمكانية الوصول إليها، فإننا نفقد الميزة التي تنتجها. كما نفقد إمكانية استخدام تلك المعلومات القيمة. في بيئة [KY1] البرمجيات المؤجرة ، يمكن للتفاعل الشخصي تحديد ما إذا كان العميل سيبقى معك أو يذهب إلى منافسك. فتصبح البيانات الموثوقة هي مفتاح إضفاء الطابع الشخصي المناسب. ثلاث طرق للحفاظ على سلامة بيانات عملاءك خلال المعرض الكبير للاتحاد الوطني للتجزئة في 2017، أجرت فورستر للاستشارات مقابلات مع حوالي 80 من محترفي الصناعة حول الاستثمارات التقنية الرئيسية لعام 2017. وكانت النصيحة الأكثر ترددًا واضحة: "التركيز على التكنولوجيا التي تخلق اتصالات شخصية مع العملاء، وتقلل من نقاط العناء أثناء رحلة المتسوق، وتُحسّن من الكفاءات التشغيلية". ولهذا السبب، فإنه من الأهمية بمكان أن تحتوي أدواتنا على بيانات اتصال حديثة ودقيقة للعملاء. وإليك كيفية تحقيق ذلك: 1. العناية المنتظمة وجدت إحدى الدراسات أن قواعد البيانات في العديد من الشركات في المملكة المتحدة تحتوي على حوالي 30 في المئة من السجلات المكررة. السجلات المكررة مكلفة - فعندما بدأت هذه الشركات في تركيب أنظمة إدارة علاقات العملاء، أدركوا أنهم كانوا يدفعون لإرسال أكثر من بريد إلكتروني لنفس المتلقي، وأن فريق الدعم يرتبك في كل مرة يحتاج أحد العملاء ذوي السجلات المتكررة للمساعدة. أصبح العديد من الشركات في الوقت الحاضر يهتم بالعناية المنتظمة للأنظمة المركزية لإدارة علاقات العملاء. فهي تقوم بتنظيف التكرارات والبيانات القديمة وما إلى ذلك. ولكن في كثير من الأحيان لا تحظى أدوات الدعم لدينا على نفس المعاملة. وعليه، فإن استخدام أدوات لتكرار التنظيف للأنظمة المركزية لإدارة علاقات العملاء لبيئات أخرى في رزم البرمجيات المؤجرة الخاصة بك قد يكون حلًا سهلًا وفعالًا لتحقيق ذلك. 2. ضمان توفر البيانات ستفقد الكثير من المال إذا تمكنت من الحصول على بيانات ذات جودة عالية ولكن لا يمكنك الوصول إليها في اللحظة المناسبة. عندما نتحدث عن "توفر البيانات"، فإننا نعني البيانات الصحيحة الموجودة على بُعد بضع نقرات من الأشخاص الذين من المفترض أن يصلوا إليها. إذا كنت تقدم الدعم عبر البريد الإلكتروني لعملائك ، فلعلك لاحظت على الأرجح كيف أن العميل نفسه يكتب من وقت لآخر من عنوان بريد إلكتروني مختلف. ينطوي هذا على تفسير واضح: لا يساور معظم العملاء قلق بشأن عنوان البريد الإلكتروني الذي يستخدمونه للاتصال بمزودي الخدمة. قد يستخدمون البريد الإلكتروني الشخصي، أو بريد العمل، أو بريدًا مهملًا، أو بريد وظيفي داخل شركتهم، وهكذا. ما لا يدركونه هو أن "عنوان المرسل" هو المرجع الذي تقوم من خلاله أداة الدعم بتجميع المحادثات السابقة أو الجارية. إذا لم تكن أداة الدعم لديك على دراية ببيانات الاتصال الكاملة، فستنشئ محادثات جديدة بدلًا من ربطها بالبيانات السابقة. ما له من آثار ضارة على جودة دعمك لعملائك. لتقديم خدمة كاملة لعملائنا، لا يجب أن يكون لدينا فقط رؤية للمحادثات ذات الصلة، ولكن أداة دعم تعرض معلومات العملاء الأكثر صلة في النسق، مثل معرف الحساب وحالة العميل وبيانات الاتصال الكاملة لإدراك المتناقضات. عندما تكون كل هذه البيانات على نفس الشاشة، يمكن لفريقك الحصول على الصورة الكاملة للعميل. 3. تقييد الدخول القيود التي تحد من الوصول إلى قاعدة البيانات تضمن أن الموظفين المؤهلين فقط يمكنهم إنشاء سجلات بيانات جديدة. يمكن أن يكون هذا سهلًا نسبيًا لوضع هذه اللوائح في الشركات الصغيرة حيث يوجد عدد قليل فقط من الموظفين لديهم اتصال مباشر مع العملاء. أما في الأنواع الأخرى من الشركات، حيث يتم إدخال البيانات بشكل مستمر بواسطة عدة وكلاء أو نقاط بيع، فمن غير المثمر إلى حد ما وضع الكثير من القيود. ولكن دون قيود، نحن أكثر عرضة للخطأ البشري. بعد إدخال البيانات الأولى، إذا كان هناك نوعان من التطبيقات الأخرى في رزمة البرمجيات المؤجرة الخاصة بك والتي يجب عليك أيضًا إدخال البيانات إليها، فإنه يصبح لديك خطر ثلاثي لوقوع الأخطاء. الحل الأفضل في هذه الحالات هو التأكد من أنك تستطيع الاعتماد على البرامج الجيدة التي تعطي الأولوية للتطبيقات أو المنصات التي تعتمد عليها أكثر من غيرها. يجب أن تكون هذه البرمجيات قادرة على رسم خريطة الحقول بطريقة ذكية بين قوائم جهات الاتصال المختلفة، ومزامنتها، ويفضل أن يكون ذلك آنيًا. البيانات الجيدة تستحق العناء تضمن البيانات الموثوقة معلومات موثوقة، وبالتالي القدرة على تقديم خدمة عملاء ذات طابع شخصي بدقة. من الصعب الحصول على بيانات موثوقة، ويجب استثمار الكثير من الوقت والجهد في جمعها واستخلاص معلومات وثيقة الصلة الموجودة فيها. لحسن الحظ، لدينا الآن أدوات متاحة للحصول على بيانات عالية الجودة والتي توفر لنا اللبنات الأساسية لنجاح أعمالنا. ترجمة –وبتصرّف- للمقال Why Data Integrity is Crucial in Customer Service لصاحبته Claudia Martinez حقوق الصورة البارزة محفوظة لـ Freepik
  12. تحدثنا في المقالات السابقة من هذه السلسلة عن مفهوم الإنفوجرافيك عمومًا موضحين أهميته وأنواعه، بعدها انتقلنا للحديث عن أهم البرامج والأدوات المستخدمة في إنشاء الإنفوجرافيك وقدمنا لكم مجموعة متنوعة من الخيارات في هذا المجال. ثم تناولنا هيكلية الإنفوجرافيك وأهم الأشياء التي ينبغي تضمينها لأي إنفوجرافيك وكيفية التعامل مع الأبعاد والألوان، بعدها تطرقنا إلى مراحل إنشاء الإنفوجرافيك. وحاولنا خلال هذه السلسلة تقديم معلومات كافية تساعد المختصين في مجال التسويق أو رواد الأعمال وأصحاب المواقع والمستقلين، على التعاطي مع الإنفوجرافيك بصورة صحيحة وأكثر فاعلية، بالإضافة إلى تقديم فكرة متكاملة حول الموضوع. وفي هذا الجزء "الأخير" من السلسلة سنستعرض معكم بعض النصائح والإرشادات الهامة والنهائية لإنشاء إنفوجرافيك فعال ويحقق الفائدة المرجوة منه، وستكون هذه النصائح في جميع النقاط التي قمنا بتغطيتها في المقالات السابقة. فدعونا نبدأ. البساطةسأبدأ بهذه النصيحة لأنها تشمل كل الأجزاء المتعلقة بالإنفوجرافيك، من اختيار الموضوع وجمع المحتوى والبيانات إلى التصميم والنواحي الفنية. في أي خطوة تتخذها عند إنشاء الإنفوجرافيك تذكر هذه الكلمة "البساطة"، فالمستخدمين يرغبون بقراءة الإنفوجرافيك ظنًا منهم أنه يُقدم طريقة أبسط في شرح الموضوع، وبالتالي حين تغيب هذه الميزة عن الإنفوجرافيك لن تحقق أي فائدة تُذكر. صدقني لن تستفيد أي شيء. مثلاً وضوح النص، عدم حشو كمية كبيرة من البيانات في مساحة صغيرة، تجنب إضافة نصوص لا فائدة منها، الترتيب المنطقي والخالي من الفوضى، استخدام الألوان بطريقة صحيحة، استخدام أبعاد مناسبة، تجنب البهرجة الفنية، كل هذه الأشياء تعكس بساطة الإنفوجرافيك. لذا عند إضافتك لأي شكل أو صورة أو بيانات إلى داخل الإنفوجرافيك حاول أن تسأل نفسك، هل هذه الإضافة ستعمل على تشويش الإنفوجرافيك وجعله أكثر تعقيدًا، أم ستساهم في تبسيطه؟ المعلومات والبياناتالنصيحة الوحيدة التي يمكنني أن أخبرك بها عند الحديث عن البيانات والمعلومات المدرجة في الإنفوجرافيك هي أن تكون هذه المعلومات مقنعة، وافية، موثوقة ومثيرة للجدل. ربما جميعكم يتفق معي على البنود الثلاث الأولى، لكن لماذا مثيرة للجدل؟ حسنًا، لا شك أن الكثير منا يعلم بأن المحتوى التقليدي مثل "المقالات أو مقاطع الفيديو" الذي يتناول مواضيع مثيرة للجدل هو الأكثر انتشارًا عبر الشبكات الاجتماعية، وبالتالي فإن تناول هذه المواضيع عبر الإنفوجرافيك سيضمن لك تحقيق نسب مشاركة أقوى عبر الإنترنت، وستخلق فرصة أكبر للنقاش والردود بين المستخدمين. دعوني أضرب لكم هذا المثال البسيط لتوضيح الفكرة: نفترض أنني أعمل في تغطية ما يتعلق بالرياضة العالمية بإحدى المدونات أو المواقع أو عبر صفحة تواصل اجتماعي، وأرغب باختيار موضوع لإنفوجرافيك يحقق شروط المعلومات الأربعة التي ذكرتها، بكل بساطة سأقوم بعقد مقارنة بين لاعبين في أندية متنافسة، مثلاً ميسي ضد رونالدو، أو بين أندية متنافسة مثل تشيلسي ضد أرسنال، وبالتالي سأقوم بجمع معلومات موثوقة ورسمية لإدراجها في الإنفوجرافيك وبنفس الوقت سأقوم بعقد المقارنة لمعلومات مقنعة مثل متوسط عدد الأهداف في كل مباراة، الألقاب التي حصل عليها كل لاعب وهكذا، لا أن أذهب لعقد مقارنة في أمور فرعية قد لا تعكس مهارة اللاعب مثل قيمة الصفقة الخاصة بكل منهما، وهكذا ينطبق الأمر على بقية المواضيع. بمعنى، ابحث عن مسألة مثيرة للجدل ضمن تخصصك، ثم دعمها بمعلومات موثوقة ومقنعة ووافية، بعدها سيتكفل المستخدمين بنشر الإنفوجرافيك بالنيابة عنك، ولا بأس لو تلقيت بعض الانتقادات من قبل المتعصبين، فهذا سيدل على نجاحك في تنفيذ الفكرة بالصورة المطلوبة. تحديد الغرض والجمهورلا تبدأ بإنشاء الإنفوجرافيكس لأن الجميع يفعل ذلك، فليس لذلك أي أهمية. ولا يعني اختيار الموضوع المناسب وطرحه بواسطة الإنفوجرافيك، أنك تسير في الاتجاه الصحيح. ما تحتاجه قبل إنشاء أي إنفوجرافيك هو أن تأخذ دائمًا خطوة إلى الوراء، وهي تحديد الغرض والهدف من الإنفوجرافيك والرسالة التي ترغب بإيصالها عند اختيارك للموضوع. فالأفكار والمواضيع التي يُمكن أن تتناولها لا نهائية ومتجددة باستمرار، لذلك لن تجد مشكلة إطلاقاً عند إيجاد فكرة مناسبة، الأهم أن تحدد الهدف من وراء هذه الفكرة. من المهم أيضاً أن تحدد الجمهور المستهدف بصورة جيدة، وربط الأهداف الخاصة بالإنفوجرافيك مع الاتجاهات الخاصة بالجمهور، اسأل نفسك قبل تحديد الهدف من الإنفوجرافيك: ما الذي أريده من المستخدم بعد انتهائه من قراءة الإنفوجرافيك؟ ما الشيء الذي أرغب بأن يفكروا به؟ ما هي المعلومة التي أرغب بوصولها لجميع القراء وبصورة واضحة؟ حاول أن تطرح الأسئلة على الدوام. لا تنشر إنفوجرافيك لجمهور غير مهتم بالموضوع ولا تعنيه المعلومات الواردة بداخله، وفي عالم الإنترنت عليك أن تفترض دائمًا انشغال المستخدم، فهو يريد أن يتخطى ما تطرحه لأشياء أخرى وبسرعة، وبالتالي فإن تحديد الأهداف الخاصة بالإنفوجرافيك تساعدك على إنشائه بصورة تضمن جذب اهتمام القارئ المستهدف. تمثيل المحتوى بصورة مفهومةتعتبر مرحلة تمثيل المحتوى على هيئة إنفوجرافيك من أصعب المراحل بالنسبة للكثير من المستخدمين، فهي تحتاج إلى اختيار دقيق لشكل التصميم العام، ومن الملاحظ أن الكثير من الإنفوجرافيكس تحاول التركيز على الناحية الفنية أكثر من تمثيل المحتوى بصورة مفهومة، وبالتالي قد يخلق المستخدم لنفسه العديد من الصعوبات عند التعامل مع التصميم سواءً كان التصميم عبر متخصص في هذا المجال أو من خلال المستخدم نفسه وذلك عبر الأدوات التي سبق وذكرنها في الجزء الثاني. وفي الحقيقة فلا يجب أن تشغل نفسك بمسألة التصميم بصورة زائدة عن الحد، ما عليك فعله هو التفكير في كيفية إيصال المحتوى بصورة مفهومة وسلسلة للقارئ، وأشرنا أكثر من مرة إلى أن الوظيفة الأساسية للإنفوجرافيك هي جعل المعلومات بسيطة ومفهومة، وبالتالي ما حاجتي بإنفوجرافيك مبهر ورائع من الناحية البصرية لكنني لم أفهم كلمة واحدة بداخله؟ وظيفة المصمم لا تقتصر على جعل الإنفوجرافيك يظهر بصورة جميلة ومذهلة من الناحية الفنية، ما يجب التفكير به عند التصميم وتمثيل المحتوى هو جعل البيانات سهلة للفهم بأقصى درجة ممكنة. ولا شك أن استخدام الألوان والأشكال المناسبة والصور يلعب دورًا هامًا عند تصميم الإنفوجرافيك، لكن الأهم من ذلك هو خلق توازن منطقي بين الناحية الفنية وعملية استيعاب المحتوى بصورة سلسلة. تقسيم الإنفوجرافيكوأعني بذلك ضرورة وجود مقدمة، ووسط، ونهاية للإنفوجرافيك. هذه الطريقة تساعد على ظهور الإنفوجرافيك بصورة أكثر احترافية، وتدفع المستخدم لقراءة كل المعلومات الواردة به حتى نهايتها. فمثلاً، ليس من المنطقي أن تبدأ إنفوجرافيك حول أسباب ظاهرة الاحتباس الحراري بدون طرح مقدمة صغيرة عن الظاهرة، تخيل أنك استبدلت المقدمة بهذه العبارة "أكسيد النيتروز أصبح أعلى بحوالي 18% من مقدار تركيزه قبل الثورة الصناعية" أو استبدلتها بمخطط يوضح ارتفاع نسبة الغازات عبر السنوات الماضية، على الأرجح حينها أنني سأغلق الصفحة وأذهب لتناول عصير بارد للتخفيف من حدة الصدمة. لا تعتمد على رأيك فقط عند انتهائك من إنشاء الإنفوجرافيك لا تتعجل بنشره مباشرة، بل حاول أن تستشير بعض من لديهم معرفة داخل هذا المجال، أو يُمكنك معرفة رأي أصدقائك كمستخدمين عاديين، والأشياء التي لم تعجبهم به. وتذكر دائمًا، أن هناك خيط رفيع بين "معلومات كافية" و"معلومات زائدة عن الحد"، فقد ترى أن محتوى الإنفوجرافيك يتضمن معلومات مناسبة، بينما يرى غيرك أن المعلومات كثيرة ومرهقة، لذا حاول أن تتلقى بعض ردود الأفعال حول الإنفوجرافيك قبل نشره، وهل هناك أشياء مشتركة في هذه الردود، بعدها عليك إعادة تقييم الإنفوجرافيك وفقاً لهذه الملاحظات. التسويق باحترافيةأشرنا في مقال سابق من هذه السلسلة على ضرورة الإشارة لعلامتك التجارية في الإنفوجرافيك وإضافة روابط مهمة قد تفيد المستخدم في نهاية الإنفوجرافيك، لكن هذا لا يعني أن تقوم باستخدام علامتك التجارية بصورة صارخة، والإفراط في التسويق لها من خلال الإنفوجرافيك، وتذكر أنك تقوم بتقديم محتوى مفيد لجمهورك، لا إغراقهم بأشياء ليست مرتبطة بالموضوع، فمثلاً هناك من يضع علامة مائية خاصة بموقعه خلف الإنفوجرافيك وبصورة مؤثرة على البيانات الواردة بداخلة، ويدافع عن ذلك بأن لصوص المحتوى يقومون بسرقة الإنفوجرافيك، وبالتالي فهو يضطر لفعل ذلك. حسنًا، يسعدني أن أقول لك، تبًا لك وتبًا لأولئك اللصوص، لأن لا أحد سيتابع ما تقدمه عبر هذه الإنفوجرافيكس المشوهة واللعينة. وعلى العكس تمامًا، يقدر المستخدمون الترويج لعلامتك التجارية بصورة أنيقة وبسيطة، ويدفعهم ذلك لمشاركة الإنفوجرافيك مع أصدقائهم عبر الشبكات الاجتماعية، طالما أن المحتوى المطروح مميز ومفيد، لذلك لا تُفكر كثيرًا في كيفية إظهار علامتك التجارية بواسطة الإنفوجرافيك، فكر في محتوى عالي الجودة، وبعدها سيشير الجميع إلى علامتك التجارية. أخيرًا، من الضروري أن تعلم بأن استخدام الإنفوجرافيك لا يعني حل أي مشكلة من المشاكل التي تواجهك أثناء عملية التسويق، وعلى الرغم من أن الإنفوجرافيك يحظى بشعبية واسعة ويجذب الكثير من الجمهور إلا أن استخدامه بصورة مكثفة، وازدياد أعداد الإنفوجرافيكس المنشورة يومياً قد يؤدي إلى تراجع اهتمام المستخدمين بهذه النوعية من المحتوى مع مرور الوقت، وبالتالي يجب عليك دائمًا كمسوق إيجاد وسائل وطرق بديلة عند حدوث شيء كهذا، ومن الطبيعي أن يحدث. وبالطبع لا أقصد أنه في مرحلة من المراحل يجب علينا عدم استخدام الإنفوجرافيك، بل ما أقصده هو استخدام الإنفوجرافيك باعتدال وبدون مبالغة، وبشكل يتوافق مع استراتيجية التسويق التي تتبعها. حقوق الصورة البارزة: Designed by Freepik.
  13. تحليلات ماذا-لو هي من الخصائص الرائعة والمفيدة لعمل توقعات دقيقة ومعرفة التأثيرات التي تحدث على النتائج نتيجة تغيير في قيم المدخلات. تندرج تحت تحليلات ماذا-لو في اكسل ثلاث أدوات؛ السيناريوهات Scenarios وجداول البيانات Data Tables التي تتشابه من حيث مبدأ العمل. حيث تحدد النتائج المتوقعة بصورة دقيقة اعتمادا على مجموعة من المدخلات. والأداة الثالثة هي الاستهداف Goal Seek التي يعاكس عملها عمل الأداتين سابقتي الذكر. حيث تقوم بتحديد قيم المدخلات اعتمادا على نتيجة معيّنة. الاستهداف Goal Seek يمكنك تخيّل عمل هذه الأداة على أنّه معكوس عمل الصيغ. ففي الصيغة نقوم بإدخال مجموعة من القيم المعرّفة لنتوصل إلى نتيجة مجهولة. أما في الاستهداف فالنتيجة معلومة، ولكن نريد معرفة المدخلات التي توصلنا إلى هذه النتيجة. مثال: لنفترض أننا نعمل على عدد من المشاريع خلال الشهر: وفي هذا الشهر هدفنا تحقيق ربح مقداره 1750$. المطلوب هو معرفة مقدار الربح الذي يجب أن نحققه من "المشروع 10". عند استخدام الاستهداف، نحتاج إلى تحديد خلية تحتوي على الصيغة أو الدالة التي يتم التنبؤ بالمدخلات على أساسها. سنستخدم هنا دالة الجمع SUM لإيجاد إجمالي الربح لجميع المشاريع (من ضمنها "المشروع 10" حتى وإن كانت قيمته مجهولة، وسيتم اعتبارها صفر لأنّ الخلية B10) فارغة: كما يظهر من نتيجة الجمع أننا حققنا لحد الآن ربحا مقداره 1537$، لكن ما مقدار الربح الذي يجب تحقيقه من المشروع العاشر للوصول إلى 1750$؟ سنستخدم الاستهداف لمعرفة ذلك. نُحدّد الخلية التي نريد تغيير قيمتها، وهي الخلية B11 في هذا المثال التي تحتوي على المجموع الذي نريده تغييره إلى 1750$، ثم نذهب إلى تبويب: بيانات Data > تحليل ماذا لو What if analysis > الاستهداف Goal Seek في حقل تعيين الخلية Set Cell، نحدد الخلية التي تحتوي على الصيغة التي نريد تحليلها، وهي الخلية B11 التي حددنها في الخطوة السابقة. في حقل إلى القيمة To Value نحدد القيمة التي نريد أن تقوم الصيغة بإرجاعها، أي الهدف، وهي 1750 في هذا المثال. وفي حقل بتغيير الخلية By changing cell نحدد الخلية التي نريد تغيير قيمتها لحين الوصول إلى الهدف، وهي الخلية B10 في هذا المثال: بعد أن ننقر موافق OK، سيقوم البرنامج تحليل الصيغة وتجربة عدة قيم حتى يصل إلى القيمة المستهدفة. وكما يبدو من نتيجة هذا المثال، نحتاج إلى تحقيق ربح مقداره 213$ من المشروع العاشر كي يصبح إجمالي الربح لهذا الشهر مساوٍ لـ 1750$: ننقر موافق OK لحفظ النتيجة، أو إلغاء Cancel لإلغاء عملية الاستهداف. جداول البيانات Data Tables باستخدام جداول البيانات يمكنك استبدال متغيّر أو متغيّرين فقط في الصيغة ولعدد غير محدود من القيم لكي يتم إجراء تحليلات ماذا-لو عليها والحصول على النتائج المتوقعة على شكل جدول. جداول البيانات بمتغير واحد إذا كانت لديك صيغة (أو أكثر) تحتوي على متغيّر واحد وترغب في توقّع التغييرات التي تحدث لبياناتك إذا تغيّرت قيم هذا المتغيّر. قم بإدخال القيم التي تريد حساب نتائجها على شكل صف أو عمود واستخدم جدول البيانات ليكمل المهمة. مثال: لقد تم إيجاد مقدار العمولة بضرب النسبة المئوية للعمولة في المبيعات. المطلوب هو حساب العمولة إذا تغيّرت نسبة العمولة حسب القيم المدخلة (10%، 11%، 12%...) نلاحظ في شريط الصيغة أنّ الصيغة تحتوي على متغيّرين؛ B3 وهي المبيعات، وB4 وهي نسبة العمولة، لكن متغيّرا واحدا هو الذي سنقوم بتحليله، وهو نسبة العمولة. سنقوم أولا بنسخ الصيغة إلى الخلية B8 بجعلها مساوية للخلية B5 التي تحتوي على الصيغة الأصلية: نقوم بتحديد الجدول في ورقة العمل ثم نذهب إلى تبويب: بيانات Data > تحليلات ماذا-لو What-if analysis > جداول البيانات Data Table ما نريده هنا هو استبدال قيم نسبة العمولة في الخلية B4 بالقيم الموجودة في الخلايا من A8 إلى A14، لذلك سنحدد هذه الخلية (B4) في حقل Column input cell: ننقر موافق OK وسنحصل على النتائج بلمحة! جداول البيانات بمتغيرين بنفس مبدأ عمل الجداول ذات المتغير الواحد، تُستخدم لمعرفة التأثير على النتائج الذي يحدث عند تغيّر قيمة متغيّرين في الصيغة. مثال: في الجدول أدناه نريد معرفة قيمة العمولة فيما إذا تغيّرت قيم نسبة العمولة والمبيعات أيضا: سنقوم بنسخ الصيغة من الخلية B5 إلى الخلية التي تمثل تقاطع صف المبيعات وعمود نسبة العمولة (A8): نحدد الخلايا من A8 حتى الخلية K14، ثم نذهب إلى تبويب: بيانات Data > تحليلات ماذا-لو What-if analysis > جداول البيانات Data Table في حقل Row input table سنحدد الخلية B3 لأنّنا نريد استبدال القيم في هذه الخلية بقيم المبيعات في الصف 8. وفي حقل Column input table سنحدد الخلية B4 لأننا نريد استبدال القيم في هذه الخلية بقيم نسبة العمولة في العمود A: ننقر موافق OK وسيمتلئ الجدول على الفور: ملاحظة: جداول البيانات تعمل مع متغيّرين فقط، لكن تحلل العدد الذي تريده من قيم هذه المتغيّرات. أما السيناريوهات فيمكن أن تعمل مع أي عدد من المتغيّرات لكن لا تستوعب سوى 32 من قيم هذه المتغيّرات.
  14. لا يخلو تعاملنا مع جداول البيانات من عمليات التنسيق التي نطبقها على الخلايا أو محتواها، أو كليهما معًا، لكي نحصل على جداول تفاعلية وسهلة الفهم. لذا يتيح كالك طرقًا مختلفة لتنسيق البيانات، حيث يمكن تعريف التنسيق على أنّه جزء من نمط الخلية لكي يتم تطبيقه تلقائيًا، أو يطبق يدويًا على الخلية. إدخال البيانات في سطور متعددة في بعض الأحيان نحتاج إلى إدخال البيانات في سطور متعددة في نفس الخلية للحفاظ على عرض موحّد لجميع الأعمدة، أو لمجرد أغراض ترتيبية. في هذه الحالة يمكننا إنشاء فواصل السطور يدويًا، أو تفعيل خاصية التفاف النص التلقائي. إدراج فواصل السطور يدويًا لإدراج فاصل سطور يدويًا أثناء إدخال البيانات في الخلية، اضغط على مفتاحي الاختصار Ctrl+ Enter للانتقال إلى السطر التالي: لن يتغير عرض الخلية عند إدراج فاصل سطور يدويًا، ويمكن أن يحدث تداخل بين نهاية الخلية والنص إذا كان النص في السطر طويلًا. لذا يجب أن تغير عرض الخلية يدويًا أو تغير موضع فاصل السطور لكي تمنع تداخل النص مع نهاية الخلية. الالتفاف التلقائي تتيح خاصية الالتفاف التلقائي نقل جزء من النص إلى السطر التالي تلقائيًا عندما يتجاوز طوله عرض الخلية/العمود. ولتفعيل هذه الخاصية قم أولًا بتحديد الخلية أو نطاق الخلايا وانقر على التحديد بزر الفأرة الأيمن ثم اختر نسق الخلايا Format Cells: من مربع الحوار تنسيق الخلايا، اذهب إلى تبويب محاذاة Alignment ثم قم بتأشير الخيار لف النص تلقائيًا Wrap text automatically (تحت مجموعة الخصائص Properties) وانقر على حسنًا OK: وبذلك سيتم بدء سطر جديد بشكل تلقائي عند إدخال نصوص طويلة ويُمنع التداخل بين حدود الخلية ومحتواها: تقليص حجم النص إذا لم تكن ترغب في إدخال البيانات في سطور متعددة، مع الحفاظ على حجم الخلية في نفس الوقت، بإمكانك تفعيل خاصية تعديل حجم النص تلقائيًا وملائمته مع حجم الخلية. للقيام بذلك، انقر بزر الفأرة الأيمن على الخلية واختر نسق الخلايا. من مربع الحوار تنسيق الخلايا، اذهب إلى تبويب محاذاة وقم بتأشير الخيار تقليص لملائمة حجم الخلية Shrink to fit cell size ثم انقر على زر حسنًا: في المرة القادمة التي تقوم فيها بإدخال البيانات في الخلية، سيتم تقليل حجمها تلقائيًا لاحتوائها داخل حدود الخلية إذا كان حجم البيانات كبيرًا (كما نلاحظ في الصورة أدناه): ملاحظة: لا يمكن تفعيل هذه الخاصية قبل إلغاء تفعيل خاصية الالتفاف التلقائي. تنسيق الأرقام تتوفر العديد من تنسيقات الأرقام المختلفة التي يمكن تطبيقها على الخلايا باستخدام شريط أدوات التنسيق: قم أولًا بتحديد الخلية التي تحتوي على رقم، ثم انقر على الأيقونة ذات الصلة بالتنسيق المرغوب. يمكنك مثلا تنسيق الرقم كعملة، نسبة مئوية، أو كتاريخ، كما يمكنك زيادة وإنقاص المراتب العشرية: ويمكنك الوصول إلى المزيد من تنسيقات الأرقام أو التحكم في خيارات كل تنسيق بواسطة مربع الحوار تنسيق الخلايا (تنسيق Format> خلايا Cells)، وبالتحديد تبويب الأرقام Numbers: على سبيل المثال، بإمكانك عرض التاريخ بشكل مختلف باختيار أحد التنسيقات من مجموعة التاريخ Date، أو التحكّم في عدد المنازل العشرية والأصفار البادئة، أو تمييز الأرقام السالبة باللون الأحمر من مجموعة الرقم Number...إلخ. يمكنك استكشاف الخيارات التي يمكن تخصيصها لكل نوع من البيانات من هذا التبويب. ملاحظة: تتحكم إعدادات اللغة بالإعدادات المحلية لمختلف التنسيقات كتنسيق الوقت أو رمز العملة: تنسيق الخطوط من شريط أدوات التنسيق يمكن أيضًا تنسيق نوع الخط، لونه، وحجمه وغيرها من خصائص الخط المعروفة. وكما اعتدنا عند تطبيق أي أمر أو إجراء أي تغيير على محتواها، يجب أولًا أن نقوم بتحديد الخلية/نطاق الخلايا ثم نجري التعديلات من مجموعة أدوات تنسيق الخط: ويمكنك الوصول إلى المزيد من تأثيرات الخطوط من خلال مربع الحوار تنسيق الخلايا، وبالتحديد من تبويب تأثيرات الخطوط Font Effects. إذ تستطيع إضافة ظل أو حدود للنص، جعل النص بارز أو محفور، إضافة سطر بلون معين فوق أو تحت النص... إلخ. ويمكنك معاينة التغييرات التي تجريها على النص قبل تطبيقها من مربع المعاينة في الجزء السفلي من مربع الحوار: بالإضافة إلى ذلك، يمكنك تغيير اتجاه النص وتدويره من نفس مربع الحوار من تبويب محاذاة، وهي الخاصية التي يمكن أن تكون مفيدة عند تنسيق عناوين الأعمدة والصفوف في جداول البيانات. قم بإدخال زاوية التدوير في حقل Degrees، ومن قسم Reference edge حدّد فيما إذا كنت ترغب في تدوير النص نسبة إلى الحافة العليا أو السفلى للخلية، أو تدوير النص داخل الخلية فقط. تنسيق الخلايا يمكن تنسيق لون خلفية الخلية، ولون، سُمك، ونمط حدودها إما من شريط أدوات التنسيق: أو من تبويب الحدود Borders والخلفية Background في مربع الحوار تنسيق الخلايا، علمًا أن مربع الحوار يتيح خيارات أوسع، كإضافة ظل للخلية Shadow Style، أو تحديد أبعاد هوامش الخلية Spacing of Content: قبل تطبيق أي تغيير على الخلية أو نطاق الخلايا، قم بتحديدها أولًا ثم طبّق التنسيقات المرغوبة. التنسيق التلقائي للخلايا AutoFormat إذا لم تكن ترغب في تنسيق بياناتك في كل مرة تنشئ فيها جداول البيانات، بإمكانك استخدام خاصية التنسيق التلقائي التي توفر مجموعة تنسيقات معرّفة مسبقًا يمكنك تطبيقها بسرعة على البيانات. لكي تتمكن من تطبيق هذه الخاصية، يجب أن تحدد على الأقل 3 أعمدة و3 صفوف مع عناوينها، كما موضح في المثال أدناه، وإلّا ستكون غير فعّالة: بعد أن تحدد الأعمدة والصفوف، اذهب إلى تنسيق Format> أنماط التنسيق التلقائي AutoFormat: اختر نمط الجدول الذي تريد استخدامه من قائمة النسق Format، وبإمكانك إلغاء تأشير خيارات التنسيق غير المرغوبة من مجموعة التنسيق في مربع الحوار التنسيق الآلي. انقر على حسنًا لتطبيق التغيرات وإغلاق مربع الحوار: إن لم تعثر على النمط المناسب لك، بإمكانك تعريف النمط الخاص بك وإضافته إلى قائمة أنماط التنسيق التلقائي لاستخدامه. قم أولًا بتنسيق جدول بياناتك بتخصيص نوع الخط ولونه، حدود الخلايا، محاذاة النص، تنسيقات الأرقام...إلخ، ثم اذهب إلى تحرير Edit> حدّد الكل Select All لتحديد جدول البيانات برمّته: بعد ذلك اذهب إلى تنسيق> أنماط التنسيق التلقائي لفتح مربع الحوار التنسيق الآلي، ثم اضغط على زر أضف Add: أدخل اسمًا مناسبًا للنمط في حقل الاسم ثم انقر على حسنًا: سيُضاف نمط التنسيق التلقائي الجديد إلى قائمة النسق، وسيكون متاحًا للاستخدام عند تنسيق الجداول. التنسيق الشرطي Conditional Formatting التنسيق الشرطي يعني تغيير تنسيق الخلية تلقائيًا بناءً على شروط تحددها بنفسك. إذ يتم تلوين الخلية أو إضافة أيقونات ذات دلالة معينة عندما يحقق محتوى الخلية الشرط الذي حدّدته، وبذلك تساعدنا على فهم البيانات بشكل أفضل. غالبًا ما تستخدم هذه الخاصية لتمييز البيانات التي لا تطابق مواصفات معينة نحددها مسبقًا. ويُنصح بعدم المبالغة في استخدام التنسيق الشريطي، لأن ذلك يمكن أن يقلل من بروز البيانات الأخرى التي لا تطابق تلك المواصفات. أنواع التنسيق الشرطي يمكن تنسيق الخلايا بأنماط مختلفة: الشرط Condition: وهو نوع أساسي من التنسيق الشرطي، وباستخدامه يمكنك تحديد التنسيق المستخدم لتمييز البيانات التي لا تطابق المواصفات التي قمت بتحديدها. مقياس الألوان Color Scale: يستخدم هذا النوع لتنسيق لون خلفية الخلية بلون معين بناءً على قيم البيانات في جدول البيانات. ويمكن أن نحدد لونين أو ثلاثة ألوان لمقياس الألوان. أشرطة البيانات Data Bar: يوفر هذا الخيار تمثيل بصري للبيانات، ويتم ذلك بناء على القيم في جدول البيانات، وهذه الخاصية تشبه إلى حد كبير تمثيل البيانات بالمخططات الشريطية. مجموعة الأيقونات Icon Set: يعرض هذا الخيار أيقونات ذات دلالة معينة بجانب البيانات، وهي بذللك توفر تمثيلًا بصريًا لموقع قيمة معينة نسبة إلى القيم الأخرى في نطاق الخلايا. التاريخ Date: هذا الخيار مشابه للخيار الأول، فهو يعمل على تنسيق البيانات بنمط معين إذا كانت تحقق شرطًا معينًا، الفرق هو أنّ البيانات هنا هي بيانات تاريخ. مثال1: لدينا جدول لدرجات مجموعة من الطلاب، والمطلوب هو تمييز الدرجات التي تقل عن 60%؛ نتبع الخطوات التالية: نحدد نطاق الخلايا الذي يحتوي على درجات الطلاب، ثم نذهب إلى تنسيق Format> تنسيق شرطي Conditional Formatting> الشرط Condition: سيُفتح مربع الحوار التنسيق الشرطي، ومنه نحدد الشرط less than (أصغر من) من قائمة الشروط لأننا نرغب في تمييز البيانات التي تقل عن 60%، ثم نضع القيمة 60% في الحقل المقابل للشرط. وأخيرًا نحدّد نمط التمييز المرغوب من قائمة الأنماط الافتراضية: سيتم تمييز البيانات التي تحقق الشرط بالنمط الذي حددناه: وطالما بقي التنسيق الشرطي مطبقًا على الخلايا، سيتم تمييز البيانات التي تحقق الشرط حتّى إذا قمنا بتغيير القيم في الجدول. فإذا قمت بحذف إحدى القيم وإدخال قيمة أصغر من 60% في المثال أعلاه، سيتم تمييزها باللون الأحمر تلقائيًا: مثال2: الجدول أدناه يعرض بيانات المبيعات في تواريخ معينة، والمطلوب هو تنسيق البيانات بحيث تُعرض أعلى قيمة للمبيعات باللون الأخضر، وأقل قيمة باللون الأحمر، والقيم التي تقع بينها يتم تحديدها ألوانها تلقائيًا اعتمادًا على تلك القيمة: نحدد نطاق الخلايا B2:B9 ثم ننقر على زر التنسيق الشرطي من شريط أدوات التنسيق ونختار مقياس الألوان Color Scale (وهذه طريقة أخرى لتطبيق التنسيق الشرطي): نحدد عدد الألوان 2 من القائمة العلوية الثانية، ثم نحدد الخيار Min ونختار اللون الأحمر له، ونحدد الخيار Max ونختار اللون الأخضر له، ثم ننقر على حسنًا: تم تمييز أعلى قيمة باللون الأخضر، وأقل قيمة باللون الأحمر. أما القيم التي تقع بين القيمتين العليا والدنيا فتم تمييزها بتدرجات الأخضر أو الأحمر حسب قربها من القيمة العليا أو الدنيا على التوالي: مثال3: إذا رغبنا في تنسيق البيانات في الجدول السابق باستخدام أشرطة البيانات، نحدد نطاق الخلايا B2:B9 ثم ننقر على زر التنسيق الشرطي من شريط أدوات التنسيق ونختار شريط البيانات Data Bar: نبقي الخيارات الافتراضية كما هي في مربع الحوار تنسيق شرطي ثم ننقر على حسنًا: سيتم تمثيل البيانات في كل خلية بشريط يختلف طوله حسب قيمة البيانات فيه نسبة إلى القيمة العليا والدنيا في نطاق الخلايا: يمكنك تخصيص أشرطة البيانات بالنقر على زر خيارات أخرى، إذ يمكن تحديد أطوال الأشرطة، ألوانها، أو غيرها من الخيارات. مثال4: يعرض الجدول أدناه المبيعات في تواريخ معينة، والمطلوب هو تمييز تواريخ السنة الماضية بنمط معين: نحدد نطاق الخلايا A2:A9 ثم ننقر على زر التنسيق الشرطي ونختار التاريخ Date: نحدد الشرط Last Year (السنة الماضية) من مربع الحوار تنسيق شرطي، ثم نختار النمط المرغوب من قائمة الأنماط وننقر على حسنًا: سيتم تمييز تواريخ السنة الماضية فقط بالنمط الذي حددناه: حذف التنسيق الشرطي إذا كنت ترغب في حذف التنسيق الشرطي من الخلية أو نطاق الخلايا، قم بتحديدها أولًا ثم انقر على زر التنسيق الشرطي في شريط أدوات التنسيق واختر أدر Manage: من مربع الحوار أدر التنسيقات الشرطية، حدد التنسيق الذي ترغب في حذفه ثم انقر على زر إزالة Remove: خاتمة كما تعرفنا في هذا الدرس، توجد العديد من الطرق لتنسيق جداول البيانات، بعضها تطبق على الخلايا فقط، كإضافة خلفية وحدود للخلية، وبعضها تطبق على البيانات في الخلية، كتنسيق الأرقام والنصوص والخطوط. بالإضافة إلى التنسيق الشرطي الذي يتيح لنا تمييز البيانات التي تطابق مواصفات معينة نحددها مسبقًا، وبذلك يساعدنا على تحليل جداول البيانات بشكل سريع. ترجمة- وبتصرّف- لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  15. بعد أن تعلمنا في الدرس السابق كيفية التعامل مع جداول بيانات كالك، وكيفية تحديد الخلايا، الصفوف، الأعمدة، والأوراق، حان الوقت لنتعلم كيفية ملء الخلايا بأنواع مختلفة من البيانات. يتيح كالك طرقًا مختلفة لإدخال البيانات: باستخدام لوحة المفاتيح، باستخدام الفأرة وخاصية السحب والإفلات، باستخدام أداة التعبئة، وقوائم التحديد. كما يتيح إمكانية إدخال البيانات في أوراق متعددة ضمن جدول البيانات وفي نفس الوقت. باستخدام لوحة المفاتيح تتم معظم عمليات إدخال البيانات في كالك باستخدام لوحة المفاتيح، وعمومًا يجب أولًا أن نحدد الخلية التي نريد إدخال البيانات إليها. إدخال الأرقام انقر على إحدى الخلايا لتحديدها ثم أدخل الرقم المرغوب باستخدام لوحة المفاتيح. وإذا كنت ترغب في إدخال عدد سالب، اكتب علامة السالب (-) قبل الرقم أو ضع الرقم بين قوسين دائريين مغلقين. على سبيل المثال (101). وفي كلا الحالتين ستكون النتيجة نفسها. في جداول بيانات كالك، يمكن تحديد الحد الأدنى لعدد الأرقام التي يتم إدخالها في الخلية واستخدام الأصفار البادئة للحفاظ على هذا العدد. على سبيل المثال، إذا حددت الحد الأدنى لعدد الأرقام في الخلية 4، وقمت بإدخال الرقم 23 في الخلية، ستتم إضافة صفرين قبل العدد ليصبح 0023 من أجل الحفاظ على الحد الأدنى. لتحقيق ذلك، حدد الخلية أولا (أو نطاق الخلايا) ثم انقر بزر الفأرة الأيمن على التحديد واختر نسق الخلايا Format Cells: من تبويب الأرقام، وبالتحديد من مجموعة خيارات Options قم بإدخال الحد الأدنى للأرقام في حقل الأصفار البادئة Leading Zeroes ثم انقر على حسنًا OK: إذا قمت بإدخال رقم يحتوي فعلًا على صفر بادئ، كالرقم 056 مثلًا، سيقوم كالك بحذف الصفر تلقائيًا والاحتفاظ ببقية الرقم. فإذا رغبت في الاحتفاظ بالصفر، قم بإدخال فاصلة عُليا (') قبل إدخال الرقم. بعد ذلك اضغط على زر Enter وستختفي الفاصلة تلقائيًا ويتم الاحتفاظ بالصفر: يمكن أيضًا تحويل الأرقام في جداول كالك إلى نصوص، أي يتم التعرّف على الرقم على أنه قيمة نصية وليس قيمة رقمية، بالنقر بزر الفأرة الأيمن على الخلية التي تحتوي الرقم، ثم اختيار نسق الخلايا. من تبويب الأرقام، وبالتحديد من مجموعة فئة Category حدّد الخيار النص Text ثم انقر على حسنًا OK: سيتم تحويل الرقم إلى نص، وسيتم احتساب قيمته صفرًا عند كتابة الصيغ في جدول البيانات. إدخال النصوص على غرار عملية إدخال الأرقام، قم بتحديد الخلية أولًا ثم قم بإدخال النص من لوحة المفاتيح. يمكن أن تحتوي الخلية على سطور متعددة، فإذا رغبت في بدء فقرة جديدة، اضغط على مفتاحي Ctrl +Enter لإنشاء فقرة أخرى. إذا قمت بإدخال سطور عديدة في الخلية وترغب في عرضها على منطقة أوسع، قم بتوسيع شريط الصيغة بالنقر على أيقونة السهم الواقعة على جهة اليسار من شريط الصيغة وسيتحول سطر الإدخال إلى متعدد السطور: لإرجاع شريط الصيغة إلى الحجم الافتراضي قم بالنقر مجددًا على أيقونة السهم الصغير. إدخال الوقت والتاريخ قم بتحديد الخلية التي تريد إدخال البيانات فيها ثم أدخل الوقت أو التاريخ باستخدام لوحة المفاتيح. يمكنك فصل عناصر التاريخ بالفاصلة المائلة (/) أو باستخدام الواصلة (-)، أو باستخدام النصوص (مثل: 24 كانون الثاني 2017). سيتغير تنسيق التاريخ تلقائيًا إلى التنسيق الافتراضي المستخدم بواسطة كالك. أمّا عند إدخال الوقت، فقم بفصل عناصره باستخدام النقطتين (:)، (مثل 10:23:00). سيتغير تنسيق الوقت تلقائيًا إلى التنسيق الافتراضي المستخدم بواسطة كالك. يمكنك تغيير تنسيق الوقت أو التاريخ بالنقر على الخلية بزر الفأرة الأيمن واختيار نسق الخلايا. ومن تبويب الأرقام، وبالتحديد من قائمة الفئة، حدد تنسيق التاريخ أو الوقت الذي ترغب في استخدامه: خصائص لتسريع إدخال البيانات يمكن أن يكون إدخال البيانات على جداول كالك عملية مطولة ومرهقة وخصوصًا إذا كنت تعمل على جداول كبيرة جدًا، لكن كالك يوفر مجموعة أدوات/خصائص لتقليل الجهد واختصار الوقت عند إدخال البيانات، والتي تتضمن السحب والإفلات لنقل أو نسخ المحتوى من خلية إلى أخرى باستخدام الفأرة، أداة الإدخال التلقائي، أداة التعبئة، وقوائم التحديد. وتقوم هذه الأدوات بأتمتة عملية إدخال العناصر المتكررة إلى الخلايا. أداة الإدخال التلقائي AutoInput Tool وظيفة أداة الإدخال التلقائي هي إكمال المدخلات تلقائيًا بناءً على مدخلات أخرى في العمود نفسه. على سبيل المثال، إذا قمت بإدخال الكلمة "حاسوب" في إحدى الخلايا، ثم انتقلت إلى الصف التالي في نفس العمود وكتبت الحرف "ح" فقط، سيكمل كالك الكلمة، وبإمكانك قبولها بالضغط على مفتاح Enter أو بالنقر مرة واحدة بزر الفأرة: إذا كان العمود يحتوي على أكثر من كلمة تبدأ بنفس الحرف، بإمكانك الضغط على مفتاحي الاختصار Ctrl +Tab للانتقال إلى الخيار التالي، أو المفاتيح Ctrl + Tab + Shift للرجوع إلى الخيار السابق، كما تلاحظ في الصورة أدناه: أمّا إذا رغبت في عرض قائمة خيارات الإكمال المتاحة للعمود الحالي فاضغط على المفتاحين Alt + Down: عند البدء بكتابة صيغة باستخدام حروف تطابق حروف صيغ مدخلة مسبقًا، سيظهر تلميح مساعدة يعرض آخر 10 دوال استخدمت في مرشد الدوال، ويمكنك الضغط على مفتاح Enter لإدخال أول دالة في التلميح، أو استخدام المفاتيح Ctrl + Tab للانتقال إلى الخيار التالي الظاهر في التلميح وإدخاله: تتجاهل خاصية الإدخال التلقائي حالة الحروف باللغة الإنجليزية سواء كانت كبيرة أم صغيرة. على سبيل المثال، إذا قمت بكتابة "Total" في إحدى الخلايا، عندها لا يمكنك إدخال الكلمة "total" في خلية أخرى من خلايا العمود ما لم تقم بإلغاء تفعيل خاصية الإدخال التلقائي، لأنها ستكمل الكلمة بنفس حالة الأحرف للكلمة الأولى. تكون خاصية الإدخال التلقائي مفعلة بشكل افتراضي عند تنصيب البرنامج، فإذا كنت ترغب في إلغاء تفعيلها، اذهب إلى قائمة أدوات Tools ثم ألغِ تأشير الخيار إدخال تلقائي AutoInput: أداة التعبئة بإمكانك استخدام أداة التعبئة في كالك لتكرار محتوى موجود أو إنشاء سلسلة في نطاق من الخلايا في جدول البيانات، ويمكن أن تكون هذه الخاصية مفيدة جدًا لتوفير الوقت عند إدخال بيانات متكررة أو متسلسلة: لاستخدام خاصية التعبئة، قم أولًا بتحديد الخلية التي تحتوي على المحتوى الذي تريد تكراره أو بدء السلسلة منه، بعد ذلك انقر على المربع الأسود الصغير في الزاوية السفلى اليسرى من الخلية واسحب بالفأرة باتجاه الخلايا التي تريد تعبئتها، أفقيًا أو عموديًا. فإذا كانت الخلية الأصلية تحتوي على نص، سيتم نسخ المحتوى منها تلقائيًا. أمّا إذا احتوت على رقم أو محتوى يمكن أن يكون بداية سلسلة، فسيتم إنشاء سلسلة: ملاحظة: عندما تحدد الخلايا أثناء استخدام أداة التعبئة، تأكد من أنّ هذه الخلايا لا تحتوي على بيانات (باستثناء بيانات الخلية التي تريد استخدامها)، لأنه عند استخدام أداة التعبئة، سيتم استبدال البيانات الأصلية في الخلايا المحددة بالبيانات الناتجة عن التعبئة. خيارات التعبئة يوفر كالك العديد من الخيارات لتخصيص أمر التعبئة، كتحديد نوع التعبئة، اتجاهها، قيمة البداية والنهاية... إلخ. ويمكن الوصول إلى هذه الخيارات عبر المسار الورقة Sheet> املأ الخلايا Fill> السلسلة Series: سيُفتح مربع الحوار Fill Series ومنه يمكنك تخصيص الخيارات التالية: الاتجاه Direction: لتحديد اتجاه التعبئة نسبة إلى الخلية الأصلية المحددة؛ إلى الأعلى، الأسفل، اليمين، أو اليسار. نوع السلسلة Series Type: خطية Linear: تنشئ سلسلة رقمية خطية باستخدام قيمة الزيادة المحددة، وتنتهي السلسلة بقيمة النهاية المحددة. متزايدة Growth: تنشئ سلسلة متزايدة باستخدام قيمة الزيادة المحددة، وتنتهي السلسلة بقيمة النهاية المحددة. تاريخ Date: لإنشاء سلسلة تواريخ باستخدام قيمة الزيادة المحددة، وتنتهي السلسلة بقيمة النهاية المحددة. تعبئة تلقائية AutoFill: تقوم بتشكيل سلسلة في الورقة بشكل مباشر بدون تحديد مقدار الزيادة أو قيمة النهاية. ويمكن أن تستخدم هذه الخاصية القوائم المخصصة. على سبيل المثال، عند كتابة "يناير" في الخلية الأولى، سيتم إكمال السلسلة بقيم الأشهر المعرّفة في قوائم الفرز (أدوات> الخيارات> LibreOffice Calc> قوائم الفرز). كما أنّ هذه الخاصية تعمل على إكمال السلسلة باستخدام نمط معرّف. على سبيل المثال، سيتم إكمال السلسلة الرقمية 1، 3، 5، بشكل تلقائي بالقيم 7، 9، 11، 13...وهكذا. وحدة الوقت Time Unit: وهي الوحدة المستخدمة في إنشاء سلسلة الوقت أو التاريخ، وتكون هذه الخيارات غير مفعلة ما لم تقم تحديد الخيار تاريخ Date من نوع السلسلة. قيمة البداية Start Value: قيمة بداية السلسلة، ويمكن أن تكون أرقام، تواريخ، أو أوقات. قيمة النهاية End Value: قيمة نهاية السلسلة، ويمكن أن تكون أرقام، تواريخ، أو أوقات. مقدار الزيادة Increment: تحدد القيمة التي يزداد فيها كل عنصر في السلسلة عن العنصر الذي يسبقه. ويكون هذا الخيار غير مفعّل في حالة استخدام التعبئة التلقائية. أمثلة تطبيقية مثال 1: إنشاء سلسلة خطية باتجاه الأسفل، تبدأ بالرقم 10 وتنتهي بالرقم 30 وبمقدار زيادة يساوي 5. نقوم أولًا بإدخال الرقم 10 في إحدى الخلايا، ثم نحدد تلك الخلية مع الخلايا الأربعة المجاورة لها من الجهة السفلى: بعد ذلك نذهب إلى قائمة الورقة> املأ الخلايا> السلسلة. ومن مربع الحوار Fill Series نحدد الخيار Down من مجموعة الاتجاه، والخيار Linear من مجموعة نوع السلسلة، ثم ندخل القيمة 25 في حقل End Value والقيمة 5 في حقل Increment: في كل خلية، ستعمل خاصية التعبئة على إضافة العدد 5 إلى القيمة الموجودة في الخلية السابقة، وستكون النتيجة كالتالي: يمكن أيضًا الحصول على نفس النتيجة بإدخال الرقم 15 بعد الرقم عشرة وتحديد الخليتين معًا ثم استخدام التعبئة التلقائية: مثال 2: إنشاء سلسلة متزايدة باتجاه الأعلى تبدأ بالرقم 1 وتنتهي بالرقم 27، وبمقدار زيادة يساوي 3. نبدأ بإدخال الرقم 1 في إحدى الخلايا، ثم نحدد تلك الخلية مع الخلايا الثلاثة المجاورة لها من جهة الأعلى: من مربع الحوار Fill Series (الورقة>املأ الخلايا> السلسلة) نحدد الخيار Up من مجموعة الاتجاه والخيار Growth من مجموعة Series Type، ثم ندخل الرقم 12 في حقل End Value والرقم 3 في حقل Increment: في كل خلية، ستعمل خاصية التعبئة على ضرب العدد 3 في القيمة الموجودة في الخلية السابقة، وستكون النتيجة كالتالي: مثال 3: إنشاء سلسلة تواريخ تبدأ من التاريخ 10/04/2017 وتنتهي بتاريخ 10/02/2018، على أن يكون مقدار الزيادة 2 ونوع الوحدة شهرية. نبدأ بإدخال التاريخ 10/04/2017 في إحدى الخلايا، ثم نحدد تلك الخلية والخلايا الخمس المجاورة لها: من مربع الحوار Fill Series، نحدد الخيار Date من مجموعة Series Type، والخيار Month من مجموعة Time Unit، ثم ندخل التاريخ 10/02/2017 في حقل End Value والقيمة 2 في حقل Increment: في كل خلية، ستعمل الصيغة على إضافة شهرين (مقدار الزيادة = 2) على التاريخ الموجود في الخلية السابقة، وستكون النتيجة كالتالي: إنشاء قائمة مخصصة يمكن استخدام خاصية التعبئة التلقائية AutoFill لإدخال القوائم المعرّفة مسبقًا ضمن قوائم الفرز، أو القوائم التي تتبع نمطًا معينًا. لكن يمكنك أيضًا إنشاء القوائم الخاصة بك وإدخالها في جدول البيانات بشكل سريع باستخدام التعبئة التلقائية. لنفترض مثلًا أن لديك مجموعة من الأسماء التي تدخلها بترتيب معين في جداول البيانات وبشكل متكرر أيضًا، بإمكانك تعريف هذه القائمة ضمن قوائم الفرز مرّة واحدة، واستخدام التعبئة التلقائية لإدخالها في المرات التالية. للقيام بذلك، اذهب إلى أدوات Tools> الخيارات Options> LibreOffice Calc> قوائم الفرز Sort Lists ثم انقر على زر جديد New في مربع الحوار الذي سيظهر: بعد ذلك أدخل عناصر القائمة المرغوبة في حقل المدخلات Entries؛ كل عنصر في سطر جديد: بعد الانتهاء من إدخال العناصر، انقر على زر أضف Add لإضافتها إلى قوائم الفرز، ثم على زر حسنًا OK للخروج من مربع الحوار. في المرة القادمة التي ترغب فيها بإدخال هذه القائمة، اكتب العنصر الأول منها فقط في إحدى الخلايا، ثم استخدم خاصية التعبئة التلقائية لإكمال القائمة: قوائم التحديد تتاح قوائم التحديد للقيم النصية فقط، واستخدامها يقتصر على النصوص التي تم إدخالها مسبقًا في نفس العمود. لاستخدام قوائم التحديد، حدد خلية فارغة في العمود الذي يحتوي على خلايا بمدخلات نصية ثم انقر على بزر الفأرة الأيمن واختر قائمة التحديد Selection Lists: ستظهر قائمة منسدلة تحتوي على جميع المدخلات الموجودة في كل خلية من خلايا العمود، حتّى لو كانت حرفًا واحدًا، بالإضافة إلى القيم التي تم تنسيقها كنصوص: انقر على العنصر المرغوب وسيتم إدخاله في الخلية. إدخال البيانات في أوراق متعددة في بعض الأحيان تحتاج إلى إدخال البيانات في نفس الخلية على أوراق متعددة ضمن جدول البيانات. على سبيل، إذا كنت ترغب في إدخال مجموعة أسماء على ورقة معينة وتكرارها في الأوراق الأخرى، يمكنك استخدام هذه الطريقة لإدخالها في أوراق متعددة بدلًا من إدخالها يدويًا في كل ورقة على حدة. للقيام بذلك، اذهب إلى الورقة Sheet> حدد الأوراق Select Sheets: حدد الأوراق التي تريد إدخال البيانات عليها باستخدام الفأرة والمفتاح Ctrl في نفس الوقت ثم انقر على زر حسنًا OK: بعد ذلك ابدأ بإدخال البيانات في الخلية على إحدى الأوراق، وسيتم تكرار هذه البيانات على الأوراق الأخرى المحددة وفي نفس الموضع. بعد الانتهاء من إدخال البيانات، انقر على لسان تبويب إحدى الأوراق واختر إلغاء تحديد كافة الأوراق Deselect All Sheets: ملاحظة: عند استخدام هذه الطريقة سيتم استبدال أي بيانات موجود بالفعل في الخلايا على الأوراق المحددة. لذا تأكّد من إلغاء تحديد الأوراق الأخرى عندما تنتهي من إدخال البيانات التي تريد تكرارها قبل أن تواصل إدخال البيانات في جدول البيانات. بهذا نكون قد وصلنا إلى نهاية الدرس. في الدرس القادم سنتعرّف على كيفية تحرير البيانات في جداول بيانات كالك. ترجمة-وبتصرّف-لدليل المستخدم الخاص بالحزمة المكتبية LibreOffice.
  16. إنّه وقت الاعتراف: أنا لستُ ضليعة في تحليلات جوجل. وفي الحقيقة، عادةً ما أتجاوزها عندما أقرأ أيّ شيء يتعلّق بها، لأنّني أجدها هائلة وصعبة للغاية. ولأكون صريحة ليست بالممتعة! لكن لا يسعني أن أتجاهلها كوني من المسوّقين بالمحتوى. تحليلات جوجل من الأدوات الرائعة المجّانية التي تساعدنا على تتبّع أهدافنا في مدوّنة Buffer ومعرفة المواضع التي يمكننا تحسينها. فإذا كنتَ مسوّقًا بالمحتوى، نأمل أن يسلط هذا المقال الضوء على الأجزاء الأكثر فائدة في تحليلات جوجل، وأن يساعدك في معرفة كيفية استخدام البيانات لصالحك، دون أن تكون مملة! أو على الأقل سأحاول جهدي لكيلا تكون كذلك... ملاحظة: بإمكانك الاطّلاع على هذا الدليل لتثبيت تحليلات جوجل على موقعك، إذا لم تثبتها بعد. أولا: انشر المحتوى الذي يفضله جمهورك جميعنا يريد نشر المحتوى الذي يستمتع به جمهورنا ويشاركونه مع الآخرين (الأمر الذي يؤدّي إلى تزايد الجمهور)، وهذا ما يتمحور حوله التّسويق بالمحتوى. يمكن لتحليلات جوجل أن تساعدنا هنا عن طريق إبراز أيّ المنشورات هي الأكثر شعبيّة وكيف بإمكاننا صياغة المحتوى المستقبلي لإبقاء قرّائنا مهتمّين. إليكم طريقة فعلي لذلك في Buffer: عمل تقارير السلوك Behavior Report انقر على خيار السّلوك Behavior من قائمة التقارير القياسيّة Standard Reports. من القائمة المُنسدلة التي ستظهر، اختر محتوى الموقع Site Content، ثمّ كلّ الصفحات All Pages: تحديد النطاقات الزمنية هنالك خانة لاختيار التاريخ date picker في أعلى اليمين بإمكانك من خلالها تحديد النطاق الزمني لعمل التقرير. سأقوم بعمل تقرير يبدأ من شهر تمّوز، ويغطي تقريبًا ستّة أشهر. حدد عدد الصفوف أريد الحصول على نظرة عامّة جيّدة عن المحتوى المُناسب أو النّاجح في Buffer، لذلك سأقوم بإعداد التقرير ليعرض الصفوف المئة الأولى في صفحة واحدة. يمكنك أن تجد هذا الإعداد في أسفل التقرير: التصنيف حسب مرات مشاهدة الصفحة الفريدة Unique Pageviews يمكنك اختيار طريقة تصنيف النتائج من الجزء العلوي من التقرير. هذا الخيار تمّ ضبطه على "مرّات مشاهدات الصفحة" بشكل افتراضي، لكنّي أفضّل معرفة عدد المستخدمين الفريدين الذين شاهدوا كل منشور في المدوّنة باستثناء هؤلاء الذين يشاهدون نفس المنشور عدّة مرّات. وللتصنيف حسب الزائرين الفريدين، انقر فحسب على العنوان وستظهر أيقونة سهم بجانبه: بإمكاني الآن رؤية المنشورات المئة الأكثر شعبيّة في مدوّنة Buffer منذ شهر تموّز، واستخدام هذه البيانات في اتخاذ القرار حول نوع المحتوى الذي ينبغي علينا تقديمه في المستقبل. فيما يلي بعض الأمثلة على طريقة استخدامي لهذه البيانات: اختيار المواضيع أستطيع أن أرى من خلال النظر إلى أفضل المنشورات أعلاه أنّ إحصائيات وسائل التواصل الإجتماعي، المقالات العلمية، والمقالات المتعلّقة بالعقل ووسائل التواصل الاجتماعي تكون ناجحة وفعّالة في كثير من الأحيان. وهذا الأمر يساعد في معرفة المواضيع التي يجب التّركيز عليها أكثر. اختيار هيكلية المنشورات بإمكاني أيضًا رؤية أنّ المنشورات التي تحتوي على قوائم مُرقّمة تحظى بشعبيّة، وذلك اعتمادًا على عدد المنشورات التي تحتوي على أرقام ضمن عناوينها. وهذه إشارة جيّدة إلى أنّ المنشورات المرقّمة هي سهلة التصفّح، وكثيرًا ما تحتوي على مواضيع موجّهة للجميع، ولذلك تتم مشاركتها بكثرة. تحديد مؤلفي المنشورات لا تقوم تحليلات جوجل بعرض مؤلف كل مقال، ولكن لحسن الحظ أعرف مدوّنتنا بصورة كافية تجعلني أميّز إيّ المنشورات المؤلّفة من قبل مؤلفين ضيوف، وأيّها كُتبت من قبل الفريق. وبأخذ هذه المعرفة في الاعتبار، أستطيع استخدام هذا التقرير لرؤية عدد منشورات الضيوف في قائمتنا لأفضل 100 منشور، ومعرفة فيما إذا كان يجب الاستمرار في نشر تلك المنشورات. إنّ تحديد المؤلّفين أصبح أكثر وأكثر أهميّة، خصوصًا مع خاصيّة ظهور صورة واسم المؤلّف في نتائج البحث التي توفّرها جوجل Google Authorship. ثانيا: حسن تجربة زائري مدونتك لا تعطينا تحليلات جوجل معلومات عن المحتوى الأكثر شعبيّة في الموقع أو المدوّنة فحسب، وإنّما تعطينا دلائل على الطريقة التي يتم فيها مشاهدة الموقع وكم جيّدة (أو سيئة) هي التجربة بالنسبة للزائرين. من المناطق التي أنظر إليها لمعرفة كيف يمكننا تحسين تجربة الزائرين في مدوّنة Buffer هي معدّل الارتداد bounce rate، متوسّط وقت تحميل الصفحة average loading time، الوقت المستغرق في الموقع، والأماكن التي ينقر عليها الزائرون. معدل الارتداد يُعتبر معدّل الارتداد نقطة بداية رائعة، حيث أنّه يعرض عدد الزائرين الذين يغادرون الموقع دون زيارة صفحة أخرى فيه. وسبب هذا قد يكون: أنّ الموقع يستغرق وقتًا في التحميل، أنّ الزائر أتى من محرك بحث ولم يناسب محتوى موقعك ما يبحث عنه، أو أنّك قد تحتاج إلى تحسين أزرار الدعوة إلى إجراء أو روابط المنشورات ذات الصلة لكي تبقيهم فترة أطول في الموقع. بالعودة إلى قائمة السلوك، اضغط على "نظرة عامة Overview"، الخيار الأوّل، وسيظهر لك شيء مشابه لهذا: إذا قمت بالنقر على "معدّل الارتداد" سيظهر لك مخطّط أكبر، كالتالي: عند النظر إلى معدّل الارتداد يجب أن تأخذ بعين الاعتبار أنّ هذا هو الجزء الأكثر أهميّة فيما يتعلّق بالزائرين الجدد، لأنّ هذه هي الفئة التي تريد اقناعها بالبقاء في الموقع، على العكس من الزائرين المتكررين الذين يكررون العودة إلى موقعك بالفعل. بإمكانك إضافة شريحة إلى تقرير التحليلات الذي يعرض معدّل الارتداد للزائرين الجدد مقابل الزائرين المتكررين. ومن المثير للاهتمام، أظهرت المقارنة أنّ معدّلات الارتداد لمدوّنة Buffer هي نفسها تقريبًا لكلا النوعين من الزائرين: قمنا مؤخّرًا بإضافة روابط لاثنين من منشورات ذات صلة بالمنشور الأصلي في أسفل كل منشور، كالتالي: تشير تحليلات جوجل إلى أنّ القرّاء يقومون بالنقر على تلك الروابط كما تلاحظ أدناه: لكنّ هذه الروابط لا تؤثّر على معدّل الارتداد كثيرًا من خلال تشجيع الزائرين على مشاهدة عدد أكبر من منشورات مدوّنتنا. وهذا الأمر رائع لنتعلم منه لكي نستطيع تجربة أفكار أخرى. بإمكانك الاطّلاع على هذا الإنفوجرافيك الرائع من KISSmetrics الذي يتضمّن نصائح حول تحسين معدّل الارتداد الخاص بموقعك. أين ينقر الزائرون إنّ ميزة In-Page Analytics هي من الأجزاء الممتعة التي وجدتها في تحليلات جوجل. تتيح لك هذه الميزة رؤية موقعك بطبقة من الفقاعات التفسيريّة التي تعرض نسبة الأشخاص الذين يقومون بالنقر على كل رابط في موقعك. عندما قمت باستخدام هذه الميزة لرؤية التدفّق في مدوّنة Buffer منذ شهر تمّوز لهذه السنة، وجدتُ أنّ 21% من الأشخاص ينقرون على شعار Buffer في الجزء العلوي من المدوّنة: هذا النوع من البيانات مفيد جدًّا في فهم طريقة استخدام الموقع من قبل الزائرين وكيف من الممكن تحسينه إلى الأفضل. كما بإمكانك معرفة عدد الأشخاص الذين يقومون بالنقر على كل تصنيف في المدوّنة واستخدام تلك البيانات عند إنشاء أزرار الدعوة إلى إجراء جديدة أو اختبار تصميم جديد للمدوّنة. ولميزة In-Page Analytics هذه فائدة عظيمة خصوصًا في معرفة تأثير الألوان في التسويق­. وقت تحميل الصفحة من الميزات الأخرى الذكيّة التي توفّرها In-Page Analytics هي أنّها تعرض الوقت الذي يستغرقه الزائرون على الصفحة في المعدّل، قيمة معدّل الارتداد لتلك الصفة المحدّدة، وكم من الوقت تستغرق عادةً للتحميل: إنّ تحسين وقت تحميل الصفحة للأمثل من الأمور بالغة الأهميّة التي يجب أن تركّز عليها، لأنّه تأخر دقيقة واحدة في التحميل يمكن أن يؤدي إلى نقصان في معدّل التحويل conversion rate بنسبة 7%. ثالثا: ركز جهودك التسويقية قد يكون من الصعب معرفة أي الشبكات الاجتماعية ووسائل التّسويق التي يجب التركيز عليها مالم تمتلك بيانات تدعم فرضيّاتك. إنّ تحليلات جوجل تسهّل عليك هذا الأمر بعرض الأماكن التي تأتي منها أغلب الإحالات referrals، وما هو المحتوى الأفضل الذي يصلح لكل شبكة اجتماعية أو موقع إحالة. إليك ما وجدته عندما قمت بالبحث عن ذلك لمدوّنة Buffer: الشبكات الاجتماعية تستطيع رؤية أيّ الشبكات الاجتماعية التي ترسل التدفّق traffic إلى موقعك عند طريق النقر على خيار "الاكتساب Acquisition" من القائمة في الجهة اليسرى، ثم "اجتماعي Social"، ثمّ أخيرًا "إحالات الشبكة Network Referrals". إنّ التركيز الدقيق على مقاييس الشبكات الاجتماعيّة، وأي المناطق التي ينبغي تحسينها فيها يمكن أن يكون عونًا كبيرًا في تحسين النتائج التي تحصل عليها. كما تلاحظ في النتائج التي حصلنا عليها، الإحالات من فيس بوك تتفوّق على الشبكات الاجتماعية الأخرى بدرجة كبيرة: أمّا الجزء الرائع من تحليلات جوجل فهو أنّك تستطيع أيضًا رؤية أي الصفحات التي تحصل على أغلب التدفّق. إذا قمتُ بالنقر على فيس بوك ستظهر لي أفضل المنشورات التي تتم إحالة التدفّق إليها: مرّة أخرى، توجد هنا إرشادات ودلائل واضحة جدًّا. الشي الآخر المثير للاهتمام حول هذا التقرير، هو أنّ جميع تلك المنشورات تندرج تحت تصنيفات مثل نصائح لتسهيل أو تحسين الحياة lifehacking، الإنتاجية، والعلوم. وهذه إشارة على أنّ منشورات الكتابة والتّسويق المتعلّقة بالشبكات الاجتماعية لا تعمل جيّدًا بالنسبة لنا على فيس بوك، لذلك يجب أن نروّج لهذه المنشورات على شبكات مختلفة. ومن الميزات الأخرى الذكيّة هي أنّك تستطيع أن تتعمق أكثر مع خيار "البُعد الثانوي Secondary dimension". هنالك العديد من الأشياء للاختيار من بينها، لكن ما أجده رائعًا جدًّا هو معرفة اليوم الذي يتم فيه إرسال تدفّق أكثر من شبكات التواصل الاجتماعي: الإحالات الأخرى لا تأتي الإحالات من شبكات التواصل الاجتماعي فحسب، وإنّما من مواقع أخرى متنوّعة. بإمكاننا رؤية إحالات التدفّق من خيار "كل الإحالات All Referrals" في القائمة الجانبيّة: بالرّغم من أنّ شبكات التواصل الاجتماعي تم شملها في هذا التقرير أيضًا، ألا أنّها طريقة رائعة لرؤية المواقع التي تمّت إعادة نشر منشوراتنا عليها، أو الإشارة إلى روابط تلك المنشورات فيها، والتي أرسلت المزيد من التدّفق إلى مدوّنتنا. استخدم هذا التقرير عادةً للحصول على إحصائيّات أفضل الإحالات لتقارير المحتوى الشهريّة. خاتمة إنّ تحليلات جوجل من الأدوات الواسعة، حيث أنّ هنالك العديد من الأمور لاكتشافها التي لم أنظر إليها بعد. وإذا كنت تجد هذه الأداة هائلة كما أفعل، آمل أن يساعدك هذا المقال للبدء ببعض الأجزاء الذكيّة منها التي تساعدك على اتخاذ قرارات متعمّقة أكثر حول استراتيجية المحتوى الخاص بموقعك أو مدوّنتك. هل لديك شيء آخر لإضافته؟ شاركنا برأيك واقتراحاتك. ترجمة -وبتصرّف- للمقال The Marketer’s Guide to Google Analytics: How to Extract Numbers That Drive Action لصاحبته: Belle Beth Cooper. حقوق الصورة البارزة: Search Engine People.
  17. تحدثنا في المقالات السابقة من هذه السلسلة عن مفهوم الإنفوجرافيك عمومًا موضحين أهميته وأنواعه، بعدها انتقلنا للحديث عن أهم البرامج والأدوات المستخدمة في إنشاء الإنفوجرافيك وقدمنا لكم مجموعة متنوعة من الخيارات في هذا المجال. ثم تناولنا هيكلية الإنفوجرافيك وأهم الأشياء التي ينبغي تضمينها لأي إنفوجرافيك وكيفية التعامل مع الأبعاد والألوان، والآن سنكمل معكم هذه السلسلة باستعراض مراحل إنشاء الإنفوجرافيك والتعامل مع البيانات بصورة مفصلة. في جميع المقالات السابقة من هذه السلسلة، ذكرت أكثر من مرة أن الإنفوجرافيك يُعد من ضمن أشكال المحتوى المختلفة، وبالتالي فإن عمق المعلومات وقيمتها ستحدد ما إذا كان الإنفوجرافيك جديرًا بالقراءة أم لا، أي أنك أثناء مطالعتك لبعض المقالات فلن يستغرق ذلك الكثير من الوقت لتحدد هل المقال جيد أو سيء، يُقدم قيمة وفائدة حقيقية، أو يُقدم بعض الهراء والخزعبلات، وهذا يجب أن يدفعنا لتقديم إنفوجرافيك قوي وعالي الجودة أو على الأقل لا يُصنف تحت خانة "الهراء". لذلك قبل قراءة هذا المقال أو أي مقال من هذه السلسلة لا تنسى هذه الحقيقة "استخدام الإنفوجرافيك لا يعني تقديم محتوى أقل قيمة أو أهمية من بقية أنواع المحتوى". المرحلة الأولى: الفكرةكل شيء يبدأ بفكرة، فحصولك على فكرة قوية ومميزة يعني إتمامك لأهم مرحلة من مراحل إنشاء الإنفوجرافيك، وليس هناك فكرة صحيحة وأخرى خاطئة، المهم أن تكون الفكرة واضحة ومبسطة. وكلما كانت الفكرة الخاصة بالإنفوجرافيك غير تقليدية ومبتكرة، كلما حقق الإنفوجرافيك المزيد من الانتشار عبر شبكة الإنترنت. ويُمكن أن تكون الفكرة بسيطة لدرجة لا يمكن تصورها، لكنها في نفس الوقت تقع في دائرة اهتمام ملايين المستخدمين، وبالتالي ما يتبقى عليك هو العمل على هذه الفكرة وتحويلها إلى إنفوجرافيك بأفضل صورة. وعند الحديث عن الأفكار لابد أن نتناول مسألة هامة جدًا وهي كيفية الحصول على أفكار فعالة، بالإضافة إلى الأفكار التي تجذب المستخدمين بشكل أكبر. لذا إليك بعض النصائح الهامة في كيفية الحصول على أفكار ومواضيع جيدة للإنفوجرافيك: الشبكات الاجتماعيةاليوم هناك ملايين المستخدمين يومياً يطرحون العديد من القضايا الحيوية والهامة، يحللون ويناقشون قضايا مختلفة ومتنوعة، وبالتالي تُعد هذه الشبكات مصدرًا غنياً للحصول على أفكار جديدة وطرحها عبر الإنفوجرافيك، لذا حاول أن تتبع المواضيع المتداولة حالياً عبر الشبكات الاجتماعية والحصول على أفكار جيدة من خلالها. اسأل جمهوركإن كنت تمتلك مدونة أو صفحة عبر فيس بوك أو غيرها من وسائل التواصل الاجتماعية مع المستخدمين، فمن الجيد أن تسأل جمهورك حول بعض الأفكار أو أن يقترحوا بعض المواضيع التي يرغبوا برؤيتها على هيئة إنفوجرافيك، أيضًا من الممكن أن تمتلك فكرة جيدة لكنك لا تزال مترددًا في طرحها بواسطة الإنفوجرافيك، لذا من الجيد أن تتواصل مع جمهورك قبل ذلك وأن تقوم بقياس ردة فعلهم، وهل هم مهتمون بهذه الفكرة أم لا، أي أنه يجب عليك التفاعل مع جمهورك المستهدف بصورة دورية ومباشرة لمعرفة المواضيع المفضلة بالنسبة لهم. الإنفوجرافيكس القديمةهناك العديد من الإنفوجرافيكس التي تم طرحها منذ عدة سنوات، وتناولت بعض المسائل الهامة، لكن مع مرور الوقت تصبح المعلومات والبيانات الواردة بهذه الإنفوجرافيكس غير واقعية، وبالتالي يُمكنك إعادة إخراج هذه الإنفوجرافيكس مع المعطيات والبيانات الحالية، فمثلاً نفترض أن هناك إنفوجرافيك يتناول بعض الإحصائيات حول تطبيق واتس آب عام 2011، وبالتالي بعد مرور فترة زمنية معينة ستلاحظ اختلاف الإحصائيات المتعلقة بالتطبيق، نفس الأمر ينطبق على العديد من المواضيع الأخرى. تعلم من منافسيكفي فضاء الإنترنت الواسع، تذكر دائمًا أنك لست وحدك، فهناك العديد من المنافسين الأقوياء لك، ومن الجيد لو استفدت من هؤلاء المنافسين في معرفة المواضيع الأكثر شعبية لديهم، ومعرفة كيفية تفاعل القراء مع الأفكار المختلفة التي يتم طرحها، وبالتالي من المهم أن تتابع جميع المنافسين المحتملين لك، وأن تركز على الأفكار التي تحظى بشعبية واسعة. الأحداث الحاليةونقصد بها الأخبار المتعلقة بأي موضوع في الوقت الراهن، أو الأبحاث والدراسات الجديدة المتعلقة بمجال معين، أو الأخبار والمواضيع المتداولة على المستوى العالمي، لذا متابعتك الجيدة لآخر التطورات في مجالك سيساعدك في الحصول على أفكار ومواضيع فعالة للإنفوجرافيك. ويمكنك الاستعانة ببعض الأدوات الهامة لتحديد أبرز المواضيع الشائعة حالياً منها: اتجاهات جوجل Google Trends توفر الخدمة العديد من الإحصائيات حول كلمات معينة يحددها المستخدم وربطها بحسب الانتشار الجغرافي حول العالم، وشخصياً اعتبرها من أفضل الأدوات التي تطلعني على الاتجاهات الحالية والمواضيع الأكثر تداولاً عبر جوجل في دول معينة. المواضيع الأكثر شعبية عبر تويتر يوفر موقع تويتر قائمة ثابتة بأبرز الوسوم وأكثرها شعبية خلال الساعات الأخيرة، وذلك حسب النطاق الجغرافي التي تحدده، كما يوجد العديد من الأدوات والحسابات المختلفة التي تُقدم تقارير دورية بأبرز المواضيع الشائعة عبر تويتر. ستامبل أبون stumbleupon وهي خدمة مميزة تسمح لك باستعراض المواضيع الأكثر شعبية اعتمادًا على اهتمامات المستخدم. والآن إليك بعض الإرشادات حول الأفكار التي تتمتع بشعبية واسعة بشكل عام: التعليم يميل المستخدمين إلى الأفكار التعليمية بصورة كبيرة جدًا، وبالتالي يُمكن للمتخصصين في مجال معين توضيح وشرح مسألة مهمة في مجالهم أو تصحيح مفهوم مغلوط أو تبسيط لأشياء معقدة ضمن مجالاتهم بواسطة الإنفوجرافيك، هذه الأفكار عمومًا تحظى بثقة أكبر من قبل المستخدمين وتحقق نسب أعلى من المشاركة. القوائم بمعنى إنشاء قائمة معينة ومرتبة بصورة متسلسلة في موضوع معين، وغالبًا تحظى المقالات الخاصة بالقوائم بشعبية أكبر من المقالات التقليدية نظرًا لطبيعتها السلسلة والبسيطة، وبالتالي يُمكن استخدام الإنفوجرافيك في إنشاء قوائم معينة بصورة جميلة وخفيفة. الأسباب والنتائج أي قارئ جيد في مجال معين يحتاج لمعرفة مسببات ظاهرة أو أزمة أو غيرها من الأحداث، وفي نفس الوقت معرفة النتائج المترتبة على هذه الظاهرة أو الأزمة، وبالتالي يُمكن للإنفوجرافيك توضيح مسببات ونتائج ظاهرة معنية بصورة سلسلة وأنيقة، وكلما استطعت ربط الظواهر والأزمات مع الأحداث الحالية، كلما استطعت الوصول إلى شريحة أوسع من المستخدمين، فمثلاً خبر تحطم الطائرة الماليزية، أو الأزمة الاقتصادية في اليونان، كانت من ضمن المواضيع الجارية والتي يرغب الناس بمعرفة أسبابها ونتائجها، وهكذا بالنسبة لبقية المواضيع. اقتراحات أخرى هناك العديد من المواضيع الهامة والتي يتم تداولها بصورة واسعة عبر الإنفوجرافيك منها مثلاً كيفية عمل منتج معين، أو من خلال الإجابة عن بعض الأسئلة الافتراضية مثل "ماذا لو، كيف أقوم بـ"، أيضًا الحقائق تمتلك شعبية أكبر مقارنة بالمواضيع الأخرى. المرحلة الثانية: التعامل مع البياناتبعد الانتهاء من اختيار الفكرة والموضوع الخاص بالإنفوجرافيك، تبدأ مرحلة التطبيق الفعلي، ألا وهي التعامل مع البيانات، وللتبسيط سنقوم بتقسيم هذه الجزئية إلى عدة خطوات وهي: جمع البياناتأول خطوة يجب عليك البدء بتنفيذها بعد اختيار الفكرة هي عملية جمع البيانات الخاصة بالفكرة أو الموضوع المحدد، ويلزمك في هذه المرحلة أن تبحث عن كل معلومة بإمكانها أن تخدم الفكرة وتساعد القارئ على استيعاب الموضوع بصورة سلسلة، ومن الضروري أيضًا أن تهتم أثناء هذه المرحلة بالوصول إلى الإحصائيات المتعلقة بهذا الموضوع لاستخدامها ضمن الإنفوجرافيك، حاول الوصول إلى أحداث زمنية مهمة متعلقة بالفكرة أو الحصول على أرقام وإحصائيات مرتبطة بالموضوع لإدراجها ضمن الإنفوجرافيك. القراءةأثناء عملية جمع البيانات، قد تقوم بتخزين العديد من المعلومات والبيانات غير الضرورية والتي لن يتم استخدامها ضمن التصميم، لذا عليك قراءة المعلومات والبيانات التي تم جمعها واختيار ما يلائم منها للإنفوجرافيك فقط. وتشمل هذه المرحلة اختصار المعلومات بعد دراستها وتحويلها بصورة تتناسب مع التصميم. وتعد هذه المرحلة ضرورية جدًا للتأكد من عدم إهمالك لأي معلومات أو بيانات هامة، بالإضافة إلى التأكد من الحقائق أو البيانات التي تم جمعها مسبقًا. السرد المنطقي والممتعفي مقال المحتوى هو التسويق للكاتب Des Traynor أشرنا إلى ضرورة الاهتمام بالمقدمة الخاصة بالمقال، دعونا نعيد قراءة هذه الفقرة: نفس الشيء ينطبق على الإنفوجرافيك، فالسرد العشوائي للمعلومات وعدم تسلسلها بصورة منطقية سيمنع القارئ من مواصلة الاهتمام بالإنفوجرافيك، وبالتالي إن بدأت بمعلومات مملة سيصبح الإنفوجرافيك كله مملاً، وتذكر دائمًا أن البيانات أو المعلومات التي ستذكرها في الإنفوجرافيك قد تكون مألوفة لدى القارئ، لذلك عليك خلق قصة مقنعة تستحق القراءة، لا مجرد عملية حشو للمعلومات. المرحلة الثالثة: التصميمهذه المرحلة تُعد الأهم من ناحية الإخراج النهائي للإنفوجرافيك، وتناولنا في المواضيع السابقة بعض النقاط المتعلقة بمسألة التصميم، من ضمنها الأدوات المستخدمة لتصميم الإنفوجرافيك بالإضافة إلى التعامل مع الألوان والأبعاد. لكن دعونا نشير إلى بعض النقاط الأخرى المتعلقة بالتصميم، أولها وضع تصور مبدئي للشكل النهائي للإنفوجرافيك واختيار النوع المناسب الذي تريد إدراج الإنفوجرافيك ضمنه، حيث تحدثنا في الجزء الأول من هذه السلسلة عن الأنواع المختلفة للإنفوجرافيك، وبالتالي فإن اختيارك لنوع محدد سيسهل عليك عملية اختيار الشكل الأنسب أثناء التصميم، كما يُمكنك مطالعة بعض الإنفوجرافيكس التي تحظى بشعبية واسعة واستلهام بعض الأفكار الخاصة بالتصميم. من الأشياء التي أود أن أشير لها في مسألة التصميم هي نوع الخط المستخدم، حيث يُفضل أن يتم استخدام نوع خط واحد أو نوعين فقط أثناء التصميم، وذلك لإعطاء الإنفوجرافيك المزيد من التناسق والترتيب. المخططاتفي حال تضمن الإنفوجرافيك لبعض البيانات والإحصائيات، فيجب أن يتم طرحها على هيئة مخططات بيانية، تمامًا كما هو الحال عند إنشاء مخططات على برنامج أوفيس إكسل أو وورد، ومن الجيد إنشاء هذه المخططات بشكل متوافق مع التصميم من حيث الألوان والأبعاد العامة للتصميم، ولا يُنصح استخدام الإحصائيات أو المخططات في بداية الإنفوجرافيك، والأفضل استخدامها بصورة منطقية وموزعة بشكل متكامل على أجزاء الإنفوجرافيك، لا أن يتم إضافتها كقطعة واحدة. المرحلة الأخيرة: النشرحسنًا، لدينا الآن إنفوجرافيك متكامل ولم يبقى لنا سوى عملية النشر عبر الإنترنت، وهي مرحلة مهمة جدًا لكي يلقى الإنفوجرافيك الصدى المتوقع منه. في البداية يجب نشر الإنفوجرافيك في مدونتك أو موقعك الإلكتروني، وبعدها مشاركته عبر الشبكات الاجتماعية المختلفة، ويُنصح باستخدام الوسوم "الهاشتاغ" المرتبطة بموضوع الإنفوجرافيك أثناء نشره عبر تويتر أو فيس بوك. إن كانت لديك بعض الإنفوجرافيك باللغة الإنجليزية فمن المهم نشرها على شبكة pinterest والتي تعتبر واحدة من أكثر الشبكات فاعلية في نشر الإنفوجرافيكس، ولغاية الآن لا يوجد اهتمام قوي على صعيد العالم العربي بهذه الشبكة، وبدلاً من ذلك يُمكنك الاعتماد على شبكة انستجرام. لا تنسى أيضًا مشاركة الإنفوجرافيك عبر المواقع المتخصصة في هذا المجال، أو من خلال التواصل مع المواقع المهتمة بمحتوى الموضوع، فمثلاً في حال قمت بإنشاء إنفوجرافيك في المجال الطبي، فمن الجيد التواصل مع أشهر المواقع الطبية وإرسال الإنفوجرافيك لهم، ليتم نشره من خلالهم. حقوق الصورة البارزة: Designed by Freepik.
  18. تمهيد بشكل عام، نستعمل حاويات Docker لمرة وحيدة فقط، وهي تعمل إلى أن ينتهي تنفيذ الأمر الموكل إليها. لكن في بعض الأحيان تحتاج التطبيقات إلى الوصول إلى بيانات أو حفظها بعد حذف الحاوية. أمثلة عن البيانات التي تحتاج التطبيقات إلى الوصول إليها تتضمن قواعد البيانات، والمحتوى المولّد من قِبل المستخدم لمواقع الويب، وملفات السجلات. يمكن الوصول إلى تلك البيانات بشكلٍ دائم باستخدام حجوم Docker (أي Docker Volumes). المتطلبات المسبقة خادوم أوبنتو 16.04 (أو 14.04) مضبوطٌ كما في درس «الإعداد الابتدائي لخادوم أوبنتو 14.04»، بما في ذلك إعداد حساب مستخدم عادي لكنه يملك امتيازات الجذر (root) عبر الأداة sudo. برمجية Docker مثبّتة على حاسوبك ملاحظة: صحيحٌ أننا نفترض أنَّنا سنستعمل Docker على أوبنتو 16.04، لكن أوامر docker التي تتعامل مع حجوم Docker والمذكورة في هذا الدرس يجب أن تعمل عملًا صحيحًا على بقية الأنظمة لطالما كانت Docker مثبّتةً عليها وأُضيف المستخدم sudo إلى المجموعة docker. يمكن إنشاء حجوم Docker ووصلها بأمرٍ واحد ألا وهو الأمر المُستخدَم لإنشاء الحاوية، أو يمكن إنشاء الحجوم بشكل مستقلٍ عن أيّة حاوية ثم وصلها إليها لاحقًا. سنناقش في هذا الدرس أربع طرائق مختلفة لمشاركة البيانات بين الحاويات. أولًا: إنشاء حجم مستقل أتى الأمر docker volume create مع إصدار 1.9 من Docker والذي يسمح لك بإنشاء حجم دون ربطه بأية حاوية. سنستخدم هذا الأمر لإنشاء حجم باسم DataVolume1: docker volume create --name DataVolume1 إذا عُرِض الاسم، فذلك يُشير إلى نجاح تنفيذ الأمر السابق: DataVolume1 لكي نستعمل هذا الحجم، علينا إنشاء حاوية جديدة مبنية على صورة ubuntu مستعملين الخيار ‎--‎rm لحذف الحاوية تلقائيًا بعد خروجنا منها، وسنستخدم الخيار ‎-v لوصل الحجم الجديد. الخيار ‎-v يتطلب ذكر اسم الحجم متبوعًا بنقطتين رأسيتين : ثم المسار المطلق لمكان وصل الحجم داخل الحاوية. إذا لم يكن المجلد المذكور في المسار السابق موجودًا في صورة التوزيعة، فسيُنشَأ ثم سيُنفَّذ الأمر السابق؛ وفي حال كان المجلد موجودًا، فسيؤدي وصل الحجم إليه إلى إخفاء المحتوى الموجود في الصورة الأصلية. docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu لنكتب بعض البيانات إلى الحجم قبل إغلاق الحاوية: root@802b0a78f2ef:/# echo "Example1" > /datavolume1/Example1.txt ولاستعمالنا الخيار ‎--rm عند إنشاء الحاوية، فستُحذَف الحاوية تلقائيًا عند خروجنا منها. لكن الحجم سيبقى متاحًا للوصول. root@802b0a78f2ef:/# exit يمكننا أن نتحقق أنَّ الحجم ما يزال موجودًا في النظام عبر الأمر docker volume inspect: docker volume inspect DataVolume1 الناتج: [ { "Name": "DataVolume1", "Driver": "local", "Mountpoint": "/var/lib/docker/volumes/datavolume1/_data", "Labels": null, "Scope": "local" } ] ملاحظة: يمكننا أيضًا تفحص البيانات الموجودة في المسار المذكور في سطر Mountpoint لكن لا يُستحسَن تعديلها، لأنَّ ذلك قد يؤدي إلى حدوث عطب في البيانات إن كانت الحاوية تعمل وتجري تعديلات على تلك الملفات. لنبدأ الآن حاويةً جديدةً ونربط الحجم DataVolume1 إليها: docker run --rm -ti -v DataVolume1:/datavolume1 ubuntu سنُنفِّذ الأمر الآتي داخل الحاوية: root@d73eca0365fc:/# cat /datavolume1/Example1.txt الناتج: Example1 لنخرج الآن من الحاوية بالأمر exit. ثانيًا: إنشاء حجم مرتبط بحاوية لكن سيبقى موجودًا بعد حذفها سنُنشِئ في المثال الآتي حجمًا وحاويةً في آنٍ واحد، ومن ثم سنحذف الحاوية، ثم سنربط الحجم إلى حاويةٍ جديدة. سنستخدم الأمر docker run لإنشاء حاوية جديدة بناءً على صورة ubuntu، وسيؤدي استخدام الخيار ‎-t إلى منحنا وصولًا إلى الطرفية، والخيار ‎-i سيسمح لنا بالتفاعل مع الحاوية. ولغرض التوضيح، سأستخدم الخيار ‎--name لتحديد اسم للحاوية، ثم سأستخدم الخيار ‎-v لإنشاء حجم جديد، وسنسميّه DataVolume2، وسنستخدم النقطتين الرأسيتين لفصل الاسم عن مسار وصل الحجم في الحاوية. وفي النهاية سنطلب إنشاء الحاوية لتبدأ تنفيذها بالأمر الافتراضي الموجود في ملف Docker لصورة Ubuntu (الذي هو الأمر bash) لكي نحصل على وصول إلى الصدفة (shell): docker run -ti --name=Container2 -v DataVolume2:/datavolume2 ubuntu ملاحظة: الخيار ‎-v هو خيارٌ مرنٌ جدًا، إذ يستطيع إنشاء وصل ترابطي، أو يمكنه إنشاء حجم جديد بتعديلٍ بسيط جدًا في شكله. فلو بدأ أوّل وسيطٍ بشرطة مائلة / أو ‎~/‎ فسيُنشِئ وصلًا ترابطيًا، لكن إن حذفت الشرطة في أوّل وسيط، فسيُنشِئ حجمًا. ‎-v /path:/path/in/container وصل المسار ‎/path في الجهاز المضيف إلى ‎/path/in/container في الحاوية. ‎-v path:/path/in/container إنشاء حجم باسم path دون علاقة بالمضيف. ولمّا كنا داخل الحاوية، فلنكتب بعض البيانات إلى الحجم: root@87c33b5ae18a:/# echo "Example2" > /datavolume2/Example2.txt root@87c33b5ae18a:/# cat /datavolume2/Example2.txt الناتج: Example2 سنخرج من الحاوية باستخدام الأمر exit. سنُعيد الآن تشغيل الحاوية مرةً أخرى، وسيتم وصل الحجم تلقائيًا. docker start -ai Container2 لنتأكد من أنَّ الحجم قد وصِلَ إلى الحاوية وما تزال البيانات موجودةً فيه: root@87c33b5ae18a:/# cat /datavolume2/Example2.txt الناتج: Example2 لنخرج مرةً أخرى من الحاوية بالأمر exit. لن تسمح لنا Docker بحذف الحجم إذا كان مرتبطًا بحاوية، لننظر ماذا سيحدث لو جربنا ذلك: docker volume rm DataVolume2 ستخبرنا الرسالة الآتية أنَّ الحجم ما يزال مستخدم وستعطينا المُعرِّف الكامل للحاوية: Error response from daemon: Unable to remove volume, volume still in use: remove DataVolume2: volume is in use - [719f98391ecf1d6f0f053ffea1bbd84cd2dc9cf6d31d5a4f348c60d98392804c] يمكننا استخدام المُعرِّف السابق لحذف الحاوية: docker rm 719f98391ecf1d6f0f053ffea1bbd84cd2dc9cf6d31d5a4f348c60d98392804c لن يؤثر حذف الحاوية على الحجم المرتبط بها، وما زال موجودًا في النظام، ونستطيع التحقق من ذلك باستخدام الأمر docker volume ls: docker volume ls الناتج: DRIVER VOLUME NAME local DataVolume2 نستطيع الآن استخدام الأمر docker volume rm لحذف الحجم بتمرير اسمه إلى الأمر السابق: docker volume rm DataVolume2 أنشأنا في هذا المثال حجمًا فارغًا مع الحاوية الذي يرتبط بها في آنٍ واحد. أما في المثال القادم فسنرى ماذا سيحدث لو أنشأنا حجمًا ووصلناه إلى مجلدٍ فيه بيانات موجودة مسبقًا في الحاوية. ثالثًا: إنشاء حجم وربطه بمجلدٍ فيه بيانات عمومًا، لا يكون هنالك فرقٌ بين إنشاء حجم باستخدام الأمر docker volume create وبين إنشائه عند تشغيل الحاوية، لكن هنالك استثناءٌ وحيدٌ لهذه القاعدة، ويحدث عندما نُنشِئ حجمًا في نفس وقت إنشاء الحاوية وكان المسار الذي نريد ربط الحجم فيه مجلدًا موجودًا في الصورة الأصلية وفيه بيانات، وفي هذه الحالة ستُنسَخ البيانات الموجودة في ذاك المجلد إلى الحجم. كمثال عن الحالة السابقة، سنُنشِئ حاويةً ونصل الحجم الجديد إلى المجلد ‎/var الموجود مسبقًا في صورة التوزيعة والذي يحتوي على بيانات: docker run -ti --rm -v DataVolume3:/var ubuntu جميع المحتوى الموجود في مجلد ‎/var في الصورة الأصلية سيُنسَخ إلى الحجم، ثم يمكننا وصل الحجم إلى الحاوية الجديدة. وفي هذه المرة، سنُنفِّذ الأمر ls بدلًا من الأمر الافتراضي bash، والذي سيُظهِر محتويات الحجم دون الحاجة إلى الدخول إلى الصدفة: docker run --rm -v DataVolume3:/datavolume3 ubuntu ls DataVolume3 كما توقعنا، سيحتوي الحجم DataVolume3 على نسخةٍ من محتويات مجلد ‎/var في الصورة الأصلية: backups cache lib local lock log mail opt run spool tmp من غير المرجّح أن نصل المجلد ‎/var بهذه الطريقة، لكن قد تستفيد من المعلومات السابقة إذا أردت إنشاء صورة خاصة بك وتريد طريقةً سهلةً للحفاظ على البيانات. سنشرح في المثال الآتي كيفية مشاركة الحجم مع أكثر من حاوية. رابعًا: مشاركة البيانات بين أكثر من حاوية Docker كل ما فعلناه منذ بداية هذا الدرس هو وصل الحجم إلى حاوية واحدة فقط بنفس الوقت، لكننا نرغب عادةً بالسماح بمشاركة البيانات بين أكثر من حاوية عبر وصل الحجم إلى عدِّة حاوية معًا. وهذا سهلٌ جدًا، لكن هنالك مشكلة محورية: لا تدعم Docker حاليًا ميزة التعامل مع قفل الملفات (file locking)، فلو احتاجت أكثر من حاوية إلى الكتابة على الحجم، فيجب أن تكون البرمجيات الموجودة في تلك الحاويات مصممةً لكي تكتب إلى أماكن تخزين البيانات المشتركة، لتجنّب تلف البيانات. إنشاء الحاوية Container4 والحجم DataVolume4 سنستخدم الأمر docker run لإنشاء حاوية جديدة باسم Container4 ووصل حجم جديد إليها: docker run -ti --name=Container4 -v DataVolume4:/datavolume4 ubuntu سنُنشِئ الآن ملفًا ونضع فيه بعض المحتوى النصي: root@db6aaead532b:/# echo "This file is shared between containers" > /datavolume4/Example4.txt ثم سنخرج من الحاوية بالأمر exit. سنعود الآن إلى سطر الأوامر في الجهاز المضيف، حيث سنُنشِئ حاويةً جديدةً ونصل فيها الحجم DataVolume4. إنشاء الحاوية Container5 ووصل الحجم الذي كان موصولًا في Container4 سنُنشِئ حاويةً جديدةً باسم Container5 ونصل فيها الحجم الذي كان موصولًا في Container4: docker run -ti --name=Container5 --volumes-from Container4 ubuntu root@81e7a6153d28:/# cat /datavolume4/Example4.txt This file is shared between containers لنضف بعض النصوص إلى أحد الملفات من الحاوية الثانية: root@81e7a6153d28:/# echo "Both containers can write to DataVolume4" >> /datavolume4/Example4.txt ثم سنخرج من الحاوية بالأمر exit. سنتأكد الآن أنَّ البيانات الجديدة أصبحت متاحةً للحاوية Container4. رؤية التغييرات التي أجريناها في Container5 لنتحقق من أنَّ الحاوية Container5 قد كتبت البيانات على حجم DataVolume4 بإعادة تشغيل الحاوية Container4: docker start -ai Container4 root@db6aaead532b:/# cat /datavolume4/Example4.txt This file is shared between containers Both containers can write to DataVolume4 بعد أن تأكدنا من إمكانية القراءة والكتابة إلى الحجم من كلا الحاويتين، فسنخرج من الحاوية بالأمر exit. أكرِّر أنَّ Docker لا تملك ميزةً لقفل الملفات، لذا يجب أن تقفل التطبيقاتُ الملفاتَ بنفسها. لكن من الممكن وصل حجم Docker للقراءة فقط لكي نضمن عدم حدوث تلف في البيانات نتيجةً لخطأٍ ما، وذلك عبر إضافة الخيار ‎:ro. تشغيل الحاوية Container6 ووصل الحجم للقراءة فقط نستطيع –بعد وصل الحجم إلى الحاوية– أن نفصله ثم نصله مرةً أخرى للقراءة فقط، لكننا نستطيع أيضًا إنشاء حاوية تصل الحجم كما نشاء مباشرةً. وذلك بإضافة ‎:ro بعد اسم الحاوية التي سنحاول وصل الحجم المرتبط بها: docker run -ti --name=Container6 --volumes-from Container4:ro ubuntu سنتحقق من أنَّ الحجم موصولٌ للقراءة فقط بمحاولتنا حذف الملف الذي أنشأناه سابقًا: root@ab63aebe534c:/# rm /datavolume4/Example4.txt rm: cannot remove '/datavolume4/Example4.txt': Read-only file system بعد إغلاق هذه الحاوية (كالمعتاد، بالأمر exit) فيمكننا حذف الحاويات التي أنشأناها إضافةً إلى الحجم: docker rm Container4 Container5 Container6 docker volume rm DataVolume4 لقد رأينا في هذا المثال كيفية مشاركة البيانات بين حاويتين باستخدام الحجوم، بالإضافة إلى طريقة وصل الحجوم للقراءة فقط. الخلاصة أنشأنا في هذا الدرس حجم بيانات الذي يسمح لنا بالاحتفاظ بالبيانات حتى بعد حذفنا للحاوية. وشاركنا حجمًا بين عدِّة حاويات، ونوهنا إلى أهمية أن تكون التطبيقات المستعملة في الحاويات قادرةً على قفل الملفات لمنع تلف البيانات. وفي النهاية شاهدنا كيف يمكن وصل الحجم للقراءة فقط. إذا كنتَ مهتمًا بكيفية مشاركة البيانات بين الحاويات والنظام المضيف، فأنصحك بقراءة درس «كيفية مشاركة البيانات بين حاوية Docker والمضيف». ترجمة -وبتصرّف- للمقال How To Share Data between the Docker Container and the Hostلصاحبته Melissa Anderson
  19. بالنّسبة للمسوّق، قد يكون إرسال الرّسائل الإلكترونيّة التّرويجيّة وسيلة شائعة لتحقيق العائدات، وجزءًا من الأدوات التي يستخدمها في التّسويق. ويمكن أن يكون لوتيرة إرسال تلك الرّسائل تأثيرٌ كبير على إيرادات الشّركة ومعدّلات التّفاعل مع الرّسالة الإلكترونيّة. لكنّ الأمر ليس ببساطة أن ترسل المزيد من الرّسائل الإلكترونيّة لتحقّق المزيد من العائدات. سنكشف لك بعض البيانات المدهشة حول الوتيرة التي يجب اتّباعها في إرسال الرّسائل الإلكترونيّة التّرويجيّة، والأشياء التي يجب أن تأخذها بعين الاعتبار عندما تقرّر وتيرة إرسال رسائلك التّرويجيّة. كيف يستجيب المشتركون للتغيرات في وتيرة الرسائل الإلكترونية؟ يمكن أن يستجيب المشترك في قائمتك البريدية للتغيّرات في وتيرة الرّسائل الإلكترونيّة بإحدى الطّرق الأربعة التّالية: 1. قيام المشترك بإلغاء الاشتراك أو تأشير رسالتك على أنها رسالة مزعجة وهي نتيجةٌ يخشاها المُسوّقون ولا يريدونها أن تحدث. وتجدر الإشارة إلى أنّ استلام الكثير من الرّسائل من المرسل هو السّبب الأوّل الذي يجعل النّاس يلغون اشتراكهم في الرّسائل الإلكترونيّة. أجرى موقع TechnologyAdvice استطلاعًا للرأي طرح فيه سؤالًا على 472 شخص من الولايات المتّحدة الأمريكيّة، حيث كان السّؤال، "ما الأسباب التي تدفعك لوضع إشارة رسالة مزعجة على أي رسالة إلكترونيّة؟" وكانت الإجابات على الشّكل التّالي: وقد وردت وتيرة إرسال الرّسائل مرّة أخرى في الدّراسة نفسها عندما سُئِل المشاركون في الاستطلاع كيف يمكن للمسوّقين إجراء تحسينات على الرّسائل الإلكترونيّة التي يرسلونها؟ حيث كانت الإجابة رقم واحد على هذا السّؤال هي "خفض وتيرة إرسال الرّسائل الإلكترونيّة". وتجاوز عدد الأشخاص الذين اختاروا "خفض وتيرة إرسال الرّسائل الإلكترونيّة" ضعف عدد الذين اختاروا أيًا من الخيارات الأخرى المطروحة. فوتيرة إرسال الرّسائل الإلكترونيّة أمرٌ يهمّ المشتركين كثيرًا. العبرة: إنّ اعتماد وتيرة إرسال الرّسائل الإلكترونيّة، وإرسال رسائل ذات محتوى قيّم، وتخصيص رسائلك كلها أشياء هامّة، ولكنّ الأهم من ذلك هو احترام المشتركين. لقد ولّت أيام التّسويق بإرسال رسائل لأعداد كبيرة على أمل أن تصل إلى الجميع، وأصبح النّاس اليوم يتوقّعون رسائل موجهة بدقّة تمنحهم مايريدون في الوقت الذي يريدونه. قبل أن تقوم بإرسال رسالةٍ إلكترونيّة، سل نفسك، "ما القيمة التي يكتسبها المشترك عند استلام هذه الرّسالة؟" و "كيف يمكنني تقديم محتوى قيّم للمشترك بجعل الرّسالة ذات صلة بالنّسبة إليه؟" 2. يفقد الاهتمام يُعَدّ انخفاض معدّلات فتح الرّسائل وعدد النّقرات على ما ترسله من أكثر التّأثيرات شيوعًا، وقد يحدث هذا الانخفاض إذا بدأت بإرسال الكثير من الرّسائل الإلكترونيّة منخفضة القيمة، وقد تتأثّر مقاييس أخرى أيضًا. نشر موقع Return Path مؤخّرًا بيانات عن تأثير وتيرة إرسال الرّسائل على معدّلات القراءة ومعدّلات الشّكاوى. وقد اخترنا الرّسمين البيانيّين التّاليين من الكتاب الإلكتروني الذي أصدره الموقع مؤخّرًا بعنوان "الوتيرة مهمّة: مفاتيح تحسين وتيرة إرسال الرّسائل الإلكترونيّة". كما تلاحظ في الرّسمين البيانيّين، فقد ازداد عدد الشكاوى بالنّسبة للعديد من المشتركين مع ازدياد وتيرة إرسال الرّسائل الإلكترونيّة. وتناقص معدّل قراءة الرّسائل مع ازدياد الوتيرة، حيث لم يقم القرّاء بمواكبة زيادة العدد. العبرة: قم باختبار وتيرة إرسال الرّسائل على مجموعةٍ صغيرة من القائمة لقياس التّأثير. وتذكّر أنّ زيادة نسبة فتح الرّسائل والنّقرات على ما ترسله بدون حدوث تغيير في عدد الزّيارات أو العائدات قد لا يكون شيئًا إيجابيًا، لذا قم بإجراء الاختبار دائمًا قبل التسرّع والانخراط في زيادة وتيرة إرسال الرّسائل. 3. عدم حدوث أي تغيير ملحوظ قد تكون مضاعفة إرسال الرّسائل الإلكترونيّة وعدم رؤية أيّ تغيير ملحوظ مخيبة لأمل المسوّق، لكنّه أمرٌ قد يحدث. غالبًا ما يستجيب جزءٌ من المشتركين لزيادة وتيرة إرسال الرّسائل بشكلٍ جيّد. حيث تزداد المبيعات والتّفاعل قليلًا. لكنّ قد يختار جزءٌ آخر من قائمة المشتركين التّوقّف عن التّجاوب مع الرّسائل الإلكترونيّة الإضافيّة، ممّا يلغي المكاسب التي تحقّقها من المجموعة الأولى، وبالتّالي يضيع كل ما بذلته من جهد. العبرة: إنّ تجزئة القائمة segmentation طريقة فعّالة لمقاومة حدوث ذلك، حيث يكون باستطاعتك توجيه المحتوى إلى المشتركين المناسبين. ويمكنك تجزئة القائمة بناءً على بيانات مخصّصة تشاركها معك جهات اتّصالك. 4. الحصول على المزيد من المبيعات والتفاعل هذه هي النّتيجة التي يأمل الجّميع الحصول عليها. وقد حصلت شركة التأمين Aviva في المملكة المتّحدة على هذه النّتيجة، ولم تقم الشّركة بمضاعفة وتيرة إرسال الرّسائل الإلكترونيّة فحسب، وإنّما زادت وتيرة إرسال الرّسائل بما يقارب 12 ضعفًا. كانت شركة Aviva ترسل الرّسائل مرّة واحدة في السّنة، وعادةً ما يكون ذلك في الشهر الذي يسبق انتهاء صلاحيّة بوليصة تأمين العميل السّنويّة. لكن بعد التّعاقد مع وكالة الرّسائل الإلكترونيّة البريطانيّة Alchemy Worx، قاموا بوضع خطّة لإرسال المزيد من الرّسائل الإلكترونيّة. وقد فعلت شركة Aviva ذلك بعنايةٍ شديدة بعد القيام بما يلي: إجراء استطلاع للمشتركين لمعرفة نوع المحتوى الذي يرغبون باستلامه زيادة وتيرة إرسال الرّسائل الإلكترونيّة ببطء وكانت النّتيجة على النّحو التّالي: زيادة بنسبة 48% في طلب عروض أسعار التّأمين زيادة بنسبة 304% في عدد النّقرات الفريدة زيادة بنسبة 45 % في عائدات الرّسائل الإلكترونيّة وكمثالٍ آخر عن تعزيز التّفاعل من خلال زيادة معدّل إرسال الرّسائل، زادت شركة التّسويق الرّقمي SimpleRelevance وتيرة الإرسال لموقع سفر من رسالتين شهريًّا إلى رسالة أسبوعيّة. كما أضافت قوالب ديناميكيّة للمحتوى المُخصّص. والنّتيجة على الشّكل التّالي: زيادة بنسبة 278% في متوسّط زيارات الصّفحة شهريًا نقص بنسبة 60% في ارتدادات الرّسائل الإلكترونيّة التي يتم إرسالها هنالك قاسمٌ مشترك مهم بين هاتين الحملتين النّاجحتين، وهو لا يتعلّق فقط بزيادة وتيرة إرسال الرّسائل. فقد خضعت الشركتان لتحسينات كبيرة إلى جانب زيادة وتيرة إرسال الرّسائل. تمّ إجراء استطلاع لمشتركي Aviva لمعرفة المحتوى الذي يريدونه، كما قامت شركة Aviva بإعادة تصميم النّشرة البريديّة. أمّا بالنّسبة لعميل شركة SimpleRelevance، فقد انتقل المشتركون من قالب واحد يناسب الجّميع، إلى محتوى ديناميكي تمّ تصميمه بناءً على طريقة تجاوب المشتركين مع عدّة قنوات اتّصال، وليس فقط البريد الإلكتروني. العبرة: إذا كنت ترغب في زيادة وتيرة إرسال الرّسائل (وخاصةً بالتّزامن مع وقت التّسوّق لأيّام العطلات)، فقد تكون إعادة النّظر في الرّسائل الإلكترونيّة التي ترسلها في نفس الوقت خطوة ذكيّة. وقد لا يمانع المشتركون زيادة وتيرة الرّسائل التي ترسلها طالما أن رسائلك قيّمة. ما هي الوتيرة التي يتبعها المسوقون عبر البريد الإلكتروني في إرسال رسائلهم الإلكترونية؟ وردت أفضل وأحدث البيانات التي تفيد في الإجابة عن هذا السّؤال في تقرير 2015 National Client Email الصّادر عن جمعيّة التّسويق المباشر في المملكة المتّحدة. كما تلاحظ، فإن عدد الرّسائل الإلكترونيّة التي يتم إرسالها شهريًّا متباينة فعلًا. لكنّ المجموعة الأكبر من المسوّقين، أي بنسبة 39%، يرسلون الرّسائل مرّتين إلى ثلاث مرّات في الشّهر. على الرّغم من أنّ هذه الدّراسات جيّدة ومُفيدة، لكن يجب أن تتذكّر دائمًا بأنه لم يتم إجراؤها على القائمة الأكثر أهميّة، ألا وهي قائمتك. ما هي الوتيرة التي يجب أن تتبعها في إرسال رسائلك الإلكترونية؟ لحسن الحظ، فهنالك بعض البيانات التي تشير إلى وتيرة استلام الرّسائل التي يفضّلها النّاس، لكن يجب أن تتذكر أنّ البيانات لا تتضمّن إجابات المشتركين لديك. يعطيك الرّسم البياني التّالي فكرة عن الوتيرة المثلى لإرسال الرّسائل، وهو من موقع MarketingSherpa. وقد تمّ إجراء هذا الاستطلاع في كانون الثّاني/ يناير 2015، بناءً على إجابة 2057 شخص على سؤال، "ما هي الوتيرة استلام الرّسائل الإلكترونيّة التّرويجيّة التي تفضّلها (كالقسائم أو تنبيهات التّخفيضات) إذا كنت ترغب في استلام مثل تلك الرّسائل من الشّركات التي تتعامل معها؟" حصل خيارا "مرّة شهريًا على الأقل" و "مرّة أسبوعيًا على الأقل" على أعلى نسبة تصويت من المشاركين، وجاء خيار "أسبوعيًا" في المرتبة الثّالثة، وكان الخيار الرّابع الذي اختاره معظم المشاركين "شهريًا". الرّسائل الإلكترونيّة الأسبوعيّة فعّالة للغاية، لدرجة أنّ معظم المسوّقين يرسلون الرّسائل بهذه الوتيرة. وقد تكون الرّسائل الشّهريّة فعالة أيضًا، لكنّ هنالك تخوّف دائم من أن يكون إرسال الرّسائل الإلكترونيّة مرّة شهريًا قليلًا لدرجة أن ينسى المشتركون من أنت، وبالتّالي فقد يقومون بحذف الرّسائل التي ترسلها. وفقًا للكتاب الإلكتروني الصّادر عن Return Path، "الوتيرة مهمّة: مفاتيح لتحسين وتيرة إرسال الرّسائل الإلكترونيّة"، فإنّ "قلّة إرسال الرّسائل" قد تسبّب بعض المشاكل الشّائكة، كالمشاكل التّالية: ضعف أو عدم استقرار سمعة المرسل ازدياد معدلات الشكاوى انخفاض القيمة الكليّة للعميل lifetime value (وهي المبلغ الكلي الذي يدفعه العميل طيلة المدّة التي يبقى فيها عميلًا) صعوبات في الحفاظ على قائمة المشتركين ارتفاع خطر الوقوع في شراك مرشّحات الرّسائل المزعجة خسائر في العائدات كما هو الحال دائمًا، فليس هنالك جوابٌ مناسبٌ للجميع، لذا فنحن نشجّعك على اكتشاف أفضل ما يناسب مشتركيك. وأحد الخيارات الجيّدة هو أن تدع كل مشترك يتحكّم بالوتيرة التي يستلم بها الرّسائل الإلكترونيّة من خلال مركز تفضيلات. وهو أمرٌ تقوم به مدوّنة التّسويق بالفيديو ReelSEO بشكلٍ جيّد، فعندما يقوم المشترك بالنّقر على رابط في الرّسالة، يتم تحويله إلى صفحة تفضيلات تشبه الصّورة التّالية ويقدّم مركز التّفضيلات للمشتركين طريقة بسيطة ليختاروا وتيرة استلام الرّسائل الإلكترونيّة التي يرغبون بها، كما يتيح لهم التّحكّم بالاتّصالات. ختاما تتنوّع التّأثيرات التي قد تحدث عند تغيير وتيرة إرسال الرّسائل، فهنالك تأثيراتٌ إيجابيّة وأخرى سلبيّة، وقد يتّخذ المشتركون إحدى الإجراءات التّالية: إلغاء الاشتراك تناقص التّفاعل ازدياد التّفاعل التّفاعل مع الرّسائل الإلكترونيّة الإضافيّة بنفس وتيرة التّفاعل في السّابق من المستبعد أن يقرّر جميع المشتركين اتّخاذ إحدى هذه الإجراءات فقط. لذا ستحصل على نتائج متوازنة، والحلّ الأمثل هو أن تقوم بإجراء اختبار لتعرف أفضل الخيارات المناسبة لقائمتك. إذا قرّرت زيادة وتيرة إرسال الرّسائل، فقم بتحسين رسائلك الإلكترونيّة بإضافة محتوى يساعد في حصول المشتركين على قيمةٍ إضافيّة عند استلام المزيد من الرّسائل الإلكترونيّة منك. ترجمة -وبتصرّف- للمقال The Surprising Data About How Often to Send Promotional Emails لصاحبه PAM NEELY.
  20. المسوّقون يعلمون تمامًا أنّ عملهم يؤثّرعلى أداء الشركة، ويظهر ذلك عادة في عدّة مظاهر كالزيادة الهائلة في عدد زوّار الموقع أو أعداد المشتركين. لكنّهم ربّما لا يعرفون دومًا على وجه التّحديد ما هي النشاطات والأعمال التي تصنع الأثر الأكبر. قبل أن أنضمّ إلى Intercom عملت في الإدارة الماليّة لشركة ناشئة، أضع خطط التّشغيل Operating plans، أجلب التّمويل، أراقب الأرقام، وأرفع التقارير لمجلس الإدارة. وكنتُ دومًا أطلب من فريق التّسويق أن يثبتوا أنّ جهودهم تجلب الأرباح فعلًا، ليس لأنّني كنت أظنّ أنّ ما يعملون عليه لا يضيف أيّة قيمة، إنّما يجب أن يكتب هذا التّقرير أحد لرفعه إلى مجلس الإدارة. والآن كوني أصبحت أنا مدير التّسويق فقد تبدّلت الأدوار، لازلت في عالم الشّركات النّاشئة حيث كلّ دقيقة لها وزنها وكلّ درهم يحتسب، لكنّني مازلت مضطرًّا للإجابة على أسئلتي السّابقة. بغضّ النّظر عن جودة المنتج، على الشّركة أن تشقّ طريقها إلى الحشود وتقنعهم بأن يصبحوا زبائن لها. المهمّة التي أقوم بها الآن، والتي يتطلب جزءً كبيرًا منها الإبداع، ليست سهلة القياس مثل باقي جوانب الشّركة، لكنّها تقع تمامًا في نفس درجة الأهميّة. لذلك حتى أتمكّن من استثمار المال والوقت بالشّكل الأمثل، قبل أن أبدأ بأيّ مهمّة أو مشروع أقف قليلًا وأسأل: ما الأثر الذي ستحدثه هذه المهمّة؟ بل الأهمّ، كيف سأثبت ذلك؟ الخطوة الأولى: حدد الهدف الصحيح الفوارق الدّقيقة تؤثّر أيضًا، فالتّحديد الصّحيح للمخرجات المطلوبة يوضّح لك كيف تصمّم وتنفّذ مشروعك. فبالحديث عن صفحة هبوط مثلًا، هل هدفك أن تساعد النّاس على فهم ما يقدمّه لهم المنتج أم المطلوب منهم أن يقوموا بتسجيل حساب في الموقع؟ إذا كان الهدف توضيح المنتج فعليك أن تسرد المزايا Feature dump وتخبر الزوّار بكلّ صغيرة وكبيرة يحتويها المنتج. بينما إذا كان الهدف زيادة المسجّلين فيجب أن يكون التّصميم مبنيًّا على أساس سرعة إيصال المشكلة التي يحلّها المنتج وعرض زر الدّعوة إلى الإجراء بشكل واضح. وعندما تقوم بالإعلان عن خاصّيّة جديدة، هل الهدف أن تحصل على زيارات أكثر أم على إعجابات كثيرة على الشّبكات الاجتماعية أم زيادة تحميلات/استخدام للمنتج؟ بالتّأكيد الكثير من الزّيارات هو أمر جيّد لكن ذلك لا يعني أنّه عليك أن تراسل جميع المشتركين في قائمتك البريديّة مع كل خاصّيّة جديدة تتم إضافتها. وصحيح أنّ الحصول على الإعجابات مفيد أيضًا لكنّ الصورة الجميلة الجذابة لا تساهم بالضّرورة في تحويل المعجبين إلى زبائن. عوضًا عن ذلك من الأفضل أن يكون هدفك مركّزًا على زيادة مُستخدمي المنتج، وكلّ عنصر من عناصر حملتك الدّعائيّة يجب أن يتمّ بناؤه ضمن هذه الرّؤية. واحرص على أن تستهدف في إعلانك أولئك المستخدمين الذين بإمكانهم فعلًا أن يستخدموا هذا المنتج الذي تقوم بالتّرويج له. مثال عملي: لنفرض أنّني أعلن عن ميّزة جديدة متاحة في برنامج Support Stand ستكون الأهداف التي أحدّدها على النّحو التّالي: الخطوة الثانية: قم بقياس الهدف ربّما سمعت بمقولة "ما يمكن قياسُه، يمكن تحسينه" فإنّك إن لم تتمكّن من إيجاد طريقة لقياس عملك ستظلّ تدور في مكانك بلا فائدة. هذه بعض الأساليب التي نتّبعها في Intercom: أضف رمز تتّبع UTM إلى الرّوابط التي تُروّج لها لتراقب مصدر الزيارات والحملات الدّعائيّة التّابعة لها. ضع هدفًا لقياس مدى تأثير الرّسالة التي توصلها. فعلى سبيل المثال عندما قمنا بالإعلان عن الخاصّيّة الجديدة لربط خدماتنا بفيسبوك، حدّدنا هدف "أن يقوم المشاهد باستخدام الأداة الجديدة"، وكان بإمكاننا حينها قياس مدى تأثير الرّسالة عبر قياس عدد مرّات استخدام الأداة الجديدة. لا تراقب عدد الحسابات الجديدة فحسب، وإنّما راقب أيضًا الصّفحات التي يقوم عليها الزّوار بإنشاء حسابات وفي أيّ جزء من الصّفحة تحديدًا. هذا السّياق الإضافي يعطيك بيانات جديدة، وسيسمح لك بالإجابة على استفسارات من قبيل: هل يقوم الزّوار بالتّسجيل مع أوّل زر تسجيل يُشاهدونه؟ ربّما الإجابة على هذا السّؤال ستدفعك إلى أن تخفّف من المحتوى في صفحة الهبوط، أن تعيد صياغة محتوياتها بأسلوب أبسط، أو أن تحسّن الصّفحة لتصبح سريعة بدل أن تكون جذّابة وبطيئة. الخطوة الثالثة: راقب الهدف لا يُعطي المُسوّقون التّحليلات Analytics اهتمامًا كبيرًا، ويعتقد الكثيرون منهم أن مهمّته انتهت بمُجرّد إطلاق المُنتج، لكن في حقيقة الأمر. يتطلّب الأمر الكثير من الاستثمار والمهارات والمساعدة من فرق أخرى كي تكوّن البنية التحتيّة الصّحيحة لتقيس (وتحسّن) عملك التّسويقي. إليك أربعة طرق يستخدمها فريق التّسويق لدينا لقياس أدائهم: أجر اختبار A/B على رسالتك وصفحات الهبوط لديك. إذا كان أداء الصّفحة التي تحتوي على فيديو أعلى من غيرها فستعلم أنّ عليك استثمار الوقت والمال أكثر على إنتاج مقاطع الفيديو. استخدم أداة Looker لمراقبة الزّيارات traffic ومعدّلات التّحول conversions و العائدات revenue. راقب خرائط تفاعل زوّار صفحات موقعك Heat maps باستخدام أداة Inspectlet. هل تخسر الزّبائن المُحتملين بسبب الصّفحات الطّويلة؟ جرب أن ترفع زر الدّعوة إلى الإجراء إلى الأعلى وراقب إن كان ذلك يحسّن معدّل التّحويل conversion. قم بإجراء دراسة للمستخدمين، من الجيّد أن تجري هذه الدّراسة بعد إحداث تغيير كبير، لكنّ الأفضل أن تجريها قبل ذلك. كثير من هذه الأساليب والأدوات يمكن تطبيقها ضمن ميزانيّة ومهارات محدودة. ومع زيادة الزّيارات traffic على موقعك فحتّى التحسينات الصّغيرة على معدّل التّحويل conversion يمكن أن تؤدي لزيادة كبيرة في عدد الزّبائن. التّسويق هو واحد من أكبر المجالات في عالم الأعمال. يتراوح ما بين المهام الإبداعيّة مثل التّصميم الجرافيكي والكتابة، إلى المهمّات التّقنيّة مثل الإعلانات المدفوعة وتحسين التّوافق مع محرّكات البحث SEO. ويؤثّر التّسويق في كلّ شخص يتفاعل مع علامتك التّجاريّة، وتقريبًا في كلّ فريق في مؤسّستك، لذلك فليس من المبالغة القول أنّ العاملين في مجال التّسويق لهم أكبر تأثير (سلبيّ أو إيجابيّ) على نموّ وأرباح الشّركة النّاشئة. خلاصة القول، أنّك إذا أردت الوصول إلى أفضل نتائج من جهودك التّسويقيّة، واستبدال الجهود غير المثمرة بأخرى أفضل، فكلّ ما عليك أن تفعله هو أن تعتمد مبدأ التّسويق المعتمد على البيانات وستحصل على أفضل ما يمكن الحصول عليه من طاقة الإبداع الكامنة في فريقك. ترجمة -وبتصرّف- للمقال The Power of Data-Informed Marketing لكاتبته Raechel Lambert.
  21. تُعتبر التجزئة عند الاشتراك Segment on Signup من بين أفضل المُمارسات التي يجب على كل مسوّق عبر البريد الإلكتروني الإلمام بها. يُمكن أن نشاهد مثالًا جيّدًا حول الأمر على خدمة Strava، حيث يُطلب من المستخدمين الجدد عند الاشتراك في أداتهم لتتبّع اللياقة البدنية تحديد فيما إذا كانوا من العدائين أو راكبي الدراجات، ثم تتم صياغة رسائل التهيئة حسب الرياضة التي قاموا باختيارها. هذا السّؤال يبدو بسيطًا لكنّه ذو تأثير كبير على تجربة المستخدم. وبالرغم من أنّ العدّائين وراكبي الدراجات يمارسون رياضة مشتركة في طبيعتها، إلا أنّ ثقافتهم الفرعية مختلفة تمامًا. ولذلك سيكون من السيئ إرسال نفس الرسالة للعدّاء وراكب الدرّاجات في حين أنّ حاجتهم إلى رسائل مختلفة جليّة وواضحة. لقد جعلنا هذا الأمر نفكّر حول وسائل أخرى لتحسين تجربة المستخدم بواسطة تجميع البيانات قبل أن نبدأ بإرسال البريد الإلكتروني. لذا تجوّلنا في أنحاء الإنترنت بحثًا عن أمثلة على تدفقات اشتراك Signup flows رائعة أدّت إلى تجربة بريد إلكتروني رائعة، وسنشارككم أدناه ما وجدناه. يمكن استخدام المعلومات التي تطلب من المستخدمين توفيرها عند الاشتراك جنبًا إلى جنب مع تتبّع الأحداث. على سبيل المثال، يمكن أن يستنتج Strava أنني أفضّل رياضة العدو بناءً على الأنشطة التي أقوم بتسجيلها، لكن لن تتوفّر لهم هذه البيانات حتّى وقت لاحق عندما أقوم بالاشتراك واستخدام التطبيق. لذلك من الأفضل في البداية أن تسأل بعض الأسئلة السريعة لتهيئة المستخدمين لاستخدام منتجك/خدمتك في أقرب وقت ممكن. وهذه الطريقة أيضًا مفيدة لمواقع المُحتوى كالمدونات ومواقع الأخبار. في هذه المواقع، لن يقوم المستخدمون بإنشاء حساب يمكن أن يتيح لك تتبّع الأحداث، لذلك يمكن أن يكون تجميع البيانات البسيطة هو المصدر الرئيسي للتجزئة. أثبت قيمتك قبل الاشتراك قامت خدمة Poncho (خدمة الطقس اليومي عبر البريد الإلكتروني) بإنشاء تدفق للاشتراك في البريد الإلكتروني Email signup flows بطريقة تجعل المستخدمين الجدد متحمّسين لتلقّي رسائلهم حتّى قبل أن يشتركوا. إذ يطرحون عبر تدفق الاشتراك أسئلة تثير الفضول، مثل: "هل تريد معرفة كيف يؤثّر اليوم على شعرك؟" أو "هل لديك حساسية من حبوب اللقاح؟". توحي مثل هذه الأسئلة بأنّك ستستلم رسائل ذات صلة عند الإجابة عليها. كما تدلّ على أنّها ليست وسيلة للتحايل. وبناءً على الأجوبة، سيقومون في Poncho بتضمين تلميحات مفيدة في كل رسالة. يعطي تدفق الاشتراك في Poncho تصورًا حول تجربة العملاء التي تلي عملية الاشتراك. توضّح الصور أدناه تدفّق الاشتراك، وأوصيك بالاشتراك بنفسك لتجربة العملية: بالنسبة لـ Poncho، البريد الإلكتروني هو منتجهم، ولذلك يستثمرون في تجميع البيانات مسبقًا لجعل تجربة المستخدم قويّة قدر الإمكان. لكن حتّى وإن لم يكن البريد الإلكتروني هو منتجك الأساسي، فإنّه لا يزال جزءًا من كل منتج. إذ يربط المستخدمون جميع التفاعلات مع شركتك، مثل التفاعلات في التطبيق، الإشعارات، الهاتف، الشبكات الاجتماعية، البريد الإلكتروني، إلخ. ويمكن لتجميع البيانات أن يحدث تأثيرًا متراكبًا، فكلّما كانت التجربة الأولية أفضل، زادت احتمالية تمسّك المستخدم بها. حدد الوقت المناسب لإرسال البريد الإلكتروني تحسين أداء رسائلك الإلكترونية أمر مُهم ويُمكن القيام بذلك عبر خطوات بسيطة. على سبيل المثال من المهم إدارة المناطق الزمنية لمشتركيك بشكل جيّد لكي تُرسل الرسائل في أفضل الأوقات. وتحديد المنطقة الزمنية للمستخدم هو مثال على البيانات المثالية سهلة التجميع والتي يمكن أن تصنع فرقًا كبيرًا في تجربة المستخدم. يرسل Quartz نشرة إخبارية يومية رائعة تحتوي على أفضل أخبارهم اليومية. يُطلب من المستخدمين عند الاشتراك في Quartz تحديد مناطقهم الزمنية لكي يتم التأكّد من تسليم البريد الإلكتروني في وقت مبكّر من صباح كل مستخدم. فببساطة لا يعتبر البريد الإلكتروني الذي يركّز على الأخبار مفيدًا عند استلامه بعد الظهر. يطلب LivingSocial من كل مستخدم جديد تحديد موقعه لكي يتمكّنوا من صياغة المحتوى للصفقات المحليّة وإرسال البريد الإلكتروني في المنطقة الزمنية المناسبة. كما يتيحون للمستخدم خيار ضبط تفضيلات البريد الإلكتروني في كل رسالة. يقوم مندوب المبيعات في العادة بسؤال العملاء الجدد حول احتياجاتهم وتوقعاتهم لتحسين التجربة، ويمكنك اتباع النهج نفسه مع بريدك الإلكتروني. وإذا كنت تريد التأكّد من إرسال رسائلك في الوقت المناسب، يمكن أن يساعدك Vero في تحديد مواقع المستخدمين استنادًا إلى عنوانIP الخاص بهم، ومن ثم السماح لك بإرسال كلّا من النشرات الإخبارية والحملات السلوكية في مناطقهم الزمنية. ابنِ توقعات واضحة لا أحد يتفوّق على مخططي حفلات الزفاف في هذا الأمر، فهم يملكون مواعيد نهائية صارمة، لذلك يساعدهم تجميع البيانات على بناء توقّعات واضحة. يستخدم The Knot، موقع لتخطيط حفلات الزفاف، نفس الاستراتيجية مع المستخدمين الجدد. ولا تزعج أسئلتهم المستخدم لأنّها تبني توقعات. من السهل تنفير المشتركين المحتملين عند الإلحاح عليهم بالأسئلة. لذلك يجب أن توحي لهم من خلال الأسئلة بأنّك ستستخدم الإجابات في تقديم شيء مفيد لهم لكي تحافظ هذه الاستراتيجية على تفاعل المستخدم. وقد تم تطبيق هذا الأمر في The Knot بواسطة الإنشاء الودّي والأسئلة الواضحة. هل بوسع الشركات الأخرى عكس هذه الاستراتيجية؟ بالطبع بوسعهم القيام بذلك، لكنّ أغلب الشركات لا تتعامل مع المواعيد النهائية الصارمة مثل مواعيد الزفاف. مع ذلك، ليس من الصعب بناء توقعات واضحة والتي تؤدي حتمًا إلى تحسين تجربة المستخدم. يستخدم The Knot الاستراتيجية عينها مع مواقعه الشقيقة؛ The Bump (موقع مخصص للآباء)، و The Nest (موقع مخصص للمتزوجين حديثا). على سبيل المثال، يسأل The Bump المستخدمات الجديدات فيما إذا كنّ مقبلات على الحمل، حوامل حاليًا، أو أنّهنّ أمهات بالفعل. وبما أنّ المستخدمات في كلّ من هذه الأدوار لديهنّ احتياجات مختلفة، يمكن أن يحدد The Bump باستخدام البيانات التي حصل عليها نقاط آلامهن pain points ويرسل رسائل مفيدة مع محتوى موجّه. وبالنتيجة تضمن هذه الاستراتيجية إرضاء جميع الأطراف. وفر إشعارات مفيدة فعلا كتب Alex Potrivaev مؤخرًا على مدونة Intercom: "لا تزال الإشعارات عالقة في عام 1999". والسبب هو أنّ المسوّقين ومدراء المنتج يقومون بإرسالها للأحداث غير المهمة. صحيح أنّها من الوسائل السهلة لزيادة التدفّق قليلًا، لكنّها تكون محبطة جدًا للمستخدمين عند إرسالها بمعلومات غير مفيدة. وهناك طريقة للجمع بين الإشعارات والتجزئة لتحسين التجربة. على سبيل المثال، عندما أطلقت شركة Garmin ساعة GPS الجديدة قبل بضعة أشهر، قاموا بإنشاء صفحة منتج قبل أن يتم توفيرها، وطلبوا من مشاهدي الصفحة الاشتراك في تنبيه عبر البريد الإلكتروني ليتم إعلامهم بوقت الإطلاق. وبالنتيجة أصبح الإشعار مفيدًا ومن المرجّح أن يؤدي إلى توليد المبيعات، فضلًا عن البيانات التي حصلوا عليها لاستخدامها في التجزئة. وبمجرّد تجميع البريد الإلكتروني، يمكن أن تستنج Garmin بعض المعلومات حول المستخدمين الذين هم على الأرجح من الرياضيين، المهتمّين بالتكنولوجيا، ولديهم بعض الدخل الزائد لإنفاقه على الأدوات (مثل هذه الساعة). وينبغي لهذه المعلومات أن تساعدهم على إنشاء رسائل فعّالة في المستقبل. من السهل استخدام هذه الاستراتيجية مع المنتجات التي نفد مخزونها، إطلاقات المنتجات الجديدة، وحتّى الدعوات الخاصّة إلى حدث أو تطبيق جديد. تستخدم شركة Distilled نفس الاستراتيجية لسلسلة مؤتمراتهم الشعبية؛ SearchLove. فبالرغم من أنّ التذاكر لحدث 2017 San Diego غير متوفّرة بعد، إلا أنّه يمكنك الاشتراك للحصول على التحديثات بهذا الخصوص. هذه البيانات قيّمة جدًا. وستساعد على جعل محتوى البريد الإلكتروني متوقعًا ومنتظرًا عند وصوله إلى المشتركين. ليست هناك رسالة مبيعات أفضل من إعلان يُرسل إلى قائمة انتظار. ترجمة -وبتصرّف- للمقال Segment on Signup: Collect the Data Before You Send the Emails لصاحبه: Jimmy Daly.
  22. لقد دخل التسويق إلى العالم الرقمي شأنه في ذلك شأن جميع العناصر الأساسية في ريادة الأعمال، ونتيجة لهذا التحول، أصبح بالإمكان قياس جهودنا المبذولة في التسويق بشكل لم يسبق له مثيل ، الأمر الذي دفع المسوقين إلى الوقوع في حبّ المعلومات والبيانات - إن صح التعبير - وهو حبّ غامر من قمة الرأس إلى أخمص القدمين، ويتجاوز الحدود ليكون الموجّه الرئيسي لعملية التسويق بدلًا من أن تستند عملية التوجيه هذه إلى الأشخاص من مثلي ومثلك. ولأكون صريحًا معك، فإنّي أحب البيانات أيضًا، فأنا أحمل شهادة البكلوريوس في الهندسة، وشهادة الماجستير في إدارة الأعمال، وأعتبر البيانات درعًا واقية لي، ولكنّي لا أرغب في أن تكون الموجّه الوحيد لعملية التسويق في Wistia. أعتقد أنه يجدر بعملية التسويق أن تكون مطّلعة على البيانات Data-informed وليست موجّهة بها Data-driven. التسويق المطلع على البيانات Data-informed marketing في حالة التسويق المطّلع على البيانات، لا يتم التركيز على البيانات فقط، وإنّما تعدّ من أحد العوامل التي تؤخذ بنظر الاعتبار عند اتخاذ القرارات التسويقية، حيث يتم الاعتماد على البيانات المتعلّقة، والخبرات السابقة، والحدس والمدخلات النوعية لغرض الوصول إلى القرار التسويقي الأفضل. وبدلًا من التأمّل الطويل في البيانات أملًا في الحصول على إجابات، نبدأ بتطوير نظرية وفرضية بادئ الأمر، وتخضع هذه الفرضية للاختبار فيما بعد. كذلك نجبر أنفسنا على اتخاذ المزيد من القرارات الحدسية، ولكننا في نفس الوقت نثبت صحّة اختياراتنا بالاعتماد على البيانات ما أمكن ذلك، لتصبح قراراتنا الحدسية أكثر ذكاءً مع مرور الوقت. بعض المشاكل الشائعة المتعلقة بالبيانات إن المشاكل التي نواجهها في عملية التسويق الموجّه بالبيانات ناجمة عن وجود بعض المشاكل في طريقة استخدامنا للبيانات، ومنها: فخ سهولة القياس عندما نسمح للبيانات بتوجيه عملية التسويق، فإنّنا غالباً ما نكون متفائلين حيال الأشياء التي يمكن قياسها بسهولة، وليس الأمور ذات الأهمية العالية. هناك بعض النتائج التي يمكن قياسها بسهولة، وهناك بعض النتائج التي لا يخلو قياسها من شيء من الصعوبة. فعلى سبيل المثال: من السهل قياس عدد النقرات على رسالة إلكترونية، ولكن من الصعب قياس الأثر العميق الذي تركته صفحة هبوط ذات تصميم ممتاز. وقياس نسبة التحويل للزائرين الذين يصلون إلى صفحة الأسعار أمر سهل، ولكن من الصعب معرفة الكلام الدائر حول إحدى حملات الفيديو الخاصّة بك. كما ترى، فعلى الرغم من وجود بعض النتائج التي يسهل قياسها، إلا أنّ كلا النوعين من النتائج، أعني تلك النتائج سهلة القياس والأخرى التي يكون قياسها صعبًا، يعدّان أساسيين لتقدير أداء عملية التسويق. فخ التحسين المحلي local optimization يمكن الوقوع في فخ التحسين المحليّ عند محاولة تحسين جزء معيّن من قمع التسويق، ونحن نواجه هذا التحدي بشكل دائم في Wistia عندما نحاول زيادة معدل تحويل الزوّار الجدد. على أن تحسين معدل التسجيل في الموقع يعدّ مشكلة تحسين واضحة نسبيًا، ويمكن حلها بإجراء بعض الاختبارات الأساسية. غير أن المشكلة تكمن في أنّنا لا نرغب فقط في أن يسجل الزائر في خطّتنا المجانية، بل نرغب في أن يسجّل في الخطّة المجانية، ثم يستفيد من حسابه على الموقع، ثم يعبر للآخرين بعد ذلك عن مدى إعجابه بـ Wistia، ويشترك في نهاية المطاف في إحدى خططنا المدفوعة (وتتولّد لديه خلال هذه الفترة المزيد والمزيد من المشاعر الإيجابية تجاه علامتنا التجارية). وهذه مشكلة تحسين صعبة؛ ذلك لأنّ علينا متابعة زائر الموقع الإلكتروني بعد أن يتحوّل إلى مستخدم للتطبيق، ثم إلى عميل. ويجب علينا متابعة هذه العملية التي قد تستغرق أسابيع أو شهورًا، على العكس من عملية التسجيل التي تستغرق عادة دقائق معدودة. إن التحسين المحلي يجعل إدارة البيانات أكثر سهولة، ولكن الاستعجال في الحصول على المكاسب قد يدفعنا إلى تبسيط أهدافنا التسويقية بشكل كبير، لينتهي بنا الأمر إلى إجراء التحسينات لبعض النتائج الوسطية والتي قد لا تطابق بالضرورة أهدافنا الكبرى في مشروعنا التجاري. فخ جودة البيانات نادرًا ما نشكّك وننتقد بياناتنا الخاصة بالشكل الصحيح، خذ مثلًا اختبارات A/B والتي تحولت إلى المعيار الذهبي لاختبارات التسويق. يجب أن تنتج هذه الاختبارات من الناحية النظرية نتائج دقيقة وقابلة للتكرار، لأنّ توجيه الزوّار إلى كل بديل في الصفحة يكون بشكل عشوائي. هذا من الناحية النظرية، أما من الناحية العملية، فهناك العديد من الطرق التي تؤدي إلى إعطاء نتائج مضللة من أبسط أنواع اختبارات A/B. إن كان عدد الزوّار في موقعك مقاربًا لموقعنا، فإنّ الزوّار يصلون إليه من مصادر شتّى: عمليات البحث، زيارات مباشرة، الإحالات، البحث المدفوع وغيرها الكثير. وإن كانت نسبة التحويل لإحدى هذه المصادر أعلى من البقية، فستحصل وبكل سهولة على نتائج منحرفة وذلك بسبب التعامل مع الزوّار كجمهور مفرد ومنتظم. إن لم تكن مقتنعًا لحدّ الآن، جرّب إجراء اختبار A/A حيث تنشئ بديلين متطابقين، وبوجود عينة كبيرة بما فيه الكفاية، وستبشّر رئيسك في العمل بزيادة نسبة التحويل بمقدار 4% دون إحداث أي تغيير يذكر. الحذر من البيانات يجب علينا كمسوقين أن لا نتوقف عن اكتشاف طرق جديدة لاستغلال قوة البيانات، وفي نفس الوقت علينا توخّي الحذر من الاعتماد المفرط على هذه البيانات. يمكن للبيانات أن تكون مصدرًا كبيرًا للإلهام، وعليك استغلال هذا المصدر، ولكن لا تفرط في الاعتماد عليها. ترجمة -وبتصرّف- للمقال The Dangers of Data-Driven Marketing لصاحبه Ezra Fishman.
  23. تُستخدم المخططات لتمثيل جداول البيانات الرقمية بشكل مرئي وبمختلف التخطيطات، مما يساعدك على فهم العلاقة بين البيانات بسهولة وسرعة. فلا تحتاج إلى مراجعة كل رقم على حدة لمعرفة أيها أكبر وأيها أصغر، مثلا، في جداول البيانات التي قد تكون كبيرا جدا والتي تسبب إضاعة وقتك مقابل الجهد الكبير. يوفّر مايكروسوفت اكسل مجموعة متنوّعة وكبيرة من المخططات التي يمكنك استخدامها لكل نوع من أنواع البيانات. لكن مع هذا التعدد في أنواع المخططات، قد يكون من الصعب أو المحيّر أحيانا اختيار نوع المخطط المناسب لبياناتك. إذا كيف يمكنك اختيار المخطط المناسب؟ الأمر أصبح أسهل بوجود أمر المخططات المستحسنة Recommended Charts. عليك أولا أن تقوم بتحديد البيانات (أو جزء منها) التي تريد تمثيلها على شكل مخطط، ثم انقر فوق المخططات المستحسنة من تبويب إدراج Insert: من مربع الحوار إدراج مخطط وفي تبويب Recommended Charts ستُعرض مجموعة من المخططات التي تُلائم نوع البيانات التي حددتها مع معاينة لشكل المخطط ووصف لاستخدام المخطط. يمكنك اختيار أحد المخططات المقترحة: أو يمكنك النقر فوق تبويب كافة المخططات All Charts إن كنت ترغب في استعراض المزيد من الخيارات. هناك مجموعة من التصنيفات، وتحت كل تصنيف تندرج مجموعة من المخططات بطرق عرض مختلفة للبيانات. استكشف هذه المجموعة بنفسك لتعثر على ما يناسب بياناتك، ومرر الفأرة فوق أحد المصغرات لمعاينتها بشكل أكبر. بعد تحديد المخطط المطلوب انقر موافق OK: وكذلك، يمكنك معرفة المخطط المناسب بتمرير الفأرة فوق أيقونات المخططات من خانة مخططات Charts في تبويب إدراج Insert، إذ سيُعرض تلميح بسيط يخبرك متى تستخدم هذه المخططات ومتى تكون مفيدة: مثلا يخبرنا التلميح (الموضح في الصورة أعلاه) أن المخطط الدائري يُستخدم لعرض نسبة كل جزء من المجموع الإجمالي. انقر على السهم بجانب كل أيقونة لاستعراض بقية الأشكال لهذا المخطط. كيفية إنشاء المخطط كما ذكرت في الفقرة أعلاه، لإنشاء المخطط يجب أن تقوم بتحديد البيانات أو جزء البيانات التي تريد تمثيلها بشكل مخطط. بعدها انقر فوق المخططات المستحسنة Recommended Charts أو انقر فوق أحد أنواع المخططات من خانة Charts لتُعرض قائمة الخيارات: لاحظ أنّه بمجرد تمريرك الفأرة فوق نوع المخطط سيُنشأ المخطط في ورقة العمل كمعاينة مباشرة، وسيظهر تلميح أيضا يدلّك على الحالات التي يستخدم فيها هذا النوع. عندما تقرر نوع المخطط الذي يناسبك انقر فوقه بزر الفأرة الأيسر لكي يتم إدراجه: يمكنك نقل المخطط من منطقة إلى أخرى داخل ورقة العمل بالنقر فوق أي مساحة فارغة داخل المخطط والسحب إلى المنطقة المرغوبة. لاحظ عند تحديد المخطط ظهور تبويبين سياقيين يحتويان على مجموعة من الأوامر الخاصة بتنسيق المخطط وتصميمه. كما تظهر ثلاث أيقونات بجانب المخطط توفر وصولا سريعا لمجموعة من الأوامر الخاصة بتصميم المخطط: من أيقونة + يمكنك إلغاء تأشير/تأشير عناصر المخطط التي تريد إزالتها/إضافتها إلى المخطط، كخطوط الشبكة، المحاور، إلخ. ومن أيقونة الفرشاة يمكنك تغيير ألوان المخطط أو نمطه. أما أيقونة القمع فتُستخدم لعمل تصفية لنقاط البيانات وأسمائها التي لا ترغب في عرضها في المخطط. سنقوم مثلا بإضافة عنوان للمخطط، بالنقر فوق أيقونة + وتأشير خيار عنوان المخطط Chart Title: بعد إضافة مربع العنوان سنقوم بتحديد النص (chart title) داخل المربع لحذفه وإضافة العنوان المناسب. كما سنقوم بتغيير ألوان المخطط بالنقر فوق أيقونة الفرشة ومن تبويب ألوان Colors: يمكنك الوصول إلى هذه الخيارات من تبويب تصميم Design السياقي أيضا كما سنشرح لاحقا في هذا المقال. تخصيص نصوص المخطط بإمكانك تنسيق النصوص داخل المخطط تماما كما تفعل بأي نص آخر في ورقة العمل من خلال الأوامر الخاصة بتنسيق النصوص في تبويب الصفحة الرئيسية. لتنسيق النصوص، ولتكن نصوص المحور الأفقي مثلا، حددها أولا بالنقر بزر الفأرة الأيسر فوق المحور ليظهر مربع التحديد ذو المقابض الأربعة، ثم اذهب إلى تبويب الصفحة الرئيسية Home وأجر التغييرات المرغوبة: بإمكانك، مثلا، تغيير اللون، الحجم، السمك، أو ميل النص. لكنّ اكسل يوفّر أكثر من ذلك بكثير فيما يتعلّق بتخصيص النصوص. للوصول إلى الخيارات المتقدمة حدّد عنصر المخطط (الذي يحتوي على نصوص)، انقر بزر الفأرة الأيمن واختر تنسيق Format (بما أنّني حددت عنوان المخطط فالخيار هنا هو تنسيق عنوان المخطط Format Chart Title): ستُفتح لوحة التنسيق. كما تلاحظ يوجد تبويبان. الأول، خيارات العنوان Title Options، وهو يحتوي على الخيارات المتعلقة بالمربع الذي يحتوي النص. والثاني، خيارات النص Text Options، وهو يحتوي على الخيارات المتعلّقة بالنص داخل مربع العنوان، وهو ما يهمنا هنا. وفي داخل تبويب خيارات النص توجد ثلاثة تبويبات فرعية. الأول يحتوي على خيارات تعبئة وحدود النص. يمكنك من خلاله، مثلا، اختيار تعبئة خالصة، أو تعبئة متدرجة، بالإضافة إلى تغيير إعدادات التدرج كالاتجاه، السطوع، الشفافية، وغيرها. أما التبويب الثاني فهو يحتوي على تأثيرات النصوص، كالانعكاس، التوهّج، إلخ. وكل من هذه الخيارات تحتوي على نماذج جاهزة يمكنك استخدامها. أو يمكنك إنشاء تأثيراتك الخاصة. مثلا، تستطيع إضافة ظل للنص Shadow من نماذج الظلال الجاهزة لإعطائه مظهرا أكثر عمقا: أو إضافة توهج Glow لإبرازه أكثر: كما تستطيع إضافة انعكاس Reflection كنوع من اللمسات الفنية: جرّب واستكشف هذه الخيارات بنفسك، وقم بتغيير الإعدادات الخاصة بكل تأثير إلى أن تصل إلى النتيجة المطلوبة. وبإمكانك دائما إلغاء أي تأثير قمت بإضافته باختيار النموذج بلا No من القائمة: ملاحظة: التأثيرات Soft Edges ،3D-Format، و 3D Rotation غير مفعّلة لأنها مخصصّة لنصوص WordArt. أما التبويب الثالث فيحتوي على بعض خيارات مربع النص كالمحاذاة والاتجاه. عند تنسيق النصوص، يفضل ألّا تختار تأثيرات تؤثر على قابلية القراءة خصوصا إذا كنت تطبقها على نقاط المحاور. بعد الانتهاء من تطبيق كافة التنسيقات المرغوبة أغلق لوحة التنسيقات بالنقر فوق أيقونة ×. تنسيق المخطط إنّ ما يميز مخططات Excel هو أنّ كل عنصر فيها قائم بحد ذاته، وبذلك يملك كل عنصر تنسيقاته الخاصة. وهنا يجب أن تنتبه إلى العنصر الذي تحدده عند إجراء التنسيقات. يمكنك الاستفادة من التلميح الصغير الذي يظهر عند تحريك المؤشر داخل المخطط. لاحظ (في الصورة أدناه) التغيّر بين منطقة المخطط chart area ومنطقة الرسم plot area بمجرد تحريك الفأرة حركة صغير. استدل بهذه التلميحات لتحديد الجزء الذي ترغب في تنسيقه بالضبط. لتغيير نمط المخطط حدّد منطقة المخطط أولا ثم اذهب إلى تبويب تصميم Design السياقي: يمكنك تمرير الفأرة فوق الأنماط Styles المختلفة لعرض معاينة مباشرة، وعندما تحدد النمط المرغوب انقر بزر الفأرة الأيسر فوقه لاختياره. يمكنك القيام بتغيير النمط أيضا من أيقونة الفرشاة بجانب المخطط كما ذكرنا أعلاه. لديك أيضا خيار تغيير ألوان النمط نفسه الذي اخترته من أيقونة تغيير اللون Change Color، إذ تتوفر العديد من المجاميع الجاهزة من الألوان: وإذا رغبت في اختيار تخطيط مختلف عن التخطيط الافتراضي للمخطط، انقر فوق زر تخطيط سريع Quick Layout: يمكنك اختيار تخطيط لا يحتوي على خطوط الشبكة، أو آخر يُظهر نقاط البيانات فوق المخطط. مرر فوق كل تخطيط لمعاينته مباشرة. إذا رأيت أنّ عناصر المخطط تبدو مكتظة، قد تُفيدك إعادة تحجيمه بالنقر فوق أحد مقابض الزوايا handles ثم سحبها. ولتنسيق كل عنصر على حدة، قم بتحديد العنصر، ثم انقر بزر الفأرة الأيمن واختر تنسيق Format. سنقوم هنا، مثلا، بتنسيق الأعمدة، بتحديدها، النقر بزر الفأرة الأيمن ثم اختيار تنسيق سلاسل البيانات Format Data Series (سيتغير هذا الخيار بتغيّر العنصر): من الخيارات المتاحة، تغيير شكل السلسة من مكعبات إلى أشكال مخروطية Cone، أسطوانية Cylinder، إلخ. كما يمكنك تغيير عرض المسافة بين الأعمدة وعمقها. بعد الانتهاء من تنسيق العنصر الأول حدد العنصر الثاني الذي ترغب في تنسيقه. سنقوم، مثلا، بإضافة لون متدرج لأرضية المخطط Floor: أو تغيير لون خطوط الشبكة Gridlines: يمكنك الذهاب إلى أبعد الحدود في تنسيق المخطط. اختر نمطا مقاربا للشكل المرغوب من الأنماط الجاهزة ثم ابدأ بالتعديل عليه إلى أن تصل إلى النتيجة المطلوبة. كيفية إنشاء المخططات المصغرة Sparklines وتعديلها Sparklines (وتُسمى خطوط المؤشرات في النسخة العربية من اكسل) هي مخططات مُصغرة يُناسب حجمها حجم خلية واحدة. تُستخدم هذه المخططات الصغيرة لعرض الاتجاهات في سلسلة محددة من البيانات عندما لا تكون بحاجة إلى خصائص المخطط الكامل. وهذه مفيدة في جداول البيانات التي تحتوي على عدد كبير من الصفوف حيث يكون تمثيل البيانات في مخطط كبير ورؤية العلاقة بينها صعبا. مثلا، لو قمنا بعرض الجدول أدناه في مخطط كامل سيكون من الصعب تمييز الزيادة والنقصان في المبيعات لكل منتج، لأنّ خطوط الاتجاه متشابكة جدا: أما عند استخدام المخططات المصغرة، ستكون ملاحظة الاتجاهات سهلة وواضحة. لإنشاء مخطط مصغّر، قم بتحديد الخلية التي تريد عرضه فيها أولا، ثم اذهب إلى تبويب إدراج Insert وانقر فوق أحد نماذج المصغرات من خانة خطوط المؤشرات Sparklines: من مربع الحوار إنشاء خطوط المؤشرات قم بتحديد سلسلة البيانات التي ترغب في تمثيلها، ثم انقر موافق OK: سيتم إدراج المخطط المصغر داخل الخلية: إذا كنت ترغب في إنشاء مخطط مصغر لنطاق من البيانات، يمكنك إنشاءه لصف واحد من البيانات ثم استخدام زر التعبئة لعمل تعبئة تلقائية AutoFill لبقية الصفوف: أو بطريقة أخرى، حدد الخلية التي تريد إظهار أول مخطط مصغر فيها، اذهب إلى تبويب إدراج Insert وانقر فوق أحد نماذج المخططات المصغرة. في حقل نطاق البيانات Data Range حدد جميع الصفوف التي تريد تمثيلها في مخططات مصغرة: وفي حقل نطاق الموقع Location Range حدد جميع الخلايا التي تريد إظهار المخططات فيها ثم انقر موافق OK: تنسيق المخططات المصغرة عند تحديد أحد المخططات المصغرة، أو جميعا سيظهر تبويب تصميم Design السياقي، يمكنك من خلاله اختيار نمط مختلف للمخططات من معرض الأنماط: كما يمكنك تمييز النقاط العليا، النقاط الدنيا، نقطة البداية، إلخ بلون مختلف من خانة عرض Show: أو اختيار لون مخصص للمخطط ككل من أمر لون خط المؤشر Sparkline Color، أو لون النقاط العليا، النقاط الدنيا، إلخ من أمر لون العلامة Marker Color: ولتغيير نوع المخطط، انقر فوق الشكل المرغوب من خانة النوع Type: إذا رغبت في إزالة المخططات المصغرة، قم بتحديدها وانقر فوق زر مسح Clear من تبويب تصميم Design:
  24. إنّ أحد أهم الاعتبارات التي يجب أخذها بالحسبان عند تخزين عملنا وبياناتنا في بيئة رقميّة هو كيفيّة التّأكّد من أنّ المعلومات الخاصّة بنا ستكون متاحة في حال وجود مشكلة، قد يعني هذا أشياء مختلفة بالنظر إلى التطبيقات التي نستخدمها، مدى أهميّة الحصول على فشل فوري ونوعية المشاكل التي نتوقّعها. سنقوم في هذا الدّرس بمناقشة بعض الطرق المختلفة لتوفير النسخ الاحتياطي ووفرة البيانات data redundancy، ولأنّ حالات الاستخدام المختلفة تتطلّب حلولًا مختلفة فلن نكون قادرين على إعطاء إجابة تناسب جميع الحالات، ولكن سنتعلّم ما هو الشيء المهم في حالات مختلفة وما هو التّنفيذ implementation (أو التّنفيذات implementations) الأكثر مُلاءَمة لهذه العمليّة. سنناقش في هذا الدرس الحلول المختلفة التي يُمكننا استخدامها للنسخ الاحتياطي والمزايا النسبيّة لكلّ واحدة منها بحيث نستطيع اختيار الخطّة التي تناسب البيئة التي نعمل عليها. ما الفرق بين وفرة البيانات Redundancy والنسخ الاحتياطي Backing Up؟غالبًا ما نجد تداخل في معظم الحالات بين المصطلحين وفرة البيانات redundant والنسخ الاحتياطي backup، وهما مفهومان مميّزان مرتبطان ببعضهما ولكنّهما مختلفان، وبعض الحلول تُوفِّرهما معًا. 1. وفرة البيانات Redundancyتعني وفرة البيانات وجود تجاوز للفشل failover فوري في حال وجود مشكلة في النّظام، والمقصود من تجاوز الفشل أنّه في حال أصبحت مجموعة من البيانات غير متوفّرة فسيتمّ استبدالها فورًا بنسخة كاملة لتحلّ محلّها، وينتج عن هذا زمن إيقاف تشغيل down time غير مُلاحظ تقريبًا ويستطيع التطبيق أو الموقع مواصلة تخديم الطلبات وكأنّ شيئًا لم يكن، وفي هذه الأثناء يملك مدير النظام الفرصة لإصلاح المشكلة وإعادة النظام إلى الحالة التي يعمل فيها بشكل تام. وبينما يبدو هذا وكأنّه حل رائع لتخديم النسخ الاحتياطي فإنّ هذا في الحقيقة فكرة خاطئة خطيرة، فلا تُزوِّدنا وفرة البيانات بحماية ضدّ الفشل الذي يؤثر على كامل الآلة أو النّظام، على سبيل المثال إن كُنّا نملك mirrored RAID مضبوط (مثل RAID1) فستكون بياناتنا متوافرة فيه وفي حال فشل أحد الأقراص سيبقى الآخر متوافرًا، ولكن إن فشلت الآلة نفسها فقد نفقد جميع البيانات الخاصّة بنا. ومن مساوئ هذا النوع من الإعداد أنّ كل عمليّة يتمّ تنفيذها على كل نسخة من البيانات، ويتضمّن هذا العمليّات الخبيثة malicious أو التي تمّت بغير قصد، يُمكّننا حل النّسخ الاحتياطي الصحيح الاستعادة من نقطة سابقة حيث كانت البيانات معروفة بكونها بحالة جيّدة. 2. النسخ الاحتياطي Backupكما أشرنا سابقًا فإنّه من المُحتّم علينا الحفاظ على نُسَخ احتياطيّة تعمل بشكل جيّد لبياناتنا الهامّة، واعتمادًا على الموقف فقد يعني هذا النسخ الاحتياطي للتطبيق أو لمعلومات المستخدمين أو حتى لكامل الموقع أو الآلة، والفكرة من وراء النُسَخ الاحتياطيّة أنّه في حال حدوث فقدان في النّظام أو الآلة أو البيانات فإنّنا نستطيع استعادة restore، إعادة نشر redeploy، أو الوصول إلى بياناتنا، قد تتطلّب الاستعادة من نسخة احتياطيّة زمن إيقاف تشغيل، ولكن يوجد فرق بين البدء من نقطة في اليوم السابق والبدء من الصفر، أي شيء لا نستطيع تحمل خسارته -بالتعريف- يجب علينا عمل نسخة احتياطية له. ومن حيث الأساليب يوجد عدد قليل من المستويات المختلفة للنُسَخ الاحتياطيّة يُمكن تصنيفها إلى عدّة طبقات بحسب الحاجة إلى حساب أنواع مختلفة من المشاكل، على سبيل المثال ربّما نقوم بالنسخ الاحتياطي لملف الإعدادات configuration file قبل تعديله وذلك لكي نستطيع العودة بسهولة إلى الإعدادات القديمة قبل أن تنشأ المشكلة، يكون هذا مثالي للتغيرات الصغيرة التي نستطيع مراقبتها بشكل فعال، ولكن هذا الإعداد سيفشل على نحو بائس في حال فشل القرص أو أي شيء أكثر تعقيدًا، ينبغي علينا أيضًا الحصول على نُسَخ احتياطيّة بشكل منتظم وتلقائي إلى موقع بعيد remote location. النُّسَخ الاحتياطيّة بحد ذاتها لا تزوّدنا بتجاوز الفشل تلقائيًا، وهذا يعني أنّ الفشل لن يُكلّفنا خسارة أيّة معلومات (على اعتبار أنّ النُسَخ الاحتياطيّة التي نملكها حديثة 100%)، ولكن قد يُكلفنا زمن تشغيل Uptime، وهذا هو أحد الأسباب التي تجعلنا نستخدم وفرة البيانات والنَسخ الاحتياطي جنبًا إلى جنب بدلًا من أن تُلغي كلّ واحدة منهما الأخرى. النسخ الاحتياطي على مستوى الملف File-Level Backupإنّ النَسخ الاحتياطي على مستوى الملف هو واحد من أشيع أشكال النَسخ الاحتياطي، يستخدم هذا النّوع من النَّسخ الاحتياطي أدوات النسخ الاعتياديّة الموجودة مع النّظام لنقل الملفات إلى موقع أو جهاز آخر. 1. كيفية استخدام الأمر cpأبسط أشكال النَّسخ الاحتياطي لآلة تعمل بنظام لينِكس مثل الـ VPS هي عن طريق الأمر cp، ينسخ هذا الأمر ببساطة الملفات من موقع محلّي local إلى موقع آخر، ونستطيع على حاسوب محلّي وصْل mount قُرص قابل للإزالة وبعدها نسخ الملفات إليه: mount /dev/sdc /mnt/my-backup cp -a /etc/* /mnt/my-backup umount /dev/sdcيقوم هذا المثال بوصْل قرص قابل للإزالة ومن ثُمّ ينسخ الدّليل etc/ إلى القرص، وبعدها يقوم بإلغاء وصْل unmount القرص، والذي يُمكننا تخزينه في مكان آخر. 2. كيفية استخدام الأمر Rsyncإنّ الأمر rsync هو بديل أفضل للأمر cp، حيث يُمكّننا من إجراء نُسَخ احتياطيّة محليّة مع قَدْر أكبر من المرونة، نستطيع تنفيذ نفس العمليّات السابقة باستخدام rsync عن طريق الأوامر التالية: mount /dev/sdc /mnt/my-backup rsync -azvP /etc/* /mnt/my-backup umount /dev/sdcوفي حين أنّ هذا يبدو بسيطًا حتى هذه النقطة، إلّا أنّنا سندرك بسرعة أنّ النَّسخ الاحتياطي على نظام ملفّات محلّي مرهق ومُعقّد، حيث يجب علينا فيزيائيًا وصْل وفصْل قرص النَسخ الاحتياطي ونقله إلى مكان آخر إن أردنا الحفاظ على المعلومات في حال حدوث سرقة أو حريق، نستطيع تحقيق الكثير من نفس المزايا باستخدام النَسخ الاحتياطي عبر الشبكة. يستطيع الأمر Rsync تنفيذ نُسخ احتياطيّة عن بُعد remote بنفس السهولة التي يستطيع القيام بها بنُسخ احتياطيّة محليّة، يجب علينا فقط استخدام صيغة بديلة، سيعمل هذا الأمر على أي مُضيف host نستطيع الدخول إليه عن طريق SSH طالما أنّ rsync مُثبّت لدى الطرفين: rsync -azvP /etc/* username@remote_host:/backup/سيقوم هذا الأمر بالنسخ الاحتياطي للدليل etc/ الموجود على الجّهاز المحلّي إلى دليل على remote_host موجود في backup/. سينجح هذا الأمر إن كُنّا نملك صلاحيات للكتابة على هذا الدّليل وتوجد مساحة كافية. للمزيد من المعلومات حول كيفيّة استخدام rsync للنّسخ الاحتياطي اضغط هنا. 3. كيفية استخدام أدوات أخرى للنسخ الاحتياطيبالرغم من بساطة الأمرين cp و rsync وإمكانيّة استخدامهما بسهولة إلّا أنّهما ليسا دومًا الحل المثالي، لجعل النُسخ الاحتياطية مُؤتمتة نحتاج لوضع هاتين الأداتين ضمن Script وكتابة أي شيفرة ضرورية من أجل الدوران والجماليّات الأخرى. لحسن الحظ توجد بعض الأدوات المساعدة التي تقوم بتنفيذ إجراءات مُعقّدة أكثر للنسخ الاحتياطي ببساطة. Baculaإنّ أداة Bacula هي حل مُركّب ومرن يُعزّز نموذج خادوم عميل للنسخ الاحتياطي للمضيفين hosts، تفصل Bacula بين أفكار العملاء، أماكن النسخ الاحتياطي والإدارة directors (المُكوِّن الذي يُنسّق النسخ الاحتياطي الفعلي)، وتقوم أيضًا بضبط كل مهمّة نسخ احتياطي ضمن وحدة تدعى الوظيفة job. يسمح لنا هذا بتضبيط configuration مُحبّب ومرن بشدّة، نستطيع النسخ الاحتياطي للعديد من العملاء إلى جهاز تخزين وحيد، عميل واحد إلى عدّة أجهزة تخزين، وتعديل مُخطط النسخ الاحتياطي بسرعة وسهولة عن طريق إضافة عُقَد أو ضبط تفاصيلهم، تعمل هذه الأداة بشكل جيّد عبر بيئة تحتوي على شبكة، وهي قابلة للتوسيع وتقسيمها إلى وحدات، مما يجعلها رائعة للنسخ الاحتياطي لموقع أو تطبيق مُوزَّع عبر عدّة أجهزة. لكي تتعلّم المزيد حول كيفيّة تضبيط خادوم Bacula للنسخ الاحتياطي وكيفيّة النسخ الاحتياطي للأنظمة عن بعد باستخدام Bacula، قم بزيارة هذه الروابط. BackupPCمن الحلول الشائعة الأخرى هي أداة BackupPC، يُمكن استخدام هذه الأداة للنسخ الاحتياطي لأنظمة لينِكس وويندوز بسهولة، يتم تنصيبها على جهاز أو VPS والذي سيعمل كخادوم للنسخ الاحتياطي، وبعدها يسحب الخادوم البيانات من عملائه باستخدام طرق نقل الملفّات المُعتادة. يُقدّم هذا الإعداد ميزة تنصيب جميع الحِزَم packages المتعلّقة بذلك على جهاز مركزي واحد، والتضبيط الوحيد الذي نحتاجه هو السماح لخادوم النسخ الاحتياطي بالوصول عبر SSH، يُمكن بسهولة إعداد هذا، وباستخدام DigitalOcean نستطيع تضمين مفاتيح SSH لخادوم BackupPC إلى العملاء بينما نقوم بالنشر، يسمح لنا هذا بضبط النسخ الاحتياطيّة من خادوم النسخ الاحتياطي بسهولة ونشر بيئات الإنتاج الخاصّة بنا بشكل نظيف بدون أيّة برمجيّات إضافيّة. لكي تتعلّم كيفيّة تثبيت واستخدام BackupPC على خادوم، اضغط هنا. DuplicityDuplicity هي بديل رائع للأدوات التقليديّة، الميّزة الأساسيّة للتفاضل في Duplicity هي أنها تستخدم تعمية GPG encryption لنقل وتخزين البيانات، ولهذا بعض الفوائد الرائعة. إنّ الفائدة الواضحة من استخدام تشفير GPG للنسخ الاحتياطي للملفّات هي أنّه لا يتم تخزين البيانات بشكل نص مُجرَّد plain text. الشّخص الوحيد الذي يستطيع فكّ تعمية decrypt البيانات هو من يملك مفتاح GPG key، يُوفِّر هذا درجة من الحماية لتعويض تضخّم التدابير الأمنية اللازمة عندما يتم تخزين البيانات في مواقع مُتعدّدة. الفائدة الأخرى التي قد لا تكون واضحة بشكل فوري للأشخاص الذين لا يستخدمون GPG عادةً هي أنّه يتمّ التّحقّق من كل عمليّة نقل لتكون دقيقة تمامًا، تفرض GPG فحص تلبيد Hash صارم للتأكّد من عدم وجود ضياع في البيانات أثناء النقل، ويعني هذا أنّه عندما يحين الوقت لاستعادة البيانات من النُسخة الاحتياطيّة سنكون أقل عُرضة للوقوع في مشاكل تَلَف الملفات. لكي تتعلّم كيفيّة تمكين النُسخ المُشفّرة باستخدام GPG في Duplicity، اتبع هذا الرابط. النسخ الاحتياطي على مستوى الكتلة Block-Level Backupsإنّ النسخ الاحتياطي على مستوى الكُتلة هو أقل شيوعًا من النسخ الاحتياطي على مستوى الملف ولكنّه بديل هام له، يُعرف أيضًا هذا النمط من النسخ الاحتياطي بالتصوير imaging لأنّه من المُمكن استخدامه لاستنساخ duplicate واستعادة كامل الأجهزة. يسمح النسخ الاحتياطي على مستوى الكُتلة بالنسخ على مستوى أعمق من الملف، فبينما يقوم النسخ الاحتياطي على مستوى الملف بنسخ الملف1، الملف2، والملف3 إلى موقع نسخ احتياطي، يقوم النسخ الاحتياطي على مستوى الكُتلة بنسخ كامل الكُتلة Block التي تحتوي على هذه الملفات، ولتفسير المفهوم بطريقة أخرى يمُكننا القول أنّ النسخ الاحتياطي على مستوى الكتلة ينسخ المعلومات بِت bit تلو الآخر، فهو لا يهتم بالملفات المُجرّدة التي قد تُمثّلها هذه البتّات bits (ولكن سيتم نقل الملفّات بشكل كامل خلال هذه العمليّة). إنّ إحدى الفوائد من النسخ الاحتياطي على مستوى الكتلة أنّه عادة ما يكون أسرع، وبينما يقوم النسخ الاحتياطي على مستوى الملف بالبدء بعمليّة نقل جديدة لكل ملف مُنفصل، يقوم النسخ الاحتياطي على مستوى الكُتلة بنقل الكُتَل والتي عادةً ما تكون أكبر حجمًا، وهذا يعني الحاجة للبدء بعمليّات نقل أقل لإتمام النسخ. استخدام الأداة dd لتنفيذ عمليات النسخ الاحتياطي على مستوى الكتلةإنّ أبسط طريقة لتنفيذ عمليّات النسخ الاحتياطي على مستوى الكُتلة هي باستخدام الأداة dd، هذه البرمجيّة مرنة جدًا وتتيح لنا نسخ المعلومات بِت تلو الآخر إلى مكان جديد، ويعني هذا أنّنا نستطيع النسخ الاحتياطي لقسم partition أو قرص disk إلى ملف واحد أو إلى جهاز raw device بدون أي خطوات تمهيدية. أبسط طريقة للنسخ الاحتياطي لقسم أو قرص هي استخدام dd كما يلي: dd if=/path/of/original/device of=/path/to/place/backupفي هذه الحالة تُحدّد =if جهاز الدخل input أو موقع، تُشير =of إلى ملف الخرج output أو موقع، من الهام جدًا تذكّر هذا الفرق، لأنّه من البديهي مسح قرص كامل إن تمّ عكسهما. إن كُنّا نرغب بالنسخ الاحتياطي لقسم يحتوي على مُستنداتنا الموجودة في dev/sda3/ نستطيع إنشاء ملف صورة كما يلي: dd if=/dev/sda3 of=~/documents.imgتُوجد العديد من الحلول الأخرى للنسخ الاحتياطي على مستوى الكتلة متوفّرة على أجهزة لينِكس، ولكنّنا لن نناقشهم هنا. إصدارات النسخ الاحتياطيةإنّ أحد أهم الأسباب الرئيسيّة للنسخ الاحتياطي للبيانات هو القدرة على استعادة إصدار سابق من ملف أو مجموعة ملفّات في حال حدوث تغيير غير مرغوب أو حذف، وبينما تُزوّدنا جميع آليات النسخ الاحتياطي المذكورة حتى الآن بهذا إلى حدّ ما، نستطيع تنفيذ نظام أكثر قوّة باستخدام أدوات إضافيّة. الطريقة اليدويّة لإنجاز هذا هي إنشاء ملف نسخة احتياطية قبل التعديل كما يلي: cp file1 file1.bak nano file1نستطيع أيضًا أتمتة هذه العمليّة عن طريق إنشاء ملفّات مخفيّة ذات ختم زمني timestamped في كل مرّة نقوم فيها بتعديل ملف عن طريق المُحرّر، على سبيل المثال نستطيع وضع ما يلي في ملف bashrc./~ : nano() { cp $1 .${1}.`date +%y-%m-%d_%H.%M.%S`.bak; /usr/bin/nano $1; }عندما نستدعي الآن الأمر nano سيقوم تلقائيًا بإنشاء نُسَخ احتياطيّة. يُوفّر لنا هذا مستوى مُعيَّن من النسخ الاحتياطي، ولكنّها طريقة هشّة جدًّا وقد تملأ القرص بسرعة إن كُنّا نُعدِّل الملفّات كثيرًا، لذلك هي ليست حلًّا رائعًا وربما ينتهي بنا الأمر أسوأ من القيام بالنسخ اليدوي للملفات التي نريد تحريرها. ومن البدائل التي تقوم بحل العديد من المشاكل المُتأصّلة في هذا التصميم هو استخدام git، والتي هي تحديدًا نظام تحكّم بالإصدار، وبالرغم أنّ هذا قد يكون غير واضح نستطيع استخدام git للتحكّم بأي ملف تقريبًا. نستطيع إنشاء مستودع git repository في الدليل الرئيسي فورًا، ببساطة عن طريق كتابة ما يلي: cd ~ git initربّما نحتاج هنا إلى تطويع tweak الإعدادات لاستثناء بعض الملفات، ولكن بشكل عام يقوم بإنشاء إصدارات بشكل فوري، بإمكاننا بعدها إضافة محتويات الدليل الخاص بنا وتضمين الملفّات عن طريق ما يلي: git add . git commit -m "Initializing home directory"نستطيع ببساطة الانتقال إلى موقع بعيد remote location نظام git المُضمَّن أيضًا: git remote add backup_server git://backup_server/path/to/project git push backup_server masterإنّ هذا النظام ليس رائعًا للنسخ الاحتياطي من تلقاء نفسه، ولكن بجمعه مع نظام نسخ احتياطي آخر يتمكّن هذا النمط من التحكّم بالإصدار من تزويدنا بتحكّم جيّد ومُحبّب بشدّة بالتغيرات التي نقوم بها. للتعلّم أكثر حول كيفيّة استخدام git وكيف نستطيع استخدام git لإصدار الملفّات العاديّة، تحقّق من هذه الروابط. النسخ الاحتياطي على مستوى VPS، ومزود DigitalOcean كنموذجفي حين أنّه من المهم إدارة النُسخ الاحتياطيّة بأنفسنا، تُزوّدنا خدمة DigitalOcean مثلا ببعض الآليات لإكمال النسخ الاحتياطيّة الخاصّة بنا. نمتلك دالّة للنسخ الاحتياطي تقوم بانتظام بعمل نُسَخ احتياطيّة تلقائيّة من أجل droplets (مصطلح مقابل لـ VPS على DigitalOcean) التي تُمكّن هذه الخدمة، نستطيع تشغيلها خلال إنشاء droplet عن طريق اختيار صندوق التأشير "تمكين النُسَخ الاحتياطيّة" "Enable Backups": سيقوم هذا بأخذ نُسخة احتياطيّة لكامل صورة الـ VPS، وهذا يعني أنّنا نستطيع بسهولة إعادة النشر من النُسخة الاحتياطيّة أو استخدامها كأساس للـ droplets الجديدة. ولأخذ صورة لمرّة واحدة عن النظام لدينا نستطيع إنشاء لقطات snapshots، والتي تعمل بصورة مشابهة للنُسَخ الاحتياطيّة ولكنّها غير مؤتمتة، نستطيع إنشاءَها عن طريق الذهاب إلى droplet لدينا واختيار "Snapshots" من القائمة العلويّة: ترجمة -وبتصرّف- للمقال How To Choose an Effective Backup Strategy for your VPS لصاحبه Justin Ellingwood. حقوق الصورة البارزة: Designed by Freepik.
  25. بعد أن قمنا مسبقًا بتثبيت وإعداد خادوم قاعدة بيانات MySQL التجريبي الخاصّ بنا، يمكننا الآن البدء باستخدام mysqlslap. يمكن تشغيل mysqlslap عبر طرفية الصدفة العادية، لذا لن يكون هناك حاجة إلى الدخول إلى MySQL لتشغيله من هناك. وعلى الرغم من ذلك، فإننا سنقوم في درسنا هذا بفتح اتصالٍ جديد إلى خادومنا بالإضافة إلى بدء جلسة MySQL جديدة من هناك بواسطة المستخدم sysadmin الذي أنشأناه من قبل، لكي نتمكّن من التحقق من بعض الأمور وتحديث أخرى في MySQL بشكلٍ أسهل. لذا وفي المجمل، فإننا سنمتلك طرفيةً واحدة مفتوحة مع مستخدمٍ بصلاحيات إدارية (sudo)، وطرفية واحدة لـMySQL. قبل أن ندخل في الأوامر الرئيسية المُستخدمة للاختبار، قد تودّ أن تلقي نظرةً على هذه القائمة لأكثر الخيارات المفيدة لـmysqlslap. يمكن أن يساعدك هذا على تصميم أوامر mysqlslap الخاصّ بك لاحقًا. الخياروظيفتهuser--اسم مستخدم MySQL الذي يجب الاتصال به على خادوم قاعدة البياناتpassword--كلمة المرور الخاصّة باسم المستخدم. من الأفضل تركها فارغة في سطر الأوامرhost--اسم خادوم قاعدة بيانات MySQLport--رقم المنفذ الذي يجب من خلاله الاتصال بـMySQL إذا كان الافتراضي غير مستخدمconcurrency--عدد اتصالات العملاء الافتراضية التي سيتم محاكاتها من طرف mysqlslapiterations--عدد المرّات التي سيتم تشغيل الاختبار فيهاcreate-schema--قاعدة البيانات التي سيتم تشغيل الاختبار عليهاquery--عملية الاستعلام التي يجب تنفيذها. يمكن لهذا أن يكون متغيّر استعلام SQL أو مسارًا لملفّ سكربت SQLcreate--الاستعلام الذي يجب إنشاؤه كجدول، مجددًا، يمكن لهذا أن يكون متغيّر استعلام SQL أو مسارًا لملفّ SQLdelimiter--الحائل الذي يجب استخدامه للفصل بين جُمَل SQL متعددةengine--محرّك قاعدة البيانات الذي يجب استخدامه، مثل InnoDBauto-generate-sql-- يسمح هذا الخيار لـMySQL بتنفيذ اختبار الحِمل باستخدام أمر SQL المُنشَئ تلقائيًا من طرف mysqlslapحالة استخدام: اختبار الأداء مع بيانات واستعلامات SQL منشئة تلقائياسنبدأ عبر استخدام ميّزة mysqlslap في الإنشاء التلقائي لجمل SQL. عندما نقوم باستخدامها، فإنّ mysqlslap سيقوم بإنشاء قاعدة بيانات مؤقّتة منفصلة تدعى "mysqlslap". ستحوي قاعدة البيانات هذه جدولًا بسيطًا يحوي هو الآخر عددًا صحيحًا واحدًا وعمودًا واحدًا من نوع varchar بداخله بيانات تجريبية. يمكن أن تكون هذه طريقةً سهلة وسريعة للتحقق من أداء خادوم قاعدة البيانات الكلّي. سنبدأ عبر اختبار اتصال عميلٍ واحدٍ فقط يتم تكراره مرّةً واحدة كذلك باستخدام جملة SQL مُنشئة تلقائيًا: sudo mysqlslap --user=sysadmin --password --host=localhost --auto-generate-sql --verboseيجب أن يبدو الخرج كالتالي: Benchmark Average number of seconds to run all queries: 0.009 seconds Minimum number of seconds to run all queries: 0.009 seconds Maximum number of seconds to run all queries: 0.009 seconds Number of clients running queries: 1 Average number of queries per client: 0يقوم mysqlslap بإعطاء بعض الإحصائيات عن اختبار الأداء كما رأينا من الخرج السابق، حيث أنّه يقوم بإرجاع متوسّط، أقل وأعلى عدد من الثواني التي يحتاجها ليقوم بتنفيذ عملية الاستعلام. يمكننا أيضًا أن نرى أنّ عدد اتصالات العملاء المُستخدمة لاختبار الحِمل هذا كان واحدًا فقط. الآن، جرّب محاكاة 50 اتصال، وقم باختيار تشغيل عملية الاستعلام المُنشَئة تلقائيًا 10 مرّات: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=50 --iterations=10 --auto-generate-sql --verboseيعني هذا الأمر أنّه سيتم محاكاة 50 اتصالًا، يقوم كلّ منها بتنفيذ نفس عملية الاستعلام بنفس الوقت، وسيتم إعادة هذه الاختبار 10 مرّات. يظهر لنا الخرج فرقًا واضحًا في الوقت مع ازدياد الحِمل: Benchmark Average number of seconds to run all queries: 0.197 seconds Minimum number of seconds to run all queries: 0.168 seconds Maximum number of seconds to run all queries: 0.399 seconds Number of clients running queries: 50 Average number of queries per client: 0لاحظ كيف أنّ حقل "Number of clients running queries" أصبح الآن يظهر الرقم 50، وأنّ عدد عمليات الاستعلام بواسطة العميل الواحد هو صفر. تقوم SQL المُشَئة تلقائيًا بإنشاء جدولٍ بسيط يحوي حقلين اثنين، إلّا أنّه وفي معظم البيئات الإنتاجية فستكون بنية الجدول أكبر بكثير من هذا. يمكننا أن نفرض على mysqlslap أن يقوم بمحاكاة هذا عبر إضافة بعض الحقول الإضافية إلى جدول الاختبار. لفعل ذلك، يمكننا استخدام المُعامِلين الجديدين number-char-cols-- وnumber-int-cols--. تقوم هذه المُعامِلات بتحديد عدد الأعمدة من نوع varchar وint لإضافتها إلى جدول الاختبار. سنختبر استعلام SQL مُنشَئ تلقائيًا عن جدولٍ بـ5 أعمدة رقمية و20 عمود نصّي في المثال التالي. سنحاكي أيضًا 50 اتصالًا من أجهزة العملاء في الوقت ذاته وسنقوم بتكرار الاختبار 100 مرّة: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=50 --iterations=100 --number-int-cols=5 --number-char-cols=20 --auto-generate-sql --verbosسيستغرق هذا الأمر وقتًا أطول. يمكننا أن نتحوّل إلى الطرفية الأخرى الني قمنا بتشغيل جلسة MySQL الخاصّة بنا عليها لنرى ما يجري بينما يتم تنفيذ الاختبار. لاحظ أنّه في حال انتظرت وقتًا طويلًا، سيكتمل الاختبار ولن تتمكن من رؤية قاعدة البيانات الاختبارية. من طرفية MySQL، طبّق: show databases;لاحظ وجود قاعدة mysqlslap: +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | mysqlslap | | performance_schema | +--------------------+ 5 rows in set (0.01 sec)يمكنك أن تتحقق من الجدول في قاعدة البيانات الاختبارية إن أردت; إنّه يدعى t1. تحقق من نافذة الطرفية الأخرى الآن. عندما ينتهي الاختبار، ستلاحظ أنّ الأداء قد انخفض بدرجةٍ أكبر من السابق بسبب الحِمل الزائد: Benchmark Average number of seconds to run all queries: 0.695 seconds Minimum number of seconds to run all queries: 0.627 seconds Maximum number of seconds to run all queries: 1.442 seconds Number of clients running queries: 50 Average number of queries per client: 0ارجع إلى نافذة طرفية MySQL. يمكننا أن نرى أنّ mysqlslap قد حذف قاعدة البيانات المؤقّتة الخاصّة به، طبّق: show databases;الخرج: +--------------------+ | Database | +--------------------+ | information_schema | | employees | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec)حالة استخدام: اختبار الأداء مع استعلامات مخصصةاستعلامات SQL المُنشَئة تلقائيًا جيّدة إذا كنت تريد تقييم موارد الخادوم الفيزيائية. هيَ مفيدة عندما تريد معرفة درجة الحِمل التي يمكن للنظام أن يتحمّلها. عندما تريد التحقق من تطبيقٍ يعتمد على قاعدة بيانات، فإنّك ستودّ اختبار استعلاماتٍ حقيقية على بياناتٍ حقيقية. يمكن لهذه الاستعلامات أن تأتي من خادوم الويب الخاصّ بك أو من خادوم التطبيق الذي تشغّله. الآن، سنفترض أنّك تعرف الاستعلامات المحددة التي تريد اختبارها. في القسم التالي، سنريك طريقةً لمعرفة عمليات الاستعلام التي يتم تنفيذها على خادومك. يمكنك جعل mysqlslap ينفّذ عملية استعلام معيّنة عبر الخيار query--. لا يمكن لجُمل الـSQL أن تحتوي على فواصل الأسطر (أكثر من سطر) ضمنها، ويجب فصلها بواسطة فاصلة منقوطة (;). يجب أيضًا إغلاق الاستعلامات بعلامتيّ تنصيص. في الشفرة التالية، سنقوم بتشغيل عملية استعلام بسيطة عن الجدول deptemp. يحوي جدول "deptemp" أكثر من ثلاثمئة ألف سجل بداخله. لاحظ كيف قمنا بتحديد قاعدة البيانات employees مع الخيار create-schema--: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=50 --iterations=10 --create-schema=employees --query="SELECT * FROM dept_emp;" --verboseسيستغرق هذا بعض الوقت ليكتمل. بعدها، يجب أن تتلقّى تقريرًا عن اختبار الأداء كالتالي بعد دقيقة أو اثنتين: Benchmark Average number of seconds to run all queries: 18.486 seconds Minimum number of seconds to run all queries: 15.590 seconds Maximum number of seconds to run all queries: 28.381 seconds Number of clients running queries: 50 Average number of queries per client: 1(ملاحظة: إذا استغرقت العملية حوالي 10 دقائق أو لم ترجع أيّ خرج، فيجب عليك المحاولة مجددًا مع عددٍ أقل للخيار concurrency-- و/أو iterations--, أو محاولة تطبيقها على خادوم أقوى). بعدها، سنستخدم أكثر من جملة SQL مع الخيار query--. في المثال التالي، نقوم بإنهاء كلّ جملة بفاصلة منقوطة. سيعرف mysqlslap أننا نستخدم عددًا من أوامر SQL المنفصلة بسبب استخدامنا للخيارdelimiter--: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=20 --iterations=10 --create-schema=employees --query="SELECT * FROM employees;SELECT * FROM titles;SELECT * FROM dept_emp;SELECT * FROM dept_manager;SELECT * FROM departments;" --delimiter=";" --verboseيستخدم هذا الاختبار نفس عدد الاتصالات ونفس عدد مرّات التكرار، إلّا أنّ الأداء كان أبطئ بشكلٍ ملحوظ بسبب استخدام أكثر من جملة SELECT واحدة (متوسّط 23.8 ثانية مقابل 18.486 ثانية). Benchmark Average number of seconds to run all queries: 23.800 seconds Minimum number of seconds to run all queries: 22.751 seconds Maximum number of seconds to run all queries: 26.788 seconds Number of clients running queries: 20 Average number of queries per client: 5يمكن لجُمل SQL التي يتم استخدامها في بيئة إنتاجية أن تكون معقّدة. إضافة جملة SQL معقّدة إلى سكربت هو أسهل من وضعها للاختبارات، لذا، يمكننا أن نطلب من mysqlslap أن يقوم بقراءة الاستعلامات من ملفّ سكربت. للقيام بهذا، فلنقم بإنشاء ملفّ سكربت من أوامر SQL. يمكننا استخدام الشفرة البرمجية أدناه لإنشاء الملفّ: sudo echo "SELECT * FROM employees;SELECT * FROM titles;SELECT * FROM dept_emp;SELECT * FROM dept_manager;SELECT * FROM departments;" > ~/select_query.sql sudo cp ~/select_query.sql /mysqlslap_tutorial/يحوي ملفّ select_query.sql جميع عبارات SELECT الآن. بما أنّ السكربت يحوي أكثر من عملية استعلام واحدة، فيمكننا استخدام مفهومٍ جديد في الاختبار. يمكن لـmysqlslap أن يقوم بتوزيع عمليات الاستعلام. يمكننا القيام بهذا عبر تحديد عدد الاستعلامات التي يجب على كلّ جهازٍ عميل متّصل أن ينفذّها. يسمح mysqlslap بفعل هذا عبر استخدام الخيار number-of-queries--. لذا، إذا كان لدينا 50 اتصال و1000 عمليّة استعلام يجب تنفيذها، فإنّ كلّ جهاز عميل متّصل سينفّذ حوالي 20 عملية استعلام تقريبًا. أخيرًا، يمكننا أيضًا استخدام الخيار debug-info--، والذي سيظهر لنا حسبة تقريبية للموارد المستعملة. في الشفرة البرمجية التالية، نطلب من mysqlslap أن يستخدم ملفّ السكربت الذي أنشأناه للتوّ. إننا نقوم أيضًا بتحديد المُعامِل number-of-queries. سيتم تكرار العمليّة مرّتين كما أننا نريد معلومات التنقيح (debug) ضمن الخرج: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=20 --number-of-queries=1000 --create-schema=employees --query="/mysqlslap_tutorial/select_query.sql" --delimiter=";" --verbose --iterations=2 --debug-infoبعد أن يكتمل هذا الأمر، يجب أن نرى بعض النتائج المثيرة للاهتمام: Benchmark Average number of seconds to run all queries: 217.151 seconds Minimum number of seconds to run all queries: 213.368 seconds Maximum number of seconds to run all queries: 220.934 seconds Number of clients running queries: 20 Average number of queries per client: 50 User time 58.16, System time 18.31 Maximum resident set size 909008, Integral resident set size 0 Non-physical pagefaults 2353672, Physical pagefaults 0, Swaps 0 Blocks in 0 out 0, Messages in 0 out 0, Signals 0 Voluntary context switches 102785, Involuntary context switches 43هنا يكون متوسّط عدد الثواني اللازم لتنفيذ جميع عمليات الاستعلام في MySQL هو 217 ثانية، حوالي 4 دقائق. صحيحٌ أنّ هذا الرقم له علاقة بحجم الذاكرة العشوائية ونوع المعالج المُستخدم مع آلتنا الوهمية، إلّا أنّه كان كبيرًا أيضًا بسبب عدد الاستعلامات الكبير الذي كان كلّ جهاز عميل متصل يكرره مرّتين. يمكننا أن نرى وجود عددٍ كبير من أخطاء الصفحات غير العتادية (البرمجية). تحصل أخطاء الصفحات (page faults) عندما لا يمكن العثور على البيانات في الذاكرة ويتوجّب على النظام أن يبحث عنها على قرص الـSwap. يظهر الخرج أيضًا بعض المعلومات المتعلّقة بالمعالج المركزي. في حالتنا، فإننا نرى عدد كبيرًا من تبديلات السياق كذلك. حالة استخدام: سيناريو اختبار أداء عملي مع التقاط مباشر للاستعلاماتإلى الآن في أمثلتنا، كنّا نقوم بتطبيق عمليات الاستعلام مع قاعدة بيانات "employees" الخاصّة بنا، وهو ما قد لا يكون شيئًا يريدك مُدراء قواعد البيانات أن تفعله، وهناك سببٌ وجيهٌ لذلك. لا تريد أن تقوم بإضافة حِمل إضافي إلى قاعدة بياناتك الإنتاجية ولا تريد أن تقوم بتفيذ استعلامات اختبارية يمكنها أن تقوم بحذف، تحديث أو إدراج البيانات إلى جداول قاعدة البيانات الإنتاجية الخاصّة بك. سنريك كيفيّة عمل نسخة احتياطية من قاعدة بيانات إنتاجية وكيفيّة نسخها إلى بيئة تجريبية، في هذا المثال وعلى نفس الخادوم، ولكنّك طبعًا قد تودّ نسخها إلى خادومٍ منفصل بنفس قدرات العتاد. والأكثر أهميّة من ذلك، سنريك كيف تقوم بتسجيل الاستعلامات بشكلٍ حيّ أو مباشر (live) من قاعدة بيانات إنتاجية بالإضافة إلى كيفيّة إضافة الاستعلامات إلى سكربتٍ اختباري. في المجمل، ستحصل على الاستعلامات من بيئة عمل إنتاجية، ولكنّك ستقوم بتنفيذ الاختبارات على قاعدة البيانات التجريبية. الخطوات العامّة هي كالتالي، ويمكنك استخدامها لأيّ اختبار mysqlslap: انسخ قاعدة البيانات الإنتاجية إلى بيئة اختبارية.قم بإعداد MySQL لتسجيل والتقاط جميع طلبات الاتصال والاستعلام على قاعدة البيانات الإنتاجية.قم بمحاكاة حالة الاستخدام التي تحاول اختبارها. كمثال، إذا كنتَ تدير موقع تسوّق، يجب أن تشتري شيئًا لتقوم بتفعيل جميع عمليات الاستعلام الأساسية ضمن تطبيقك.قم بتعطيل تسجيل الاستعلامات.انظر إلى سجل الاستعلامات وقم بعمل قائمة بالاستعلامات التي تريد اختبارها.أنشئ ملفًّا اختباريًا لكلّ عملية استعلام تريد اختبارها.نفّذ الاختبارات.استخدم الخرج لتحسين أداء قاعدة البيانات الخاصّة بك.للبدء، قم بإنشاء نسخة احتياطية من قاعدة البيانات "employees". سنقوم بإنشاء مسارٍ منفصل لهذه النسخة الاحتياطية: sudo mkdir /mysqlslap_tutorial/mysqlbackup cd /mysqlslap_tutorial/mysqlbackupأنشئ النسخة الاحتياطية وانقلها إلى المسار الجديد: sudo mysqldump --user sysadmin --password --host localhost employees > ~/employees_backup.sql sudo cp ~/employees_backup.sql /mysqlslap_tutorial/mysqlbackup/اذهب إلى خادوم MySQL التجريبي الخاصّ بك، وأنشئ قاعدة البيانات "employees_backup": CREATE DATABASE employees_backup;في هذه النقطة، إذا كنتَ تستخدم خادومًا منفصلًا للاختبار، فيجب أن تنقل ملفّ employeesbackup.sql إليه، ومن جلسة الطرفيّة الرئيسية، استورد بيانات النسخة الاحتياطية إلى قاعدة البيانات employeesbackup: sudo mysql -u sysadmin -p employees_backup < /mysqlslap_tutorial/mysqlbackup/employees_backup.sqlعلى خادوم قاعدة بيانات MySQL الإنتاجية الخاصّ بك، فعّل سجل استعلامات MySQL العام وقم بتوفير اسم ملفٍّ خاصٍّ به. يقوم سجل الاستعلامات العام بالتقاط الاتصالات، الاتصالات المنقطعة وسجل الاستعلامات لقاعدة بيانات MySQL: SET GLOBAL general_log=1, general_log_file='capture_queries.log';الآن، شغّل الاستعلامات التي تريد اختبارها على خادوم MySQL الإنتاجي. في هذا المثال، سنقوم بتنفيذ عملية استعلام من سطر الأوامر. وعلى كلّ حال، قد تودّ إنشاء الاستعلامات من تطبيقك عوضًا عن تنفيذها بشكلٍ مباشر. إذا كنتَ تمتلك صفحة موقع تريد اختبار أدائها، فيجب عليك تنفيذ تلك العملية أو الوصول إلى تلك الصفحة الآن. كمثال، إذا كنتَ تدير موقع تسوّق إلكتروني، قد تودّ إكمال عملية الدفع الآن، والذي من شأنه أن يقوم بطلب جميع الاستعلامات المطلوبة على خادوم قاعدة البيانات. هذه هي عملية الاستعلام التي سنقوم بطلبها على خادوم MySQL الإنتاجي الخاصّ بنا. أولًا، قم باستخدام قاعدة البيانات الصحيحة: USE employees;والآن عملية الاستعلام: SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_date;الخرج المتوقّع: 489903 rows in set (4.33 sec)سنقوم بتعطيل التسجيل العام عندما تكتمل عملية الاستعلام: SET GLOBAL general_log=0;لاحظ أنّه في حال تركت التسجيل العام مفعّلًا، سيستمر إضافة الاستعلامات إلى السجل، والذي من شأنه جعل الاختبارات أصعب. لذا تأكّد أنّك قمت بتعطيل التسجيل مباشرةً بعد الإنتهاء من اختبارك. فلنتحقق من أنّ ملفّ السجل تمَّ إنشاؤه ضمن المسار var/lib/mysql/: sudo ls -l /var/lib/mysql/capt* -rw-rw----. 1 mysql mysql 861 Sep 24 15:09 /var/lib/mysql/capture_queries.logفلننسخ هذا الملفّ إلى مسار MySQL الاختباري الخاصّ بنا. إذا كنتَ تستخدم خادومًا منفصلًا للاختبار، فقم بنسخه إلى ذلك الخادوم: sudo cp /var/lib/mysql/capture_queries.log /mysqlslap_tutorial/يجب أن يكون هناك بعض البيانات داخل ملفّ السجل هذا. في مثالنا، يجب أن تكون الاستعلامات التي نريدها بالقرب من نهاية الملفّ. تحقق من آخر جزء من الملفّ عبر الأمر: sudo tail /mysqlslap_tutorial/capture_queries.logالخرج المتوقّع: 6294 Query show databases 6294 Query show tables 6294 Field List departments 6294 Field List dept_emp 6294 Field List dept_manager 6294 Field List employees 6294 Field List salaries 6294 Field List titles 140930 15:34:52 6294 Query SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_date 140930 15:35:06 6294 Query SET GLOBAL general_log=0يظهر هذا السجل أوامر SQL والتوقيت الزمني الخاصّ بها. جملة SQL SELECT الموجودة بالقرب من نهاية الملفّ هي الجزء الذي نحن مهتمّون به. يجب أن يكون بالضبط هو الأمر الذي نقوم بتنفيذه على خادوم قاعدة البيانات الإنتاجية، حيث أننا قمنا من هناك بالتقاطه. في مثالنا هذا، كنّا نعرف عملية الاستعلام بالفعل، ولكن، في بيئة عمل إنتاجية، يمكن أن تكون هذه الطريقة نافعة جدًا لمعرفة الاستعلامات التي ربّما لا تعرف بالضرورة أنّه يتم تشغيلها على خادومك. لاحظ أنّه في حال قمت بطلب استعلامات مختلفة أثناء عملية التسجيل (logging)، فإنّ هذا الملفّ سيبدو مختلفًا تمامًا. في سيناريو حقيقي، يمكن أن يتمّ ملئ هذا الملفّ بالمئات من المُدخَلات القادمة من مختلف الاتصالات. هدفك هو العثور على الاستعلام أو الاستعلامات التي تسبب هذا الحِمل. يمكنك أن تبدأ عبر إنشاء قائمة بكلّ سطر يتضمّن الكلمة "Query". بعدها، ستمتلك قائمةً دقيقة بالاستعلامات التي تمّ تنفيذها على قاعدة البيانات الخاصّة بك أثناء الاختبار. قم بنسخ كلّ استعلام تريد اختباره إلى ملفٍّ ينتهي بالامتداد sql. كمثال: sudo vi /mysqlslap_tutorial/capture_queries.sqlيجب أن تكون المحتويات هي استعلامات MySQL التي تريد اختبارها، دون استخدام أيّ سطور إضافية (استخدم سطر واحد فقط) ودون فاصلة منقوطة بالنهاية: SELECT e.first_name, e.last_name, d.dept_name, t.title, t.from_date, t.to_date FROM employees e INNER JOIN dept_emp de ON e.emp_no=de.emp_no INNER JOIN departments d ON de.dept_no=d.dept_no INNER JOIN titles t ON e.emp_no=t.emp_no ORDER BY e.first_name, e.last_name, d.dept_name, t.from_dateبعدها، تأكّد أنّ نتائج الاستعلامات لم يتم تخزينها في ذاكرة الخبيئة (cache). ارجع إلى جلسة MySQL الخاصّة بالخادوم الاختباري وطبّق الأمر التالي: RESET QUERY CACHE;الآن، صار الوقت المناسب لتشغيل أداة mysqlslap مع ملفّ السكربت. تأكّد أنّك تستخدم اسم ملفّ السكربت الصحيح مع المُعامِل query--. سنستخدم فقط 10 اتصالات افتراضية وسنكرر العمليّة مرّتين فقط. قم بتشغيل الأمر التالي من خادومك الاختباري: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=10 --iterations=2 --create-schema=employees_backup --query="/mysqlslap_tutorial/capture_queries.sql" --verboseيجب أن يبدو خرج اختبار الأداء شيئًا كالتالي: Benchmark Average number of seconds to run all queries: 68.692 seconds Minimum number of seconds to run all queries: 59.301 seconds Maximum number of seconds to run all queries: 78.084 seconds Number of clients running queries: 10 Average number of queries per client: 1إذًا، كيف يمكننا الآن تحسين هذا الأداء؟ ستحتاج معرفةً جيّدة باستعلامات MySQL لتقييم ما تفعله عمليات الاستعلام. بالنظر مجددًا إلى الاستعلامات، يمكننا أن نرى أنّه تقوم بالعديد من عمليات الدمج على امتداد أكثر من جدول، تقوم الاستعلامات بإظهار تواريخ عمل الموظّف وأثناء القيام بذلك، تقوم بدمج أكثر من جدول عبر الحقل empno، كما أنّها تقوم باستخدام الحقل deptno للدمج، ولكن بما أنّه هناك أقسام سجلات قليلة فقط، فسنقوم بتجاهل هذا. بما أنّه هناك العديد من مُدخَلات empno في قاعدة البيانات، فمن المنطقي افتراضي أنّ إنشاء الفهارس في حقل empno يمكن أن يحسّن من أداء عمليات الاستعلام. مع القليل من التمرّن، بمجرّد أن تجد الاستعلامات التي تسبب ضغطًا على خادوم البيانات (وهو القسم الذي سيساعدك mysqlslap فيه!)، ستكون قادرًا على تقييم عمليات الاستعلام المتوفّرة بناءً على معرفتك بـMySQL وقاعدة بياناتك. بعدها، يمكنك محاولة تحسين قاعدة بياناتك أو الاستعلامات التي يتم تنفيذها عليها. في حالتنا، فلنضف الفهارس التي ذكرناه بالأعلى، سنقوم بإنشاء 3 فهارس فارغة لـempno. سيتم إنشاء فهرس واحد في حقل empno في جدول employees، وسيتم إنشاء فهرس آخر في حقل empno بالجدول deptemp، وسيتم إنشاء الأخير في حقل emp_no في جدول titles. فلنذهب إلى جلسة MySQL الاختبارية الخاصّة بنا ونطبّق الأوامر التالية: USE employees_backup; CREATE INDEX employees_empno ON employees(emp_no); CREATE INDEX dept_emp_empno ON dept_emp(emp_no); CREATE INDEX titles_empno ON titles(emp_no);بالعودة إلى نافذة الطرفية الرئيسية على خادومنا الاختباري، إذا قمنا بتشغيل mysqlslap بنفس المُعاملات، فسنرى اختلافًا في نتائج اختبار الأداء: sudo mysqlslap --user=sysadmin --password --host=localhost --concurrency=10 --iterations=2 --create-schema=employees_backup --query="/mysqlslap_tutorial/capture_queries.sql" --verbose Benchmark Average number of seconds to run all queries: 55.869 seconds Minimum number of seconds to run all queries: 55.706 seconds Maximum number of seconds to run all queries: 56.033 seconds Number of clients running queries: 10 Average number of queries per client: 1يمكن أن نرى وجود تحسّن فوري في متوسّط، أدنى وأقصى وقت لتنفيذ عمليات الاستعلام. عوضًا عن متوسّط 68 ثانية، يتم تنفيذ الاستعلامات الآن بغضون 55 ثانية. هذا تحسّن بحوالي 13 ثانية لنفس الاستعلامات التي تمّ تنفيذها. بما أنّ هذا التغيير في قاعدة البيانات أعادة نتيجةً جيّدة في البيئة الاختبارية، فإنّه يمكنك الآن أخذه بعين الاعتبار لتنفيذه على خادوم قاعدة البيانات الإنتاجية الخاصّة بك، ولكن لا تنسى أنّ تغييرات قاعدة البيانات لها دومًا إيجابيات وسلبيات عليك المفاضلة بينها. يمكنك إعادة عملية اختبار الأوامر والتحسينات مع جميع الاستعلامات التي جمعتها من ملفّ السجل الخاصّ بك. استكشاف الأخطاء وإصلاحها: mysqlslap لا يظهر الخرجإذا قمت بتنفيذ أمر اختبار ولم يرجع لك خرجًا، فهذا مؤشّرٌ جيّد إلى أنّ موارد خادومك قد تكون امتلأت بالفعل. قد تتضمّن أعراض هذه المشكلة نقصًا في خرج Benchmark، أو رسالة خطأ مثل: mysqlslap: Error when storing result: 2013 Lost connection to MySQL server during queryربّما قد تودّ إعادة الاختبار مجددًا مع عددٍ أقل للمُعامِل concurrency-- أو iterations--، أو يمكنك محاولة ترقية بيئة خادومك الاختباري لإصلاح المشكلة. يمكن أن يكون هذا طريقةً جيّدة لمعرفة حدود سعة خادوم قاعدة البيانات الخاصّ بك. الخاتمةmysqlslap هو أداة بسيطة وخفيفة يمكنها أن تندمج بسهولة مع محرّك قاعدة بيانات MySQL. وهي متوفّر لجميع إصدارات MySQL بدءًا من الإصدار 5.1.4. في هذا الدرس، رأينا كيفيّة استخدام mysqlslap مع خياراته المتعددة وجرّبنا الأمر مع قاعدة بيانات اختبارية كعيّنة. يمكنك تحميل قواعد بيانات عينية أخرى للاختبار من موقع MySQL والتمرّن عليها أيضًا. كما ذكرنا من قبل: رجاءًا لا تقم بتنفيذ الاختبارات على خادوم قاعدة بيانات إنتاجية. آخر حالة استخدام في درسنا هذا تعلّقت بعملية استعلام واحدة فقط. صحيحٌ أننا قمنا بتحسين أداء عملية الاستعلام تلك عبر إضافة فهارس إضافية إلى جميع الجداول الثلاث، إلّا أنّ العملية قد لا تكون بتلك البساطة في الحياة الحقيقية. إضافة المزيد من الفهارس قد يبطئ - في بعض الأحيان - أداء النظام وغالبًا مع يحتاج مُدراء قواعد البيانات إلى قياس إيجابيات إضافتها على حساب التغيير في الأداء الذي سيحصل. سيناريوهات الاختبار في الحياة الحقيقية أكثر تعقيدًا، ولكن هذا قد يعطيك الأدوات اللازمة للبدء في اختبار وتحسين أداء قاعدة البيانات الخاصّة بك. ترجمة -وبتصرف- للمقال: How To Measure MySQL Query Performance with mysqlslap لصاحبه: Sadequl Hussain.
×
×
  • أضف...