درباره X-functionها در زبان DAX

Thursday، ۲۴ Shahrivar ۱۴۰۱

توابع X-function توابع تکرارشونده هستند به این معنا که گزاره‌های محاسباتی به‌کار رفته در این توابع روی سطرها حساس هستند و این سری توابع جزو Row Contextها در DAX محسوب می‌شوند. در ادامه به رایج‌ترین توابع X-function در DAX با ذکر یک مثال می‌پردازیم.

مثال: یک جدول ساده به نام Table حاوی سه ستون به شرح زیر داریم که به منظور محاسبه درامد از فروش لازم هست که مقادیر ستون Quantity در Price ضرب شوند (این گزاره << 'Table'[Quantity]*'Table'[Price]>> در توابع زیر مورد استفاده قرار می‌گیرد)

تابع Sumx:

این تابع در ابتدا مقدار گزاره مورد نظر را در هر سطر محاسبه می‌کند و سپس حاصل‌جمع تمامی سطرها را بازمی‌گرداند. برای نمونه در مثال فوق یک Measure تحت عنوان Using Sumx را به روش زیر ایجاد می‌کنیم:

Using Sumx= sumx('Table','Table'[Quantity]*'Table'[Price])

حاصل این مقدار همانطور که به راحتی قابل محاسبه است برابر با 100 می‌شود:

لازم به ذکر و یاداوری هست که تابع Sumproduct عملیات مشابهی رو در اکسل انجام میداد 😊

تابع Averagex:

این تابع در ابتدا مقدار گزاره مورد نظر را در هر سطر محاسبه میکند و سپس میانگین تمامی سطرها را بازمی‌گرداند. برای نمونه در مثال فوق یک Measure تحت عنوان Using Averagex را به روش زیر ایجاد می‌کنیم:

Using Averagex= Averagex('Table','Table'[Quantity]*'Table'[Price])

حاصل این مقدار همانطور که به راحتی قابل محاسبه است برابر با 33.3 می شود:

تابع Maxx:

این تابع در ابتدا مقدار گزاره مورد نظر را در هر سطر محاسبه می‌کند و سپس مقدار حداکثر (بیشترین مقدار) گزاره محاسبه شده از تمامی سطرها را باز میگرداند. برای نمونه در مثال فوق یک Measure تحت عنوان Using Maxx را به روش زیر ایجاد می‌کنیم:

Using Maxx= Maxx('Table','Table'[Quantity]*'Table'[Price])

حاصل این مقدار همانطور که به راحتی قابل محاسبه است برابر با 80 می شود:

تابع Minx:

این تابع در ابتدا مقدار گزاره مورد نظر را در هر سطر محاسبه میکند و سپس کمترین مقدار گزاره محاسبه شده از تمامی سطرها را بازمی‌گرداند. برای نمونه در مثال فوق یک Measure تحت عنوان Using Minx را به روش زیر ایجاد می‌کنیم:

Using Minx= Minx('Table','Table'[Quantity]*'Table'[Price])

حاصل این مقدار همانطور که به راحتی قابل محاسبه است برابر با 10 می شود: