Calculation Groups in Power BI: Reusable DAX Patterns

Master Power BI calculation groups to eliminate DAX duplication — build reusable time intelligence, currency conversion, and formatting patterns that scale across the entire semantic model.

E
ECOSIRE Research and Development Team
|19 مارس 20269 دقائق قراءة2.0k كلمات|

مجموعات الحساب في Power BI: أنماط DAX القابلة لإعادة الاستخدام

فكر في نموذج مالي يحتوي على 40 مقياسًا: الإيرادات، وإجمالي الربح، والأرباح قبل الفوائد والضرائب والإهلاك والاستهلاك، وصافي الدخل، و36 مقياسًا آخر. تريد الشركة الآن أن يكون كل مقياس متاحًا للفترة الحالية، والفترة السابقة، والتغيير من فترة إلى أخرى، منذ بداية العام، وحتى منذ بداية العام، والتغيير منذ بداية العام. هذا هو 240 التدابير. ثم يريدون تحويل العملة – بثلاث عملات. هذا هو 720 التدابير.

بدون مجموعات حسابية، يعد هذا كابوسًا للصيانة. باستخدام مجموعات الحساب، تتم كتابة منطق معلومات الوقت مرة واحدة، ويتم كتابة منطق تحويل العملة مرة واحدة، ويتم تطبيقها على كل مقياس أساسي تلقائيًا. تظل المقاييس الأربعين عبارة عن 40 مقياسًا، بينما تقوم عناصر الحساب بالباقي.

يغطي هذا الدليل مجموعات الحساب من الأساس المفاهيمي وحتى التنفيذ العملي، بما في ذلك الأنماط المتقدمة مثل قواعد الأسبقية وتقنيات SELECTEDMEASURE() والجمع بين مجموعات حسابية متعددة في نفس النموذج.

الوجبات الرئيسية

  • تستبدل مجموعات الحساب المئات من معلومات الوقت الزائدة ومقاييس المقارنة ببضعة عناصر حسابية
  • يشير SELECTEDMEASURE() إلى أي مقياس موجود حاليًا في سياق التقييم - وهو مفتاح إمكانية إعادة الاستخدام
  • تتحكم الأسبقية في مجموعة الحساب التي لها الأولوية عند تطبيق مجموعات متعددة في وقت واحد
  • تعمل سلاسل FORMAT() في عناصر الحساب على تمكين تنسيق الأرقام المدرك للقياس
  • تتطلب مجموعات الحساب إنشاء محرر جدولي (غير متوفر في Power BI Desktop UI أصلاً)
  • يمكن أن تتفاعل مجموعات حسابية متعددة - تعمل مجموعة معلومات الوقت + مجموعة العملة + مجموعة السيناريو معًا
  • يمكن استخدام مجموعات الحساب لتنفيذ سيناريوهات "ماذا لو"، وتبديل الوحدات، واختيار عملة العرض
  • يمكن استبعاد المقاييس من مجموعات حسابية محددة باستخدام ISSELECTEDMEASURE()

حل مجموعات حساب المشكلة

قبل مجموعات الحساب، كان ذكاء الوقت في Power BI يعني إنشاء مقاييس منفصلة لكل مجموعة من المقاييس الأساسية وحساب الوقت:

Revenue = SUM(Sales[Amount])
Revenue PY = CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date]))
Revenue YTD = CALCULATE([Revenue], DATESYTD('Date'[Date]))
Revenue YTD PY = CALCULATE([Revenue], DATESYTD(SAMEPERIODLASTYEAR('Date'[Date])))
Revenue vs PY = [Revenue] - [Revenue PY]
Revenue vs PY % = DIVIDE([Revenue vs PY], [Revenue PY])

هذه 6 مقاييس للإيرادات. كرر ذلك لإجمالي الربح، والأرباح قبل الفوائد والضرائب والإهلاك والاستهلاك، ونفقات التشغيل، و7 مؤشرات أداء رئيسية أخرى - فجأة يصبح لديك 66 مقياسًا، جميعها بصيغ متطابقة تقريبًا. عندما تطلب الشركة تغيير منطق معلومات الوقت (على سبيل المثال، استخدام السنة المالية بدلاً من السنة التقويمية)، يحتاج كل إجراء إلى التحديث.

تحل مجموعات الحساب هذه المشكلة عن طريق فصل "ما الذي نقيسه" (المقاييس الأساسية) عن "كيف نقارنه" (عناصر الحساب). تستبدل مجموعة حسابية واحدة تحتوي على 6 عناصر 5 مقاييس إضافية لكل مقياس أساسي في النموذج.


المفاهيم الأساسية

المجموعة الحسابية: جدول خاص في النموذج الدلالي بعمود واحد بالضبط. يحتوي العمود على "عناصر حسابية" - يعدل كل عنصر كيفية حساب المقاييس الأساسية عند تحديدها في مقسم طريقة عرض أو استخدامها في مصفوفة/مخطط.

عنصر الحساب: تعبير DAX مسمى يستخدم SELECTEDMEASURE() للإشارة إلى المقياس الذي يتم تقييمه حاليًا. يظهر كل عنصر حساب كصف في مقسم طريقة العرض الذي يتحكم في الفترة الزمنية أو وضع المقارنة الذي يتم عرضه.

SELECTEDMEASURE(): دالة DAX تُرجع قيمة أي مقياس يتم تقييمه حاليًا في سياق مجموعة الحساب. وهذا ما يجعل مجموعات الحساب قابلة لإعادة الاستخدام - تنطبق نفس صيغة العنصر على كل مقياس في النموذج.

الأسبقية: عندما تكون مجموعات حسابية متعددة نشطة في وقت واحد (على سبيل المثال، يحدد المستخدم "السنة السابقة" من أداة تقسيم معلومات الوقت و"USD" من أداة تقسيم العملة)، تحدد الأسبقية عنصر الحساب الخاص بالمجموعة الذي سيتم تطبيقه أولاً.


إنشاء مجموعات حسابية باستخدام المحرر الجدولي

لا يحتوي Power BI Desktop على واجهة مستخدم أصلية لإنشاء مجموعات حسابية (اعتبارًا من أوائل عام 2026). ويجب إنشاؤها باستخدام أداة خارجية - المحرر الجدولي 2 (مجاني) أو المحرر الجدولي 3 (تجاري).

الإعداد:

  1. قم بتنزيل Tabular Editor 2 من GitHub (مجاني ومفتوح المصدر)
  2. في Power BI Desktop: الأدوات الخارجية → المحرر الجدولي
  3. يتم فتح المحرر الجدولي المتصل بنموذج Power BI المفتوح

إنشاء مجموعة حساب ذكاء الوقت:

  1. في محرر الجداول، انقر بزر الماوس الأيمن فوق الجداول → إنشاء جديد → مجموعة العمليات الحسابية
  2. قم بتسميته Time Intelligence
  3. تقوم المجموعة تلقائيًا بإنشاء عمود واحد - قم بإعادة تسميته إلى Time Calculation
  4. انقر بزر الماوس الأيمن فوق المجموعة ← إضافة عنصر حسابي ← قم بتسمية كل عنصر

عنصر الحساب: الفترة الحالية (خط الأساس)

SELECTEDMEASURE()

يقوم هذا العنصر بإرجاع المقياس كما هو، بدون تعديل. يُظهر كل مقياس قيمته الطبيعية عند تحديد هذا العنصر.

عنصر الحساب: السنة السابقة

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
)

عنصر الحساب: من العام حتى تاريخه

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD('Date'[Date])
)

عنصر الحساب: السنة السابقة منذ بداية العام

CALCULATE(
    SELECTEDMEASURE(),
    DATESYTD(SAMEPERIODLASTYEAR('Date'[Date]))
)

عنصر الحساب: التغير السنوي

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR('Date'[Date])
)

عنصر الحساب: التغير السنوي %

DIVIDE(
    SELECTEDMEASURE() -
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    ),
    BLANK()
)

بعد إنشاء هذه العناصر، احفظها في المحرر الجدولي (Ctrl+S). تتم مزامنة التغييرات مرة أخرى مع Power BI Desktop.

في التقرير، أضف مقسم طريقة عرض باستخدام العمود Time Calculation. عندما يحدد المستخدم "السنة السابقة"، يعرض كل مقياس في أي مصفوفة أو مخطط تلقائيًا قيمته في السنة السابقة.


تقنية سلسلة التنسيق

تنشأ مشكلة مع عنصر التغير السنوي %: فهو يُرجع رقمًا عشريًا (0.15 للنمو بنسبة 15%)، ولكن سلسلة تنسيق المقياس الأساسي مخصصة للعملة (على سبيل المثال، "$#,0"). يتم عرض النسبة المئوية على أنها "0.15 دولار" — بتنسيق خاطئ.

الحل هو تعيين تعبير سلسلة تنسيق على عنصر الحساب. في المحرر الجدولي، يحتوي كل عنصر حساب على خاصية "Format String Expression" التي يمكن أن تحتوي على تعبير DAX يُرجع سلسلة التنسيق المراد استخدامها:

تنسيق تعبير السلسلة للتغيير السنوي %:

"0.0%"

تنسيق تعبير السلسلة لمبالغ العملة:

"$#,0"

سلسلة التنسيق الديناميكي بناءً على المقياس المحدد:

IF(
    ISSELECTEDMEASURE([Units Sold], [Order Count]),
    "#,0",
    "$#,0.00"
)

تستخدم تعبيرات سلسلة التنسيق ISSELECTEDMEASURE() للكشف عن المقياس الأساسي الموجود في السياق وإرجاع سلسلة التنسيق المناسبة. هذه هي الطريقة التي يمكن بها تنسيق عنصر حساب "التغيير السنوي %" كنسبة مئوية لمقاييس الإيرادات وكتغيير في العدد لمقاييس الوحدة.


مجموعة حساب تحويل العملة

يعد تحويل العملة حالة استخدام كلاسيكية أخرى لمجموعة العمليات الحسابية. بدون مجموعات الحساب، يتطلب النموذج الذي يحتوي على 40 مقياسًا بثلاث عملات 120 مقياسًا. مع مجموعة الحساب، يتطلب الأمر 40 عنصرًا حسابيًا أصليًا بالإضافة إلى 3 عناصر.

الإعداد: يجب أن يحتوي النموذج على جدول CurrencyRates يتضمن أسعار الصرف حسب العملة والتاريخ، وجدول أبعاد Currency لمقسم طريقة العرض.

عنصر الحساب: الدولار الأمريكي (العملة الأساسية)

SELECTEDMEASURE()

عنصر الحساب: اليورو

SUMX(
    VALUES('Date'[Date]),
    CALCULATE(SELECTEDMEASURE()) *
    CALCULATE(
        MAX(CurrencyRates[Rate]),
        CurrencyRates[ToCurrency] = "EUR"
    )
)

عنصر الحساب: الجنيه الاسترليني

SUMX(
    VALUES('Date'[Date]),
    CALCULATE(SELECTEDMEASURE()) *
    CALCULATE(
        MAX(CurrencyRates[Rate]),
        CurrencyRates[ToCurrency] = "GBP"
    )
)

تتكرر حلقة SUMX على مدار كل تاريخ وتطبق سعر الصرف لهذا التاريخ — التعامل مع العملات بشكل صحيح حتى عندما تمتد شرائح التاريخ على فترات بأسعار صرف مختلفة. قم بتعيين Precedence لمجموعة العملات أقل من مجموعة معلومات الوقت (الرقم الأقل = الأسبقية الأعلى في مصطلحات المحرر الجدولي).


قواعد الأسبقية بين مجموعات حسابية متعددة

عندما يحدد المستخدم عناصر من مجموعتي حساب في وقت واحد (على سبيل المثال، "السنة السابقة" من معلومات الوقت و"EUR" من العملة)، يقوم Power BI بتقييمها بترتيب الأسبقية.

الأسبقية يتم تعيينها كعدد صحيح في كل مجموعة حسابية - العدد الصحيح الأعلى = يتم تقييمه أولاً (أو "الخارجي").

مثال:

  • ذكاء الوقت: الأسبقية = 20 (تقييم داخلي)
  • تحويل العملة: الأسبقية = 10 (تقييم خارجي)

باستخدام هذا الإعداد، يلتف عنصر تحويل العملة حول عنصر معلومات الوقت. يؤدي تحديد "EUR" + "السنة السابقة" إلى الحساب: تحويل إلى EUR (الحساب الخارجي) قيمة السنة السابقة (الحساب الداخلي). يجب أن يتطابق ترتيب الأسبقية مع الهدف الدلالي للحسابات.

القاعدة الأساسية: يجب أن يكون لمجموعة الحساب التي تعدل سياق التاريخ (ذكاء الوقت) أسبقية أعلى (رقم الأسبقية الأقل، ويتم تقييمه داخليًا/لاحقًا). يجب أن يكون لمجموعة الحساب التي تعدل القيمة بعد حساب التاريخ (تحويل العملة، تحويل الوحدة) أسبقية أقل (يتم تقييمها خارجيًا/أولًا).


استبعاد مقاييس محددة من مجموعات الحساب

لا ينبغي أن يستجيب كل إجراء لكل مجموعة حسابية. لا ينبغي تعديل مقياس "تاريخ التقرير" الذي يُرجع تاريخ التقرير الحالي حسب معلومات الوقت. لا ينبغي تحويل مقياس "القيمة المستهدفة" الذي يتم تعيينه سنويًا إلى العام السابق.

استخدم ISSELECTEDMEASURE() في عنصر الحساب لاستبعاد مقاييس محددة:

IF(
    ISSELECTEDMEASURE([Report Date], [Target Value], [Budget]),
    SELECTEDMEASURE(),
    CALCULATE(
        SELECTEDMEASURE(),
        SAMEPERIODLASTYEAR('Date'[Date])
    )
)

يؤدي ذلك إلى مرور عنصر "السنة السابقة" دون تغيير لـ [تاريخ التقرير] و[قيمة الهدف] و[الميزانية] - مما يؤدي إلى إرجاع قيمها العادية بغض النظر عن تحديد معلومات الوقت.


تحليل سيناريو ماذا لو باستخدام مجموعات الحساب

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

-- Base Case calculation item
SELECTEDMEASURE()

-- Optimistic calculation item
SWITCH(
    TRUE(),
    ISSELECTEDMEASURE([Revenue], [Gross Profit]), SELECTEDMEASURE() * 1.15,
    ISSELECTEDMEASURE([Operating Expenses], [COGS]), SELECTEDMEASURE() * 0.95,
    SELECTEDMEASURE()
)

-- Pessimistic calculation item
SWITCH(
    TRUE(),
    ISSELECTEDMEASURE([Revenue], [Gross Profit]), SELECTEDMEASURE() * 0.85,
    ISSELECTEDMEASURE([Operating Expenses], [COGS]), SELECTEDMEASURE() * 1.10,
    SELECTEDMEASURE()
)

يقوم المستخدمون بتحديد سيناريو من أداة التقطيع؛ يتم تحديث كل إجراء مالي ليعكس افتراضات السيناريو المحدد. دمج هذا مع الوقت الذي تسمح به مجموعة المعلومات: "أرني إيرادات الربع الثالث في السيناريو المتفائل مقابل العام السابق."


الأسئلة المتداولة

هل تعمل مجموعات الحساب في Power BI Desktop بدون Premium؟

نعم. تعمل مجموعات الحساب في جميع مستويات ترخيص Power BI — فهي عبارة عن ميزة نموذج دلالي، وليست ميزة Premium. متطلب Premium الوحيد هو أنه يجب استخدام Tabular Editor لإنشائها، نظرًا لأن واجهة المستخدم الأصلية لـ Power BI Desktop لا تدعم الإنشاء (لكنها تعرضها وتقيمها بشكل صحيح). بمجرد إنشائها في Tabular Editor، تعمل مجموعات الحساب في أي مساحة عمل بما في ذلك المجانية وPro.

هل يمكنني إنشاء مجموعات حسابية بدون المحرر الجدولي؟

في واجهة المستخدم الأصلية لـ Power BI Desktop، لا يمكن إنشاء مجموعات الحساب مباشرة (اعتبارًا من أوائل عام 2026). المحرر الجدولي 2 (مجاني) هو الأداة القياسية. وبدلاً من ذلك، يمكن لأدوات نقطة النهاية XMLA (SSMS، ALM Toolkit) إنشاء مجموعات حسابية عبر البرمجة النصية TMSL. يقوم بعض المستخدمين أيضًا بإنشاء مجموعات حسابية من خلال استدعاءات XMLA REST API برمجيًا. أشارت Microsoft إلى خطط لإضافة إنشاء مجموعة العمليات الحسابية إلى Power BI Desktop محليًا في الإصدارات المستقبلية.

ما هو تأثير أداء مجموعات الحساب؟

تضيف مجموعات الحساب الحد الأدنى من النفقات العامة مقارنةً بإنشاء القياسات المكافئة يدويًا. يستدعي كل تقييم SELECTEDMEASURE() DAX للقياس المشار إليه - ولا توجد تكلفة إضافية تتجاوز ما قد يتم تحمله من إجراءات صريحة مكافئة. في الواقع، غالبًا ما تعمل مجموعات الحساب على تحسين أداء النموذج عن طريق استبدال العديد من المقاييس الصريحة المشابهة (التي تنشئ جميعها إدخالات ذاكرة التخزين المؤقت للاستعلام) بعدد أقل من العناصر التي تشترك في نفس مسارات التقييم.

هل يمكن استخدام مجموعات الحساب مع المقاييس الضمنية من الأعمدة التي تم إنشاؤها تلقائيًا؟

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

كيف تتفاعل مجموعات الحساب مع الأمان على مستوى الصف؟

تعتبر مجموعات الحساب والأمان على مستوى الصف متعامدة - فهي تعمل بشكل مستقل. يقوم RLS بتصفية الصفوف التي تكون مرئية للمستخدم؛ تقوم مجموعات الحساب بتعديل كيفية حساب مقاييس تلك الصفوف المرئية. تعمل المجموعة بشكل صحيح: يقوم RLS بتحديد البيانات، ثم يقوم عنصر مجموعة الحساب بتحويل منطق القياس. لا توجد تعارضات معروفة بين RLS التي تم تنفيذها بشكل صحيح ومجموعات الحساب.

ما الفرق بين مجموعات الحساب ومعلمات الحقل؟

تقوم مجموعات الحساب بتعديل كيفية حساب القياسات (تطبيق التحولات الزمنية، وتحويلات العملة، وتسويات السيناريو). تسمح معلمات الحقل للمستخدمين بتحديد المقياس أو العمود الذي يظهر في التمثيل المرئي - التبديل بين الإيرادات والأرباح والوحدات، على سبيل المثال، في المخطط. إنها تحل مشكلات مختلفة ويمكن استخدامها معًا: معلمات المجال لتحديد المقياس الأساسي، ومجموعات الحساب لاختيار مقارنة الوقت لهذا المقياس.


الخطوات التالية

تعد مجموعات الحساب إحدى أقوى الأدوات لإنشاء نماذج دلالية Power BI قابلة للصيانة والتوسع. عند تنفيذها بشكل صحيح، فإنها تقضي على تكرار DAX، وتقلل من تعقيد النموذج، وتجعل النموذج قابلاً للتوسيع - إن إضافة فترة معلومات زمنية جديدة تعني إضافة عنصر حسابي واحد، وليس إعادة كتابة عشرات المقاييس.

تتضمن خدمات نمذجة بيانات Power BI من ECOSIRE تصميم مجموعة العمليات الحسابية وتنفيذها كجزء من تطوير النموذج الدلالي. اتصل بنا لمناقشة كيف يمكن لمجموعات الحساب تبسيط نموذجك الحالي أو تحسين التنفيذ التالي.

E

بقلم

ECOSIRE Research and Development Team

بناء منتجات رقمية بمستوى المؤسسات في ECOSIRE. مشاركة رؤى حول تكاملات Odoo وأتمتة التجارة الإلكترونية وحلول الأعمال المدعومة بالذكاء الاصطناعي.

الدردشة على الواتساب