مقدمة إلى DAX
استنادًا إلى دورة فيديو DAX الخاصة بـ SQLBI.
تقرير مخطط

تقرير

نظرية
لغة داكس
Dax هي لغة وظيفية ، يتدفق التنفيذ مع مكالمات الوظائف.
! يعد تنسيق التعليمات البرمجية مهمًا في DAX ، لأنه يجعل رمز الأخطاء سهلة. لتنسيق رمز DAX تلقائيًا ، يمكن للمرء استخدام daxformatter.
الأعمدة المحسوبة
- الأعمدة المحسوبة باستخدام DAX.
- دائما محسوبة للصف الحالي.
مقاسات
- مكتوبة باستخدام داكس
- لا تعمل على التوال
- بدلاً من ذلك ، استخدم الجداول والمجمعين
- ليس لديك مفهوم "الصف الحالي»
اتفاقيات تسمية
- لا تنتمي التدابير إلى جدول => تجنب اسم الجدول في التدابير المرجعية. وبهذه الطريقة ، من الأسهل الانتقال إلى جدول آخر وتحديد كقياس.
- لذا:
- الأعمدة المحسوبة -> جدول [العمود]
- التدابير -> [قياس]
التدابير مقابل الأعمدة المحسوبة
- استخدم عمودًا عندما:
- الحاجة إلى شريحة أو تصفية على القيمة
- استخدم مقياسًا عندما:
- حساب النسب المئوية أو النسب
- بحاجة إلى تجميعات معقدة
- استخدام المساحة ووحدة المعالجة المركزية:
- الأعمدة تستهلك الذاكرة
- تدابير تستهلك وحدة المعالجة المركزية
وظائف التجميع
- العمل فقط على الأعمدة الرقمية.
- تجميع عمود واحد فقط.
وظائف التجميع «x»
- المتكررون: مفيد لتجميع الصيغ
- تكرار على الطاولة وتقييم التعبير لكل صف
- احصل دائمًا على معلمتين:
- جدول لتكرار
- الصيغة للتقييم لكل صف
- مثال:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
باستخدام المتغيرات
- مفيد جدًا لتجنب تكرار التعبيرات الفرعية في الكود الخاص بك.
- مثال:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
وظائف التاريخ
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
وظائف الجدول
- الوظائف الأساسية التي تعمل على الجداول الكاملة وإرجاع جدول نتيجة لذلك
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- غالبًا ما تستخدم نتائجها في وظائف أخرى
- يمكن دمجها معًا لتشكيل تعبيرات معقدة
فلتر
- يضيف حالة جديدة عن طريق تقييد عدد صفوف الجدول
- إرجاع جدول يمكن تكراره بواسطة وظيفة «x»
الجميع
- إرجاع جميع صفوف الجدول مع تجاهل سياق المرشح
- إرجاع جدول يمكن تكراره بواسطة وظيفة «x»
- يمكن استخدامها أيضًا مع عمود واحد
ALL ( Customers[CustomerName] ) والنتيجة كونها جدول مع عمود واحد
متميز
- إرجاع القيم المميزة للعمود ، فقط تلك المرئية في السياق الحالي
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
ذات الصلة
- إرجاع جدول مع جميع الصفوف ذات الصلة مع الجدول الحالي.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
سياقات التقييم
1. سياق التصفية
- محددة بواسطة:
- اختيار الصف
- اختيار العمود
- مرشحات التقارير
- Slicers اختيار
- لا تعتبر الصفوف خارج سياق المرشح للحساب
- يتم تعريفه تلقائيًا بواسطة Pivottable ، يمكن إنشاءه مع وظائف محددة أيضًا
2. سياق الصف
- محددة بواسطة:
- تعريف العمود المحسوب
- تم تعريفه تلقائيًا لكل صف
- وظائف تكرار الصف
- SUMX ، MEANTERX ...
- جميع "X» وظائف وتكرار
- تحددها صيغ المستخدم
- مطلوب لتقييم قيم الأعمدة ، وهو مفهوم "الصف الحالي"
! مرشح سياق مرشح الجداول. سياق الصف يكرر الصفوف!
حساب
- يحل محل سياق التصفية جزئيًا
- شروط
- يمكن أن تحل محل جدول كامل
- يمكن استبدال عمود واحد
- حساب الأعمال على سياق المرشح
- يتم تقييم المرشحات في سياق المرشح الخارجي ، ثم يتم دمجها معًا في وأخيراً تستخدم لإنشاء سياق مرشح جديد يقوم فيه DAX بتقييم التعبير.
- Synthax:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. المرشح والمبلغ على نفس الجدول. يمكنك الحصول على نفس النتيجة باستخدام المرشح.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. مرشح خاطئ على عمود واحد فقط. كلها تستخدم مع جدول عمود واحد.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
المرشحات والعلاقات
-العلاقة تؤثر على سياق المرشح
متعلق ب
RELATED ( table[column] )
- يفتح سياق صف جديد على الجدول المستهدف
- العلاقات التالية
- يتيح العديد من التصفية الجانبية إلى جانب واحد
ذات الصلة
RELATEDTABLE ( table )
- مرشحات جدول المعلمة
- إرجاع الصفوف فقط ذات الصلة بالداخلية الحالية
- إنه رفيق ذات صلة
انتقال السياق
- يحسب مهمة أخرى:
- إذا تم تنفيذها داخل سياق صف
- يأخذ سياق الصف
- يحوله إلى سياق مرشح مكافئ
- يطبقه على نموذج البيانات قبل حساب تعبيره
- مثال:
SUM() vs CALCULATE(SUM())
وقت الذكاء
- يحتاج الوقت الذكاء إلى جدول تاريخ.
- خصائص جدول التاريخ:
- يجب أن تكون جميع التواريخ موجودة
- من 1 درجة من يناير ، إلى 31 درجة من ديسمبر
- لا ثقوب
- وإلا فإن ذكاء الوقت لن يعمل
- أغطية ذكاء الوقت:
- منذ بدلية العام ز حتى اليوم
- ربع حتى الآن
- إجمالي الجري
- نفس الفترة في العام السابق
- حساب أيام العمل
- السنة المالية
- إلخ.
- التجميعات:
- YTD: سنة حتى الآن
- QTD: ربع حتى الآن
- MTD: شهر حتى الآن
تقويم
- إرجاع جدول مع عمود واحد يسمى "التاريخ" ، يحتوي على مجموعة متجاورة من التواريخ في النطاق المحدد ، شاملة.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Calendarauto
- يقوم تلقائيًا بإنشاء جدول تقويمي بناءً على محتوى قاعدة البيانات. اختياريا يمكنك تحديد الشهر الماضي (مفيد للسنوات المالية)
- يستخدم Calendarauto جميع التواريخ في النموذج ، باستثناء الأعمدة والجداول المحسوبة فقط
منذ بدلية العام ز حتى اليوم
DATESYTD و TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
نفس الفترة من العام الماضي
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
إجمالي الجري
- يتطلب الإجمالي تشغيل إجمالي مرشحًا صريحًا.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)