العمليات الحسابية الإضافية لتحليل معلومات الوقت
توجد دالات أخرى لتحليل معلومات الوقت في 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» حتى نهاية كل شهر.
تُرجع الدالة 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
بالنسبة لمتغير CustomersPrior، لاحظ أن الدالة DATESBETWEEN
تتضمن تواريخ حتى التاريخ الأول في سياق عامل التصفية ناقص واحد. لأن Microsoft Power BI يخزن التواريخ داخليًا كأرقام، يمكنك إضافة أو طرح أرقام لتحويل تاريخ.
حسابات اللقطات
يتم أحيانًا تخزين بيانات الحقائق كلقطات في الوقت المناسب. وتشمل الأمثلة الشائعة مستويات المخزون أو أرصدة الحسابات. يتم تحميل لقطة من القيم في الجدول على أساس دوري.
عند تلخيص قيم اللقطة (مثل مستويات المخزون)، يمكنك تلخيص القيم عبر أي بُعد باستثناء التاريخ. إضافة عدد مستويات المخزون عبر فئات المنتجات ينتج ملخصًا ذا معنى، ولكن إضافة عدد مستويات المخزون عبر التواريخ لا. يضيف مستوى المخزون أمس إلى مستوى المخزون اليوم وليست عملية مفيدة لأداء (إلا إذا كنت ترغب في متوسط هذه النتيجة).
عندما تقوم بتلخيص جداول لقطة التقرير، يمكن أن تعتمد صيغ القياس على دالات الذكاء الزمني DAX لفرض عامل تصفية تاريخ واحد.
في المثال التالي، ستستكشف سيناريو شركة Adventure Works. قم بالتبديل إلى طريقة عرض النموذج وحدد الرسم التخطيطي لنموذج Inventory.
لاحظ أن الرسم التخطيطي يعرض ثلاثة جداول: Product و Date و Inventory. يخزّن جدول Inventory لقطات لأرصدة الوحدات لكل تاريخ ومنتج. والأهم من ذلك، أن الجدول لا يحتوي على تواريخ مفقودة ولا إدخالات مكررة لأي منتج في نفس التاريخ. أيضًا، يتم تخزين سجل لقطة التقرير الأخير لتاريخ 15 يونيو 2020.
الآن، قم بالتبديل إلى عرض التقرير وحدد Page 2 من التقرير. إضافة العمود UnitsBalance من جدول Inventory إلى المصفوفة المرئية. تم تعيين التلخيص الافتراضي على مجموع القيم.
هذا التكوين المرئي هو مثال عن كيفية عدم تلخيص قيمة لقطة. إضافة اللقطات اليومية للأرصدة معًا لا تسفر عن نتيجة ذات مغزى. لذلك، قم بإزالة الحقل UnitsBalance من المصفوفة المرئية.
الآن، سيتم إضافة قياس إلى جدول Inventory يجمع قيمة UnitsBalance لتاريخ واحد. سيكون التاريخ هو آخر تاريخ لكل فترة زمنية. يتم تحقيق ذلك باستخدام الدالة LASTDATE
. تنسيق القياس كرقم صحيح مع فاصل آلاف.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
ملاحظة
لاحظ أن صيغة القياس تستخدم الدالة SUM
. يجب استخدام دالة تجميعية (لا تسمح القياسات بالإشارات المباشرة إلى الأعمدة)، ولكن بالنظر إلى وجود صف واحد فقط لكل منتج لكل تاريخ، فإن الدالة SUM
ستعمل فقط على صف واحد.
أضف Stock on Hand إلى المصفوفة المرئية. تعتمد قيمة كل منتج الآن على رصيد الوحدات المسجلة الأخيرة لكل شهر.
يرجع المقياس BLANKs لـ يونيو 2020 لأنه لا يوجد سجل للتاريخ الأخير في يونيو. وفقًا للبيانات، فإنه لم يحدث حتى الآن.
أما التصفية حسب آخر تاريخ في سياق التصفية، فقد تكون لها مشاكل كامنة: فقد لا يكون تاريخ التسجيل موجودًا لأنه لم يحدث بعد، أو ربما بسبب عدم تسجيل أرصدة الأسهم في عطلات نهاية الأسبوع.
الخطوة التالية هي ضبط صيغة القياس لتحديد آخر تاريخ له نتيجة غير فارغة ثم تصفية حسب ذلك التاريخ. يمكنك تحقيق هذه المهمة باستخدام الدالة DAX LASTNONBLANK
.
استخدم تعريف القياس التالي لتعديل قياس Stock on Hand.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
في المرئية المصفوفة لاحظ القيم يونيو 2020 والإجمالي (يمثل السنة بأكملها).
الدالة LASTNONBLANK
دالة متكرر. وتُرجع آخر تاريخ ينتج عن نتيجة غير فارغة. وهو يحقق هذه النتيجة من خلال التكرار عبر كافة التواريخ في سياق التصفية بترتيب زمني تنازلي. (على العكس من ذلك، تتكرر FIRSTNONBLANK
بترتيبٍ زمني تصاعدي.) لكل تاريخ، تقيِّم تمرير التعبير. عندما تواجه نتيجة غير فارغة الدالة بإرجاع التاريخ. ثم يتم استخدام هذا التاريخ لتصفية الدالة CALCULATE
.
ملاحظة
الدالة LASTNONBLANK
تقيم التعبير في سياق الصف. يجب استخدام الدالة CALCULATE
لنقل سياق الصف إلى سياق التصفية لتقييم التعبير على نحوٍ صحيحٍ.
يجب عليك الآن إخفاء عمود UnitsBalance في جدول UnitsBalance. سيمنع مؤلفو التقارير من تلخيص أرصدة وحدة اللقطات بشكل غير ملائم.