تابع CALCULATETABLE در Power BI
تابع CALCULATETABLE در زبان DAX یکی از توابع قدرتمند و پرکاربرد در Power BI است که برای محاسبه یک جدول جدید بر اساس فیلترهای خاص استفاده میشود. این تابع به شما امکان میدهد تا مجموعهای از دادهها را با اعمال شرایط دلخواه استخراج کرده و در محاسبات، معیارها (Measures) یا ستونهای محاسبهشده استفاده کنید.
نکته : تابع CALCULATE نیز وجود دارد. این تابع دقیقاً همان عملکرد را انجام میدهد، با این تفاوت که زمینه فیلتر اعمال شده بر عبارتی که یک مقدار اسکالر برمیگرداند را تغییر میدهد.
عملکرد تابع چگونه است؟
تابع CALCULATETABLE ابتدا فیلترهای مشخصشده را اعمال میکند، سپس عبارت جدول را در زمینه فیلترشده ارزیابی میکند. این تابع برای ساخت جدولهای سفارشی، تحلیلهای مقطعی، و ایجاد روابط پیچیده بین دادهها بسیار مفید است.
Syntax
CALCULATETABLE(<expression>[, <filter1> [, <filter2> [, …]]])
Parameters
| Term | تعریف |
|---|---|
expression |
عبارت جدولی که قرار است ارزیابی شود. |
filter1, filter2,… |
(اختیاری) عبارات بولی یا عبارات جدولی که فیلترها یا توابع اصلاحکننده فیلتر را تعریف میکنند. |
عبارتی که به عنوان پارامتر اول استفاده میشود باید یک جدول مدل یا تابعی باشد که یک جدول را برمیگرداند.
فیلترها میتوانند عبارتند از:
- عبارات فیلتر بولی (Boolean)
- عبارات فیلتر جدول
- توابع اصلاح فیلتر
وقتی چندین فیلتر وجود دارد، آنها با استفاده از عملگر منطقی AND ارزیابی میشوند. این بدان معناست که همه شرایط باید همزمان TRUE باشند.
عبارات فیلتر بولی ( Boolean filter expressions)
یک فیلتر عبارت بولی، عبارتی است که به TRUE یا FALSE ارزیابی میشود. چندین قانون وجود دارد که باید رعایت شوند:
- آنها فقط میتوانند به یک ستون واحد ارجاع دهند.
- آنها نمیتوانند به معیارها ارجاع دهند.
- آنها نمیتوانند از یک تابع محاسبه تو در تو استفاده کنند.
از انتشار سپتامبر 2021 Power BI Desktop، موارد زیر نیز اعمال میشود:
- آنها نمیتوانند از توابعی که جدول را اسکن میکنند یا برمیگردانند استفاده کنند، مگر اینکه به عنوان آرگومان به توابع تجمیع ارسال شوند.
- آنها میتوانند شامل یک تابع تجمیع باشند که یک مقدار اسکالر برمیگرداند.
عبارات فیلتر جدول (Table filter expression)
یک فیلتر عبارت جدولی، یک شیء جدول را به عنوان فیلتر اعمال میکند. این میتواند یک ارجاع به یک جدول مدل باشد، اما به احتمال زیاد تابعی است که یک شیء جدول را برمیگرداند. میتوانید از تابع FILTER برای اعمال شرایط فیلتر پیچیده، از جمله مواردی که نمیتوان آنها را با یک عبارت فیلتر بولی تعریف کرد، استفاده کنید.
توابع اصلاح فیلتر (Filter modifier functions)
توابع اصلاحکننده فیلتر به شما امکان میدهند کارهای بیشتری نسبت به اضافه کردن فیلترها انجام دهید. آنها هنگام تغییر زمینه فیلتر، کنترل بیشتری در اختیار شما قرار میدهند.
| Function | هدف |
|---|---|
| REMOVEFILTERS | تمام فیلترها، یا فیلترها را از یک یا چند ستون یک جدول، یا از تمام ستونهای یک جدول واحد حذف کنید. |
| ALL 1, ALLEXCEPT, ALLNOBLANKROW | فیلترها را از یک یا چند ستون یا از تمام ستونهای یک جدول واحد حذف کنید. |
| KEEPFILTERS | اضافه کردن فیلتر بدون حذف فیلترهای موجود در همان ستونها. |
| USERELATIONSHIP | یک رابطه غیرفعال بین ستونهای مرتبط ایجاد کنید، در این صورت رابطه فعال به طور خودکار غیرفعال میشود. |
| CROSSFILTER | جهت فیلتر را تغییر دهید (از هر دو به تکی، یا از تکی به هر دو) یا یک رابطه را غیرفعال کنید. |
1 تابع ALL و انواع آن هم به عنوان اصلاحکنندههای فیلتر و هم به عنوان توابعی که اشیاء جدول را برمیگردانند، عمل میکنند. اگر تابع REMOVEFILTERS توسط ابزار شما پشتیبانی میشود، بهتر است از آن برای حذف فیلترها استفاده کنید.
مقدار بازگشتی
جدولی از مقادیر.
نکات
- هنگامی که عبارات فیلتر ارائه میشوند، تابع CALCULATETABLE زمینه فیلتر را برای ارزیابی عبارت تغییر میدهد. برای هر عبارت فیلتر، دو نتیجه استاندارد ممکن وجود دارد که در آن عبارت فیلتر در تابع KEEPFILTERS قرار نمیگیرد:
- اگر ستونها (یا جداول) در زمینه فیلتر نباشند، فیلترهای جدید برای ارزیابی عبارت به زمینه فیلتر اضافه میشوند.
- اگر ستونها (یا جداول) از قبل در زمینه فیلتر باشند، فیلترهای موجود توسط فیلترهای جدید برای ارزیابی عبارت CALCULATETABLE رونویسی میشوند.
- این تابع برای استفاده در حالت DirectQuery هنگام استفاده در ستونهای محاسبه شده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمیشود.
مثال
مثال زیر از تابع CALCULATETABLE برای بدست آوردن مجموع فروش اینترنتی برای سال ۲۰۰۶ استفاده میکند. این مقدار بعداً برای محاسبه نسبت فروش اینترنتی در مقایسه با کل فروش برای سال ۲۰۰۶ استفاده میشود.
فرمول زیر:
= SUMX(
CALCULATETABLE(
'InternetSales_USD',
'DateTime'[CalendarYear] = 2006
),
[SalesAmount_USD]
)
در جدول زیر نتیجه میشود:
| Row Labels | Internet SalesAmount_USD | CalculateTable 2006 Internet Sales | Internet Sales to 2006 ratio |
|---|---|---|---|
| 2005 | $2,627,031.40 | $5,681,440.58 | 0.46 |
| 2006 | $5,681,440.58 | $5,681,440.58 | 1.00 |
| 2007 | $8,705,066.67 | $5,681,440.58 | 1.53 |
| 2008 | $9,041,288.80 | $5,681,440.58 | 1.59 |
| Grand Total | $26,054,827.45 |
استفاده در توابع دیگر
تابع CALCULATETABLE اغلب در ترکیب با توابعی مانند SUMX, COUNTROWS, FILTER, و ADDCOLUMNS استفاده میشود.
مثال: محاسبه مجموع فروش فقط برای محصولات الکترونیکی
TotalElectronicsSales =
SUMX(
CALCULATETABLE(
Sales,
Products[Category] = "Electronics"
),
Sales[Amount]
)
تفاوت CALCULATE و CALCULATETABLE
| تابع | خروجی | کاربرد |
|---|---|---|
CALCULATE() |
مقدار منفرد (Scalar) | محاسبه عددی با فیلتر |
CALCULATETABLE() |
جدول | استخراج مجموعه داده با فیلتر |
نکات مهم
- فیلترها میتوانند از نوع شرط ساده، جدول فیلترشده، یا توابع پیچیده مانند
ALL,FILTER,VALUESباشند. - CALCULATETABLE فقط در زمینههایی که جدول مورد نظر قابل ارزیابی باشد کاربرد دارد.
- اگر فیلترها بهدرستی اعمال نشوند، ممکن است جدول خالی یا خطا بازگردانده شود.
کاربردهای رایج
- ساخت جدولهای سفارشی برای تحلیلهای خاص
- فیلتر کردن دادهها بر اساس شرایط پویا
- استفاده در معیارهای پیچیده و KPIها
- ترکیب با توابع پیمایشی برای محاسبات گروهی
مثال پیشرفته: جدول سفارشهای مشتریان خاص
VIPCustomerOrders =
CALCULATETABLE(
Orders,
Customers[VIPStatus] = TRUE(),
Orders[Amount] > 500000
)
در این مثال، فقط سفارشهایی از مشتریان VIP با مبلغ بالا استخراج میشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
