2.3الأعمدة المحسوبة (Calculated Columns) مقابل المقاييس (Measures)
الأساسي في 30 ثانية
- المقياس يحسب مجمعًا لحظيًا حسب سياق المرئي (لا يُخزَّن شيء): وهو قلب Power BI.
- العمود المحسوب يضيف قيمة لكل سطر، تُحسب عند التحديث وتُخزَّن: وهو يضخّم النموذج.
- المنعكس: المقياس أولًا؛ ويُحفظ العمود المحسوب للحاجة سطرًا بسطر (لترشيح، وتصنيف، وربط) — وما يجب أن يتفاعل مع المرشحات فهو مقياس.
حالة مصغّرة متسلسلة — زينب تحسم: تخزين أم لحظي
تريد زينب، مراقبة التسيير في شركة صغيرة للصناعة الغذائية بالجزائر، هامشًا لكل سطر بيع وإجماليًا يُعاد حسابه حسب المدينة. وتظن أنه يجب وضع كل شيء في عمود محسوب. فتطبق القسم: الهامش لكل سطر = المبيعات[المبلغ] * 0,3 عمود محسوب (قيمة مخزنة، سطرًا بسطر)، أما إجمالي المبيعات = SUM(المبيعات[المبلغ]) فهو مقياس (لحظي). وتضع مصفوفة المدينة × [إجمالي المبيعات]: فيُعاد حساب المقياس حسب المدينة وحسب الإجمالي، بينما يبقى العمود جامدًا. وتحفظ الاختبار الحاسم: ما يجب أن يتفاعل مع المقسمات (Slicers) فهو مقياس. والمنعكس مثبّت: المقياس أولًا، والعمود عند الحاجة سطرًا بسطر.
حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والنص البرمجي وتحدي 48 ساعة للقسم 2.3.
1. طريقتان للحساب
يضيف العمود المحسوب (Calculated Column) قيمة إلى كل سطر من الجدول، تُحسب عند التحديث وتُخزَّن في الذاكرة — مثل الهامش = المبيعات[المبلغ] * 0,3. ويحسب المقياس (Measure) مجمعًا لحظيًا حسب سياق المرئي ولا يخزّن شيئًا — مثل إجمالي المبيعات = SUM(المبيعات[المبلغ]). وتفهم زينب سريعًا أيّ الاثنين تنظر إليه.
2. شجرة القرار
يعيش العمود المحسوب في سياق الصف (Row Context) («السطر الحالي»)؛ ويعيش المقياس في سياق المرشح (Filter Context) («ما يرشحه المرئي» — مدينة العمود، وشهر العمود). والاختبار الحاسم: ما يجب أن يتفاعل مع المرشحات في التقرير فهو مقياس. والعمود الذي لا نفعل سوى جمعه كان يجب أن يكون مقياسًا. وتطرح زينب السؤال عند كل حساب.
3. ترتيب المقاييس
عادة جيدة من الآن: تجميع المقاييس في جدول مخصص «_المقاييس» لنموذج نظيف. ونُبقي الأعمدة المحسوبة نادرة، لأنها تضخّم الملف. وترتب زينب مقاييسها وتحدّ الأعمدة على الضرورة القصوى سطرًا بسطر.
🔎 مثال ملموس — 🔎 مثال ملموس — مبارزة العمود مقابل المقياس
تنشئ زينب الاثنين وتقارن:
عمود محسوب : الهامش = المبيعات[المبلغ] * 0.3 (قيمة لكل سطر)
مقياس : إجمالي المبيعات = SUM(المبيعات[المبلغ]) (يعيش في المرئيات)
← مصفوفة المدينة × [إجمالي المبيعات] : يُعاد حساب المقياس حسب المدينة وحسب الإجمالي.
القراءة: يُعاد حساب المقياس في كل خلية من المرئي (حسب المدينة، وحسب الإجمالي).
الدرس: يعرض العمود قيمة جامدة؛ ويتكيف المقياس مع السياق.
مفردات القسم
- العمود المحسوب (Calculated Column)
- عمود DAX جديد يُقيَّم سطرًا بسطر و«يُخزَّن»: الهامش = المبيعات[المبلغ] - المبيعات[التكلفة]. و«يضخّم النموذج».
مثال بسيط: تحسب زينب هامشًا لكل سطر بيع.
ما ليس كذلك: مجمع يُعاد حسابه حسب المرئي.
رد فعل: حاجة سطرًا بسطر (ترشيح، ربط) ← عمود.
- المقياس (Measure)
- حساب DAX يُقيَّم عند الطلب في سياق المرئي: إجمالي المبيعات = SUM(المبيعات[المبلغ]).
مثال بسيط: تضع زينب [إجمالي المبيعات] في مصفوفة المدينة × الشهر.
ما ليس كذلك: قيمة مخزنة جامدة عند التحديث.
رد فعل: ما يجب أن يتفاعل مع المرشحات ← مقياس.
- سياق الصف (Row Context)
- بيئة العمود المحسوب: «السطر الحالي».
مثال بسيط: تقرأ زينب هامش كل بيع، سطرًا بسطر.
ما ليس كذلك: الترشيح الديناميكي لمرئي.
رد فعل: عمود محسوب ← فكّر بـ «السطر الحالي».
- سياق المرشح (Filter Context)
- بيئة المقياس: «ما يرشحه المرئي» (مدينة العمود، وشهر العمود).
مثال بسيط: تعيد زينب حساب [إجمالي المبيعات] حسب المدينة تلقائيًا.
ما ليس كذلك: قيمة جامدة متطابقة في كل مكان.
رد فعل: مقياس ← فكّر بـ «ما يرشحه المرئي».
- المقياس الضمني (Implicit Measure)
- التجميع التلقائي لعمود مسحوب إلى القيم: عملي في البداية، ويُستبدل بمقاييس صريحة حقيقية.
مثال بسيط: تستبدل زينب تجميعاتها التلقائية بـ [إجمالي المبيعات].
ما ليس كذلك: مقياس صريح مسمّى ومنسّق.
رد فعل: بمجرد تجاوز المجموع، أنشئ مقياسًا صريحًا.
في التطبيق — تطبيق عملي — مبارزة العمود مقابل المقياس
- عمود محسوب: عرض الجدول (Data View)، جدول المبيعات ← عمود جديد ← الهامش = المبيعات[المبلغ] * 0.3 — لاحظ القيمة في كل سطر، مثل زينب.
- مقياس: مقياس جديد ← إجمالي المبيعات = SUM(المبيعات[المبلغ]) — لا يظهر شيء في الجدول: فهو يعيش في المرئيات.
- أنشئ مصفوفة المدينة × [إجمالي المبيعات]: يُعاد حساب المقياس حسب المدينة وحسب الإجمالي — السياق قيد العمل.
- أنشئ المقياس متوسط السلة = AVERAGE(المبيعات[المبلغ]) وقارنه بمتوسط عمود الهامش: فرق التخزين/اللحظي.
نص برمجي خطوة بخطوة — الحسم مثل زينب (6 دقائق)
1) أنشئ عمودًا محسوبًا: الهامش = المبيعات[المبلغ] * 0.3، ولاحظ ظهور القيمة في كل سطر. 2) أنشئ مقياسًا: إجمالي المبيعات = SUM(المبيعات[المبلغ]) — لا يظهر في الجدول. 3) ضع [إجمالي المبيعات] في مصفوفة المدينة × [إجمالي المبيعات]: فيُعاد حسابه حسب المدينة. 4) أضف متوسط السلة = AVERAGE(المبيعات[المبلغ]) وقارن. 5) رتّب مقاييسك في جدول مخصص «_المقاييس»، مثل زينب.
إذا كان حساب ما يجب أن يتفاعل مع المقسمات، فلا تأخذ عمودًا: أنشئ مقياسًا.
نموذج للنسخ واللصق — مقياس أم عمود؟
ما يجب أن يتفاعل مع المرشحات (المقسمات، النقرات) ← مقياس (لحظي)
حاجة إلى قيمة سطرًا بسطر (ترشيح، تصنيف، ربط) ← عمود
عمود : الهامش = المبيعات[المبلغ] * 0.3
مقياس : إجمالي المبيعات = SUM(المبيعات[المبلغ])
القاعدة: المقياس أولًا؛ ورتّب المقاييس في جدول «_المقاييس».
الهامش لكل سطر
تحسب زينب الهامش = المبيعات[المبلغ] * 0.3 في عمود: فالقيمة موجودة في كل سطر (مفيدة للترشيح).
إجمالي يتفاعل
تضع زينب [إجمالي المبيعات] كمقياس: فيُعاد حساب الإجمالي حسب المدينة، وحسب الشهر، حسب المقسمات.
متوسط السلة
متوسط السلة = AVERAGE(المبيعات[المبلغ]): مقياس يتكيف مع سياق المرئي.
جدول _المقاييس
تجمع زينب كل مقاييسها في جدول مخصص «_المقاييس»: فيبقى النموذج نظيفًا.
✓ ممارسات جيدة
- المقياس أولًا: يتفاعل مع المرشحات ولا يخزّن شيئًا.
- العمود المحسوب فقط لحاجة سطرًا بسطر (ترشيح، ربط).
- رتّب المقاييس في جدول مخصص «_المقاييس».
✗ أخطاء شائعة
- إنشاء عمود محسوب لا نفعل سوى جمعه.
- الإكثار من الأعمدة المحسوبة (تضخّم النموذج).
- انتظار أن يتفاعل عمود مع المقسمات (فهو جامد).
النقاط الأساسية
- المقياس = حساب لحظي حسب سياق المرئي: قلب Power BI.
- العمود المحسوب = قيمة مخزنة سطرًا بسطر: للترشيح، والتصنيف، والربط — لا للتجميع.
- المنعكس: المقياس أولًا. وعمود لا نفعل سوى جمعه كان يجب أن يكون مقياسًا.
- رتّب مقاييسك: جدول مخصص «_المقاييس» يجمعها بنظافة.
تحدي 48 ساعة — طبّقه غدًا
أعد مبارزة زينب: أنشئ عمودًا محسوبًا (الهامش = المبيعات[المبلغ] * 0.3) ومقياسًا (إجمالي المبيعات = SUM(المبيعات[المبلغ]))، وضع المقياس في مصفوفة وتحقق من أنه يُعاد حسابه حسب المدينة. واكتب في جملة واحدة لماذا ما يتفاعل مع المرشحات مقياس.
- أميّز العمود المحسوب من المقياس.
- أختار المقياس أولًا والعمود عند الحاجة سطرًا بسطر.
- أرتّب مقاييسي وأشرح السياق (الصف مقابل المرشح).
أسئلة شائعة
لماذا لا يتفاعل عمودي المحسوب مع المقسمات؟
بالطبيعة: فالعمود المحسوب يُقيَّم عند التحديث، سطرًا بسطر، وتُخزَّن قيمته مرة واحدة. فهو إذن جامد ولا يرى مرشحات التقرير. وما يجب أن يتفاعل مع المقسمات يجب أن يكون مقياسًا، لأن المقياس يُعاد حسابه لحظيًا في سياق المرئي.
هل تكفي المقاييس الضمنية (سحب عمود)؟
للبداية نعم: فسحب عمود رقمي ينشئ تجميعًا تلقائيًا. لكن المقاييس الصريحة تفرض نفسها سريعًا: قابلة لإعادة الاستخدام، وقابلة للتنسيق، وقابلة للتوثيق، وإلزامية لأي حساب غير بديهي (النسب، وذكاء الوقت) ولشهادة PL-300. رتّبها في جدول «_المقاييس».
ما الذي يجب أن يتفاعل مع مرشحات التقرير (المقسمات، النقرات)؟