3.2ذكاء الوقت (Time Intelligence): التراكمات (YTD) ومقارنة N-1
الأساسي في 30 ثانية
- السؤال الأول لأي إدارة — «أين نحن مقارنة بالعام الماضي؟» — يُجاب عنه بثلاث دوال: TOTALYTD (التراكم)، وSAMEPERIODLASTYEAR (الفترة نفسها N-1)، وDATEADD (الإزاحة العامة).
- شرط مسبق مطلق: جدول التواريخ المميز — فبدونه تُعيد هذه الدوال نتائج خاطئة، خصوصًا التراكم والمقارنة.
- يُعبّر عن التطور دائمًا بالقيمة وبالنسبة %: ويسير المقياسان زوجًا، ويشكّلان معًا رباعي القيادة.
حالة مصغّرة متسلسلة — زينب تجيب الإدارة بنظرة واحدة
تسأل إدارة المؤسسة الغذائية التي تعمل بها زينب كل اثنين: «أين نحن مقارنة بالعام الماضي؟». بدل إعادة الحساب يدويًا، تطبّق زينب القسم: تتحقق أولًا من أن جدول التواريخ مميز جيدًا (شرط مسبق مطلق)، ثم تبني الرباعي — CA YTD = TOTALYTD([Total CA]; Dates[Date]) للتراكم منذ يناير، وCA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])) للفترة نفسها قبل سنة، ثم التطور بالقيمة وبالنسبة %. تضعها في مصفوفة الشهر × 4 مقاييس: فتتسع إجابة الإدارة في مرئي واحد، ويتصاعد التراكم قبل أن ينطلق من جديد في يناير.
حالة قائمة بذاتها لهذا القسم: تعود في الدرس والمخطط والنصّ البرمجي وتحدي 48 ساعة للقسم 3.2.
1. الدوال الثلاث الرائدة
يجيب ذكاء الوقت (Time Intelligence) في DAX عن السؤال الأول لأي إدارة بثلاث دوال: TOTALYTD (التراكم منذ بداية السنة)، وSAMEPERIODLASTYEAR (الفترة نفسها قبل سنة)، وDATEADD (الإزاحة العامة، أكثر مرونة). وهي لا تحسب «بنفسها» أبدًا: إنما تُزيح فترة في الزمن.
2. الشرط المسبق غير القابل للتفاوض
شرط مسبق مطلق: جدول التواريخ المميز بوصفه جدول تواريخ. فبدونه تكذب هذه الدوال — ورقم أعمال N-1 فارغ أو تراكم خاطئ يأتي دائمًا تقريبًا من هناك. تتحقق زينب من هذا الضبط قبل أن تشك في صيغتها.
3. رباعي القيادة
نجمع الرباعي المعياري لأي تقرير إداري: رقم الأعمال YTD، ورقم أعمال N-1، والتطور بالقيمة والتطور بالنسبة %. تُبنى هذه المقاييس مرة واحدة بإتقان وتُنسخ من نموذج إلى نموذج. ويُعبّر عن التطور دائمًا بالقيمة وبالنسبة %: فالاثنان يسيران زوجًا.
🔎 مثال ملموس — 🔎 مثال ملموس — المقاييس الزمنية
الرباعي المعياري، قابل لإعادة الاستعمال على كل نماذج زينب:
CA YTD = TOTALYTD([Total CA]; Dates[Date])
CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date]))
Evol = [Total CA] - [CA N-1]
Evol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) // نسبة %
القراءة: تتراكم TOTALYTD منذ يناير وتنطلق من الصفر في بداية السنة؛ وتُزيح SAMEPERIODLASTYEAR الحساب سنة إلى الوراء.
الدرس: تعطي DIVIDE([Total CA] - [CA N-1]; [CA N-1]) الفارق النسبي — ويسير التطور زوجًا: قيمة + نسبة %.
مفردات القسم
- ذكاء الوقت (Time Intelligence)
- عائلة دوال DAX التي تعالج الفترات (التراكمات والإزاحات والمقارنات)، وكلها مستندة إلى جدول التواريخ.
مثال بسيط: تلجأ إليها زينب للتراكم السنوي ومقارنة N-1 في المؤسسة.
ما ليس كذلك: مجرد مرشح تواريخ موضوع يدويًا على مرئي.
رد فعل: مقارنة فترات ← ذكاء الوقت.
- TOTALYTD
- التراكم السنوي منذ بداية السنة: TOTALYTD([Total CA]; Dates[Date]).
مثال بسيط: تتابع زينب رقم الأعمال المتراكم منذ يناير للإدارة.
ما ليس كذلك: رقم أعمال الشهر وحده، دون تراكم.
رد فعل: تراكم سنوي ← TOTALYTD.
- SAMEPERIODLASTYEAR
- الفترة نفسها قبل سنة: CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])).
مثال بسيط: تقارن زينب الشهر الجاري بالشهر نفسه من العام الماضي.
ما ليس كذلك: فترة عشوائية دون مرجع زمني.
رد فعل: مقارنة N-1 ← SAMEPERIODLASTYEAR.
- DATEADD
- الإزاحة العامة: DATEADD(Dates[Date]; -1; MONTH) للشهر السابق — أكثر مرونة من الدوال المخصصة.
مثال بسيط: تستخدمها زينب لإزاحة على المقاس.
ما ليس كذلك: دالة ثابتة على نوع واحد من الفترات.
رد فعل: إزاحة على المقاس ← DATEADD.
- تطور N-1
- الثنائي النهائي: Evol = [CA] - [CA N-1] وEvol % = DIVIDE([CA] - [CA N-1]; [CA N-1]).
مثال بسيط: تعرض زينب الفارق بالقيمة وبالنسبة % جنبًا إلى جنب.
ما ليس كذلك: تطور بالقيمة وحدها، دون حجم نسبي.
رد فعل: دائمًا قيمة و نسبة %.
في التطبيق — تطبيق عملي — رباعي القيادة
- أنشئ CA YTD = TOTALYTD([Total CA]; Dates[Date]) وتحقق في مصفوفة الشهر × المقاييس: يتصاعد التراكم ثم ينطلق من جديد في يناير، كما عند زينب.
- أنشئ CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])) (يتطلب سجلًا على سنتين — ضاعف المبيعات مزاحة بسنة في CSV عند الحاجة).
- أكمل Évol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) بالتنسيق %.
- ركّب مصفوفة القيادة: الشهر في السطور، والمقاييس الأربعة في القيم — فتتسع إجابة «أين نحن؟» في مرئي واحد.
نصّ خطوة بخطوة — رباعي زينب (10 دقائق)
1) تحقق من أن جدول التواريخ مميز بوصفه جدول تواريخ (أدوات الجدول). 2) أنشئ CA YTD = TOTALYTD([Total CA]; Dates[Date]). 3) أنشئ CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date])). 4) أضف Evol = [Total CA] - [CA N-1] وEvol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) بالنسبة %. 5) ضع الشهر في السطور والمقاييس الأربعة في القيم: اقرأ إجابة الإدارة بنظرة واحدة.
رقم أعمال N-1 فارغ؟ تحقق بهذا الترتيب: جدول التواريخ المميز، وعلاقة نشطة على العمود الصحيح، وسجل يغطي السنة السابقة.
نموذج للنسخ واللصق — الرباعي الزمني
CA YTD = TOTALYTD([Total CA]; Dates[Date])
CA N-1 = CALCULATE([Total CA]; SAMEPERIODLASTYEAR(Dates[Date]))
Evol = [Total CA] - [CA N-1]
Evol % = DIVIDE([Total CA] - [CA N-1]; [CA N-1]) // %
شرط مسبق: جدول تواريخ مميز. منعكس: التطور = قيمة + نسبة %.
التراكم السنوي
تتابع زينب رقم الأعمال المتراكم منذ يناير (TOTALYTD): يتصاعد المنحنى ثم ينطلق من جديد مع كل سنة جديدة.
الشهر نفسه N-1
تقارن زينب الشهر الجاري بالشهر نفسه قبل سنة (SAMEPERIODLASTYEAR) لتلطيف الموسمية.
الشهر السابق
تُزيح زينب شهرًا بـ DATEADD لمتابعة الاتجاه قصير المدى.
سنة مالية مزاحة
إقفال في يونيو: تمرّر زينب تاريخ نهاية السنة إلى TOTALYTD لاحترام السنة المالية للمؤسسة.
✓ ممارسات جيدة
- الاستناد إلى جدول التواريخ المميز: إنه الشرط المسبق غير القابل للتفاوض.
- بناء هذه المقاييس مرة واحدة بإتقان: تُنسخ من نموذج إلى نموذج.
- التعبير عن التطور بالقيمة وبالنسبة % (يسيران زوجًا).
✗ أخطاء شائعة
- نسيان تمييز جدول التواريخ (فتكذب الدوال).
- تمرير علاقة التاريخ عبر العمود الخطأ.
- انتظار رقم أعمال N-1 دون سجل يغطي السنة السابقة.
النقاط الأساسية
- يرتكز كل ذكاء الوقت على جدول التواريخ المميز: فلم يكن الشرط المسبق اختياريًا.
- TOTALYTD وSAMEPERIODLASTYEAR وDATEADD: ثلاث دوال تغطي الطلبات الجارية.
- يُعبّر عن التطور بالقيمة وبالنسبة %: يسير المقياسان زوجًا.
- ابنوا هذه المقاييس مرة واحدة بإتقان: تُنسخ من نموذج إلى نموذج طوال مسيرتكم.
تحدي 48 ساعة — طبّقه غدًا
ابنِ رباعي القيادة لزينب على بياناتك: رقم الأعمال YTD، ورقم أعمال N-1، والتطور بالقيمة وبالنسبة %. ضعه في مصفوفة الشهر × المقاييس، ثم تحقق من أن التراكم ينطلق من جديد في يناير ومن أن جدول تواريخك مميز.
- أستطيع كتابة تراكم سنوي بـ TOTALYTD.
- أعرف مقارنة فترة بـ N-1 عبر SAMEPERIODLASTYEAR.
- أعرف الشرط المسبق: جدول التواريخ المميز.
أسئلة شائعة
رقم أعمال N-1 لدي فارغ أو خاطئ: لماذا؟
ثلاثة مشتبهين، تُتحقق منهم بهذا الترتيب (وأحدهم السبب في 95 % من الحالات): جدول التواريخ غير مميز بوصفه جدول تواريخ؛ والعلاقة تمر عبر عمود التاريخ الخطأ (أو غير نشطة)؛ والسجل لا يغطي N-1 (فيكون N-1 ليناير فارغًا، وهو طبيعي). ابدأوا دائمًا بجدول التواريخ المميز.
كيف ندير سنة مالية مزاحة (إقفال في يونيو)؟
تقبل TOTALYTD وسيطًا ثالثًا، هو تاريخ نهاية السنة المالية: TOTALYTD([CA]; Dates[Date]; "30/06") تحسب التراكم منذ 1 يوليو. وللاحتياجات الأكثر تعقيدًا، نُثري جدول التواريخ بأعمدة مالية (السنة المالية، والشهر المالي) — وهذا جمال امتلاك تقويم خاص مُتقن.
ما الشرط المسبق المطلق لعمل ذكاء الوقت؟