هل لازم نتعلم لغة {M} في Power Qury حتى لو نقدر نوصل لنفس النتيجة من خلاال واجهة المستخدم؟
في الفيديو حنشوف مثال بسيط وعملي على تحويل شكل التاريخ وحنقارن بين تنفيذ الفكرة باستخدام واجهة المستخدم وبين تنفيذها عن طريق تعديل بسيط باستخدام لغة {M}
الهدف مش إننا نسيب واجهة المستخدم، بالعكس. الهدف إننا نفهم أكتر اللي بيحصل في خطوات التحويل، ونعرف إمتى تدخل بسيط في {M} ممكن يخلّي الشغل أوضح، أسرع، وأسهل.
في الفيديو ده جرّبت استخدام Copilot لإنشاء كويري داخل Power Query باستخدام مجموعة مختلفة من الـ prompts،
وبعدها اختبرت النتيجة على أكثر من سيناريو. الفكرة مش هل AI “يشتغل” أو لا…
لكن: هل النتيجة فعلًا دقيقة؟
وهل ممكن نعتمد عليها بدون فهم لغة M؟
البداية حل بسيط باستخدام واجهة المستخدم، تطوير الحل خطوة بخطوة باستخدام لغة M حتى نصل إلى:
✅ فلترة البيانات باستخدام Merge
✅ تحديد اسم العمود ديناميكيًا باستخدام Table.ColumnNames
✅ حماية الكويري من الأخطاء باستخدام try ... otherwise
✅ دعم البحث في أكثر من عمود
✅ التعامل مع الأعمدة الفارغة تلقائيًا
✅ الاستفادة من Copilot لتطوير الحل
في الجزء الثاني من الفلتر الذكي، سنحوّل الحل الذي أنشأناه في الجزء الأول إلى دالة مخصصة (Custom Function) يمكن إعادة استخدامها مع أي جدول. خلال الفيديو سنتعلم:
✅ تجميع خطوات التحويل داخل كويري واحد
✅ تحسين قراءة وصيانة الكود من خلال إعادة تسمية الخطوات
✅ تحويل الحل إلى دالة مخصصة قابلة لإعادة الاستخدام
✅ تطبيق الدالة على بيانات مختلفة بدون إعادة بناء الحل من البداية
هل تستخدم Group By في Power Query فقط لحساب Sum أو Count؟ في هذا الفيديو سنتجاوز إمكانيات واجهة المستخدم ونستكشف تقنيات متقدمة تجعل أداة Group By أكثر قوة ومرونة، مع أمثلة عملية من واقع تحليل البيانات. ستتعلم كيفية:
✅ العد المميز (Distinct Count) باستخدام M.
✅ تجميع القيم النصية داخل كل مجموعة.
✅ استخراج أعلى 3 عملاء مبيعاً لكل بلد.
✅ حساب المتوسط المرجح (Weighted Average) بدلاً من المتوسط البسيط.
✅ تنفيذ التجميع المشروط (Conditional Aggregation) داخل Group By.
هل غيرت اسم عمود أو حذفته... وفجأة الكويري اتكسرت؟ 😅
في الفيديو ده هنتعرف على طريقتين مهمين جدًا لحماية الكويري من المشاكل الناتجة عن تغيير هيكل البيانات.
✅ في الجزء الأول هنتعلم إزاي نستخدم MissingField.Ignore مع عدد من أهم دوال Power Query علشان الكويري يفضل شغال حتى لو تم حذف أو إعادة تسمية الأعمدة.
✅ وفي الجزء الثاني هنشوف إزاي نعمل إعادة تسمية ديناميكية للأعمدة (Dynamic Renaming) بحيث يعتمد الكويري على موقع العمود أو جزء من اسمه بدلًا من الاسم الكامل، وده بيخلي الكويري أكثر مرونة عند التعامل مع الملفات المتغيرة.
هل لو عندك بيانات مختلفة في عمود واحد Unpivot ممكن تكون الحل؟ 🤔 للأسف لاْ !
في الفيديو ده هنشوف مثال عملي لجدول بيانات محتاج نغيّر شكله من عمود احادي إلى جدول منظم، وهنجرب 3 طرق مختلفة للوصول لنفس النتيجة.
هنبدأ بالطريقة التقليدية من واجهة Power Query باستخدام:
✅ Index Column و Pivot Column
وبعدها ننتقل للـ M Language ونشوف طريقتين مختلفتين باستخدام الـLists والـRecords:
🔹 بناء الأعمدة باستخدام Lists ثم إعادة تكوين الجدول
🔹 بناء الصفوف باستخدام Records ثم إعادة تكوين الجدول
عندك جدول في Power Query فيه عناوين مزدوجة؟ 🤔 ومش عارف تعمل Unpivot بطريقة صحيحة؟
في الفيديو هنشوف حالتين مختلفتين، لأن طريقة التعامل مع الـ Double Header بتختلف حسب شكل البيانات والقيم الموجودة في الجدول.
🔹 المثال الأول: القيم موجودة في عمود واحد
🔹 المثال الثاني: القيم موزعة على عمودين
الفكرة مش مجرد استخدام Unpivot من الـ User Interface، لكن فهم شكل البيانات الأول واختيار الطريقة المناسبة للتحويل.
Index Column في Power Query ممكن يبان في البداية إنه مجرد عمود لترقيم الصفوف... لكن استخداماته أبعد من كده بكتير! 💡 في الفيديو ده هنشوف 3 أمثلة عملية توضح إزاي نستخدم الـ Index Column لحل مشاكل مختلفة في التعامل مع البيانات:
🔹 Ranking مع الحفاظ على الترتيب الأصلي
إزاي نضيف ترتيب أو Ranking للبيانات من غير ما نضطر نغيّر الترتيب الأصلي للجدول.
🔹 الشهر السابق أو السطر السابق
إزاي نستخدم الـ Index للوصول لقيمة موجودة في الصف السابق، وتطبيق نفس الفكرة على بيانات شهرية.
🔹 المجموع التراكمي (Running Total)
إزاي نحسب المجموع التراكمي اعتمادًا على الـ Index Column.
هل قابلتك قبل كده بيانات بالشكل ده؟ 🤔 كل مدينة أو فئة لها مجموعة من الأعمدة، وكل مجموعة عبارة عن زوج من الأعمدة: Product + Sales، أو أي بيانات مشابهة.
في الفيديو ده هنتعامل مع مشكلة **Pairs of Columns — أزواج الأعمدة**، وهنشوف إزاي نعيد تشكيل الجدول باستخدام Power Query ولغة {M}. هنمر على الخطوات التالية:
🔹 استخراج العناوين من الجدول
🔹 التعامل مع أعمدة البيانات وتحويلها إلى Lists
🔹 تقسيم البيانات إلى أزواج
🔹 إعادة تكوين الجداول بالشكل المطلوب
🔹 استخدام إمكانيات لغة {M} لبناء حل مرن وقابل لإعادة الاستخدام
هل القوائم المتداخلة (Nested Lists) في Power Query معقدة؟ 🤔 وهل دالة List.Transform تستحق أن تتعلمها ؟
في هذه الجلسة المسجلة، هنبدأ من مفهوم القوائم المتداخلة في Power Query، ونفهم إزاي بنبنيها ونتعامل معاها، وبعدها نفهم دالة List.Transform
الهدف إننا نفهم إزاي الـ Lists ممكن نستخدمها لبناء حلول Dynamic في Power Query باستخدام لغة {M}.
خلال الجلسة هنتناول:
🔹 مفهوم Nested Lists وخطوات بنائها
🔹 التعرف على دالة List.Transform وفكرة عملها
🔹 ضبط أنواع البيانات بأسلوب Dynamic
🔹 معالجة الأخطاء (Errors) بصورة تلقائية
🔹 إدارة أنواع البيانات اعتمادًا على جدول Excel
🔹 وفي النهاية أسئلة وأجوبة ونقاش مفتوح