العمليات الحسابية الإضافية لتحليل معلومات الوقت

مكتمل

توجد دالات أخرى لتحليل معلومات الوقت في DAX تهتم بإرجاع تاريخ واحد. ستتعرف على هذه الدلالات من خلال تطبيقها في سيناريوهين مختلفين.

تُرجع دالتا DAX FIRSTDATE وLASTDATE التاريخ الأول والأخير في سياق عامل التصفية الحالي لعمود التواريخ المحدد.

حساب التكرارات الجديدة

ثمة استخدام آخر لدلالات تحليل معلومات الوقت يتمثل في حساب التكرارات الجديدة. يوضح المثال التالي كيف يمكنك حساب عدد العملاء الجدد لفترة زمنية. يتم احتساب عميل جديد في الفترة الزمنية التي قام فيها بأول عملية شراء.

مهمتك الأولى هي إضافة القياس التالي إلى الجدول Sales الذي يحسب عدد العملاء المميزين حتى تاريخه (LTD). يُقصد بمصطلح «من البداية حتى تاريخ اليوم» من بداية الوقت حتى آخر تاريخ في سياق التصفية. تنسيق القياس كرقم صحيح باستخدام فاصل ثلاثة أرقام.

Customers LTD =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD

أضف قياس ⁧⁩«Customers LTD»⁧⁩ إلى المصفوفة المرئية. لاحظ أنه ينتج نتيجة للعملاء«Customers LTD» حتى نهاية كل شهر.

⁩⁧⁩توضح الصورة مصفوفة مرئية مع التجميع حسب Year وMonth في الصفوف وRevenue وRevenue YTD وRevenue YoY % وCustomers LTD

تُرجع الدالة DATESBETWEEN جدولاً يحتوي على عمود من التواريخ يبدأ بتاريخ بدء محدد ويستمر حتى تاريخ انتهاء محدد. عندما يكون تاريخ البدء هو BLANK، سيستخدم التاريخ الأول في عمود التاريخ. عندما يكون تاريخ البدء هو BLANK، سيستخدم التاريخ الأول في عمود التاريخ. في هذه الحالة، يتم تحديد تاريخ الانتهاء بواسطة الدالة MAX، التي تُرجع التاريخ الأخير في سياق عامل التصفية. لذلك، إذا كان شهر أغسطس 2017 في سياق التصفية، ثم الدالة MAX سيعود 31 أغسطس 2017 والدالة DATESBETWEEN سيعيد كافة التواريخ حتى 31 أغسطس 2017.

بعد ذلك، ستقوم بتعديل المقياس عن طريق إعادة تسميته إلى ⁧⁩⁩New Customers⁦⁩ وبإضافة متغير ثانٍ لتخزين عدد العملاء المميزين ⁧⁩قبل⁧⁩ الفترة الزمنية في سياق التصفية. والآن تطرح عبارة RETURN هذه القيمة من العملاء حتى تاريخه (LTD) للحصول على نتيجة، وهي عدد العملاء الجدد في الفترة الزمنية.

New Customers =
VAR CustomersLTD =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MAX('Date'[Date])
        ),
    'Sales Order'[Channel] = "Internet"
    )
VAR CustomersPrior =
    CALCULATE(
        DISTINCTCOUNT(Sales[CustomerKey]),
        DATESBETWEEN(
            'Date'[Date],
            BLANK(),
            MIN('Date'[Date]) - 1
        ),
        'Sales Order'[Channel] = "Internet"
    )
RETURN
    CustomersLTD - CustomersPrior

⁩⁧⁩تُظهر الصورة مصفوفة مرئية مع التجميع حسب Year وMonth في الصفوف وRevenue، وRevenue YTD، وRevenue YoY %، وNew Customers. يتم تمييز قيم New Customers.

بالنسبة لمتغير CustomersPrior، لاحظ أن الدالة DATESBETWEEN تتضمن تواريخ حتى التاريخ الأول في سياق عامل التصفية ناقص واحد. لأن Microsoft Power BI يخزن التواريخ داخليًا كأرقام، يمكنك إضافة أو طرح أرقام لتحويل تاريخ.

حسابات اللقطات

يتم أحيانًا تخزين بيانات الحقائق كلقطات في الوقت المناسب. وتشمل الأمثلة الشائعة مستويات المخزون أو أرصدة الحسابات. يتم تحميل لقطة من القيم في الجدول على أساس دوري.

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

عندما تقوم بتلخيص جداول لقطة التقرير، يمكن أن تعتمد صيغ القياس على دالات الذكاء الزمني DAX لفرض عامل تصفية تاريخ واحد.

في المثال التالي، ستستكشف سيناريو شركة Adventure Works. قم بالتبديل إلى طريقة عرض النموذج وحدد الرسم التخطيطي لنموذج ⁧⁩⁩Inventory⁦.⁧

تُظهر الصورة مخططًا نموذجيًا يتكون من ثلاثة جداول: Product وDate وInventory. لكل من جدولي Product وDate علاقة مركز بأطراف بجدول Inventory.

لاحظ أن الرسم التخطيطي يعرض ثلاثة جداول: Product و Date و Inventory. يخزّن جدول Inventory لقطات لأرصدة الوحدات لكل تاريخ ومنتج. والأهم من ذلك، أن الجدول لا يحتوي على تواريخ مفقودة ولا إدخالات مكررة لأي منتج في نفس التاريخ. أيضًا، يتم تخزين سجل لقطة التقرير الأخير لتاريخ 15 يونيو 2020.

الآن، قم بالتبديل إلى عرض التقرير وحدد ⁧⁩Page 2⁩ من التقرير. إضافة العمود UnitsBalance من جدول Inventory إلى المصفوفة المرئية. تم تعيين التلخيص الافتراضي على مجموع القيم.

تظهر الصورة مصفوفة مرئية بعنوان FY2020 Mountain-200 Bike Stock. تحتوي على Product مجمّعًا في الصفوف وMonth مجمّعًا في الأعمدة. يتم عرض القيم العالية لكل منتج وشهر.

هذا التكوين المرئي هو مثال عن كيفية عدم تلخيص قيمة لقطة. إضافة اللقطات اليومية للأرصدة معًا لا تسفر عن نتيجة ذات مغزى. لذلك، قم بإزالة الحقل ⁧⁩UnitsBalance⁧⁩ من المصفوفة المرئية.

الآن، سيتم إضافة قياس إلى جدول Inventory يجمع قيمة UnitsBalance لتاريخ واحد. سيكون التاريخ هو آخر تاريخ لكل فترة زمنية. يتم تحقيق ذلك باستخدام الدالة LASTDATE. تنسيق القياس كرقم صحيح مع فاصل آلاف.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTDATE('Date'[Date])
)

ملاحظة

لاحظ أن صيغة القياس تستخدم الدالة SUM. يجب استخدام دالة تجميعية (لا تسمح القياسات بالإشارات المباشرة إلى الأعمدة)، ولكن بالنظر إلى وجود صف واحد فقط لكل منتج لكل تاريخ، فإن الدالة SUM ستعمل فقط على صف واحد.

أضف ⁧⁩⁩Stock on Hand⁦⁩ إلى المصفوفة المرئية. تعتمد قيمة كل منتج الآن على رصيد الوحدات المسجلة الأخيرة لكل شهر.

تظهر الصورة مصفوفة مرئية بعنوان FY2020 Mountain-200 Bike Stock. تحتوي على Product مجمّعًا في الصفوف وMonth مجمّعًا في الأعمدة. يتم عرض القيم الأقل لكل منتج وشهر. يونيو 2020 والإجمالي فارغ.

يرجع المقياس BLANKs لـ يونيو 2020 لأنه لا يوجد سجل للتاريخ الأخير في يونيو. وفقًا للبيانات، فإنه لم يحدث حتى الآن.

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

الخطوة التالية هي ضبط صيغة القياس لتحديد آخر تاريخ ⁧⁩له نتيجة غير فارغة⁧⁩ ثم تصفية حسب ذلك التاريخ. يمكنك تحقيق هذه المهمة باستخدام الدالة DAX LASTNONBLANK.

استخدم تعريف القياس التالي لتعديل قياس ⁧⁩⁩Stock on Hand⁦⁩.

Stock on Hand =
CALCULATE(
    SUM(Inventory[UnitsBalance]),
    LASTNONBLANK(
        'Date'[Date],
        CALCULATE(SUM(Inventory[UnitsBalance]))
    )
)

في المرئية المصفوفة لاحظ القيم يونيو 2020 والإجمالي (يمثل السنة بأكملها).

⁩⁧⁩تُظهر صورة أن المصفوفة المرئية لها الآن قيم لشهر يونيو 2020 والإجمالي⁧

الدالة LASTNONBLANKدالة متكرر. وتُرجع آخر تاريخ ينتج عن نتيجة غير فارغة. وهو يحقق هذه النتيجة من خلال التكرار عبر كافة التواريخ في سياق ⁧⁩التصفية بترتيب زمني تنازلي⁩. (على العكس من ذلك، تتكرر FIRSTNONBLANK بترتيبٍ زمني تصاعدي.) لكل تاريخ، تقيِّم تمرير التعبير. عندما تواجه نتيجة غير فارغة الدالة بإرجاع التاريخ. ثم يتم استخدام هذا التاريخ لتصفية الدالة CALCULATE.

ملاحظة

الدالة LASTNONBLANK تقيم التعبير في سياق الصف. يجب استخدام الدالة CALCULATE لنقل سياق الصف إلى سياق التصفية لتقييم التعبير على نحوٍ صحيحٍ.

يجب عليك الآن إخفاء عمود ⁦⁩⁩UnitsBalance⁦⁦⁩ ⁦في جدول ⁩UnitsBalance⁦. سيمنع مؤلفو التقارير من تلخيص أرصدة وحدة اللقطات بشكل غير ملائم.