2.4مقدمة إلى DAX: SUM، AVERAGE، COUNT
الأساسي في 30 ثانية
- DAX = لغة الحساب في Power BI (نفسها مثل Power Pivot): نبدأ بـ SUM، AVERAGE، COUNT/COUNTROWS، MIN، MAX.
- DIVIDE يحل محل «/» منهجيًا: القسمة المحصنة، فلا خطأ قسمة على صفر بعد الآن.
- CALCULATE يقيّم تعبيرًا بتعديل المرشح — «رقم الأعمال، لكن لباريس»؛ وإتقانه الكامل يشغل المستوى 3.
حالة مصغّرة متسلسلة — زينب تكتب قاعدة مقاييسها
تريد زينب، مراقبة التسيير في شركة صغيرة للصناعة الغذائية بالجزائر، ثلاثة مؤشرات: رقم الأعمال، وعدد المبيعات، ومتوسط السلة. فتكتب قاعدة مقاييس: إجمالي المبيعات = SUM(المبيعات[المبلغ])، وعدد المبيعات = COUNTROWS(المبيعات)، ثم متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات]) — ملاحظةً أن مقياسًا يشير إلى آخر. وتنسّق كل واحد (€، وفاصل الآلاف، والكسور). ثم تتآلف مع CALCULATE: مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس")، وحصة باريس = DIVIDE([مبيعات باريس], [إجمالي المبيعات]) منسقة بنسبة %. ثلاثة مقاييس تتركب: فزينب تكتب DAX حقيقيًا بالفعل.
حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والنص البرمجي وتحدي 48 ساعة للقسم 2.4.
1. التجميعات الأساسية
DAX (تعابير تحليل البيانات (Data Analysis Expressions)) هي لغة الحساب في Power BI — نفسها مثل Power Pivot في Excel. نبدأ بالتجميعات البسيطة: SUM، AVERAGE، COUNT/COUNTROWS، MIN، MAX، وDIVIDE — القسمة المحصنة التي تتفادى أخطاء القسمة على صفر. وتدوّن زينب أول عادة جيدة: تُبنى المقاييس باللبنات، ويمكن لمقياس (بل يجب) أن يشير إلى غيره.
2. لمحة عن CALCULATE
ثم الدالة التي تغير كل شيء: CALCULATE، التي تقيّم تعبيرًا بتعديل المرشح. «رقم الأعمال، لكن لباريس فقط»: مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس"). ويشغل إتقانها الكامل المستوى 3؛ وهنا نتآلف معها في حالة بسيطة. وتكرر زينب الجملة: «احسب هذا، بهذا المرشح».
3. التسمية والتنسيق
عادات جيدة منذ اليوم الأول: تسمية كل مقياس بوضوح وتنسيقه (€، و%، والكسور) — فتقرير بالأرقام الخام ليس منتهيًا. ونستخدم DIVIDE بدل «/»، ونرتب المقاييس في جدول مخصص. وتنسّق زينب كل مقياس عند إنشائه، دون استثناء.
🔎 مثال ملموس — 🔎 مثال ملموس — ثلاثة مقاييس تتركب
قاعدة DAX لدى زينب، من الأبسط إلى الأكثر تركيبًا:
إجمالي المبيعات = SUM(المبيعات[المبلغ])
عدد المبيعات = COUNTROWS(المبيعات)
متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات])
مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس")
حصة باريس = DIVIDE([مبيعات باريس], [إجمالي المبيعات]) // منسقة بنسبة %
القراءة: [متوسط السلة] يشير إلى [إجمالي المبيعات] و[عدد المبيعات]: فالمقاييس تُبنى باللبنات.
الدرس: DIVIDE يتفادى القسمة على صفر؛ وCALCULATE يضيف مرشحًا دون إعادة كتابة الصيغة.
مفردات القسم
- DAX
- لغة المقاييس والأعمدة المحسوبة: دوال بنمط Excel، لكنها تُقيَّم في سياق نموذج.
مثال بسيط: تكتب زينب أول مقاييسها بلغة DAX.
ما ليس كذلك: صيغة Excel لا تنظر إلا إلى خلايا.
رد فعل: DAX = حسابات في سياقات.
- SUM / AVERAGE / MIN / MAX
- التجميعات الأساسية على عمود: SUM(المبيعات[المبلغ]).
مثال بسيط: تحسب زينب إجمالي المبيعات = SUM(المبيعات[المبلغ]).
ما ليس كذلك: مجموع مكتوب يدويًا في مرئي.
رد فعل: عمود يجب تجميعه ← SUM، AVERAGE، MIN، MAX.
- COUNTROWS مقابل COUNT
- يعد COUNTROWS(المبيعات) سطور جدول؛ وتعد COUNT القيم غير الفارغة لعمود.
مثال بسيط: تعد زينب مبيعاتها بـ COUNTROWS(المبيعات).
ما ليس كذلك: مجموع مبالغ، وهو ليس عدًّا.
رد فعل: عد الأحداث ← COUNTROWS(جدول).
- DIVIDE
- DIVIDE(البسط؛ المقام؛ [عند_الصفر]): القسمة المحصنة، فلا خطأ على صفر بعد الآن.
مثال بسيط: تكتب زينب متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات]).
ما ليس كذلك: قسمة بـ «/» يمكن أن تُرجع خطأ.
رد فعل: دائمًا DIVIDE بدل «/».
- CALCULATE
- دالة DAX: تقيّم تعبيرًا في سياق مرشح معدَّل.
مثال بسيط: تكتب زينب مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس").
ما ليس كذلك: مقياس يجمع كل شيء دون ترشيح.
رد فعل: «احسب هذا، بهذا المرشح».
في التطبيق — تطبيق عملي — قاعدة مقاييسك
- أنشئ المقاييس الأساسية: إجمالي المبيعات = SUM(المبيعات[المبلغ])، وعدد المبيعات = COUNTROWS(المبيعات)، ومتوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات]) — لاحظ إعادة استخدام مقاييس في مقياس، مثل زينب.
- نسّق كل مقياس (تبويب أدوات المقياس): € للمبالغ، وفاصل الآلاف، و0 أو 1 كسر.
- أول CALCULATE: مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس") — ضعها في بطاقة بجانب إجمالي المبيعات.
- وواحدة أخرى: حصة باريس = DIVIDE([مبيعات باريس], [إجمالي المبيعات]) منسقة بنسبة % — ثلاثة مقاييس تتركب.
نص برمجي خطوة بخطوة — كتابة قاعدة DAX مثل زينب (8 دقائق)
1) مقياس جديد: إجمالي المبيعات = SUM(المبيعات[المبلغ]). 2) مقياس جديد: عدد المبيعات = COUNTROWS(المبيعات). 3) متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات]) — فأنت تعيد استخدام مقاييس في مقياس. 4) نسّق كل مقياس (€، والآلاف، والكسور). 5) CALCULATE: مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس")، ثم حصة باريس = DIVIDE([مبيعات باريس], [إجمالي المبيعات]) بنسبة %. 6) رتّب كل شيء في جدول «_المقاييس».
إذا ترددت في دالة DAX، فمرجع dax.guide (SQLBI) يوثّق كل واحدة بأمثلة.
نموذج للنسخ واللصق — قاعدة مقاييسي
إجمالي المبيعات = SUM(المبيعات[المبلغ])
عدد المبيعات = COUNTROWS(المبيعات)
متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات])
مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس")
حصة باريس = DIVIDE([مبيعات باريس], [إجمالي المبيعات]) // %
القواعد: DIVIDE (لا «/» أبدًا)؛ ونسّق كل مقياس؛ وجدول «_المقاييس».
رقم الأعمال
تكتب زينب إجمالي المبيعات = SUM(المبيعات[المبلغ]): المقياس الأساسي لكل لوحة قيادتها.
عدد المبيعات
تعد زينب معاملاتها بـ عدد المبيعات = COUNTROWS(المبيعات)، وهو أوثق من COUNT على عمود.
متوسط السلة
متوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات]): مقياس مركّب يستند إلى مقياسين آخرين.
رقم أعمال باريس
مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس"): رقم الأعمال نفسه، لكن مرشّحًا على باريس.
✓ ممارسات جيدة
- بناء المقاييس باللبنات (مقياس يشير إلى أخرى).
- DIVIDE بدل «/» منهجيًا.
- تنسيق كل مقياس عند إنشائه (€، و%، والكسور).
✗ أخطاء شائعة
- القسمة بـ «/» (خطر خطأ القسمة على صفر).
- ترك أرقام خام غير منسقة (تقرير غير منتهٍ).
- الاعتقاد بإتقان CALCULATE دفعة واحدة (عمقها في المستوى 3).
النقاط الأساسية
- تُبنى المقاييس باللبنات: يمكن لمقياس (بل يجب) أن يشير إلى غيره.
- DIVIDE يحل محل «/» منهجيًا: فلم تعد القسمة على صفر موجودة.
- CALCULATE = «احسب هذا، بهذا المرشح»: الجملة التي تُكرَّر.
- نسّق كل مقياس عند إنشائه: فتقرير بالأرقام الخام ليس منتهيًا.
تحدي 48 ساعة — طبّقه غدًا
ركّب قاعدة زينب: اكتب إجمالي المبيعات = SUM(المبيعات[المبلغ])، وعدد المبيعات = COUNTROWS(المبيعات)، ومتوسط السلة = DIVIDE([إجمالي المبيعات], [عدد المبيعات])، ونسّق كل مقياس، ثم أضف مبيعات باريس = CALCULATE([إجمالي المبيعات], المبيعات[المدينة] = "باريس"). ورتّب كل شيء في جدول «_المقاييس».
- أكتب مقاييس DAX بـ SUM وAVERAGE وCOUNTROWS.
- أستخدم DIVIDE بدل «/» وأنسّق كل مقياس.
- أكتب CALCULATE بسيطًا يعدّل المرشح.
أسئلة شائعة
تشبه DAX صيغ Excel: هل هي اللغة نفسها؟
تتشابه الصياغة (توجد SUM، وAVERAGE، وIF في الاثنين)، لكن المنطق يختلف: يحسب Excel خلايا، ويحسب DAX في سياقات (المرئي، والمرشحات). والمقياس نفسه يعطي نتيجة مختلفة حسب مدينة العمود أو شهر العمود. ومكتسباتك في Excel تساعد في الصياغة؛ أما منطق السياق فيُتعلَّم — وهذه قفزة المستوى 3.
أين أتعلم دوال DAX بعد هذا الدليل؟
المرجع الرسمي المجاني هو dax.guide (من SQLBI): يوثّق كل دالة بصياغتها وأمثلة. وبعد ذلك، تعد SQLBI (ماركو روسو وألبرتو فيراري) المرجع العالمي لـ DAX، ويقترح Microsoft Learn مسارات منظمة تحضّر لشهادة PL-300. ويذكرها قسم الموارد لدينا.
ماذا تفعل دالة CALCULATE في DAX؟