تابع CALCULATE در DAX
تابع CALCULATE در زبان DAX یکی از مهمترین و پرکاربردترین توابع در Power BI است. این تابع به شما امکان میدهد تا محاسبات عددی (Scalar) را در زمینهای فیلترشده انجام دهید. بهعبارت سادهتر، CALCULATE به شما اجازه میدهد تا مقدار یک عبارت را با اعمال فیلترهای دلخواه محاسبه کنید.
تعریف تابع CALCULATE
CALCULATE(<expression>, <filter1>, <filter2>, ...)
- expression: عبارتی که باید محاسبه شود (مانند مجموع، میانگین، شمارش و غیره)
- filter: یک یا چند شرط فیلتر که بر روی دادهها اعمال میشود
عملکرد تابع چگونه است؟
تابع CALCULATE ابتدا فیلترهای مشخصشده را اعمال میکند، سپس عبارت عددی را در زمینه فیلترشده ارزیابی میکند. این تابع برای ساخت معیارهای پویا، تحلیلهای مقطعی، و ایجاد KPIهای سفارشی بسیار کاربردی است.
مثال ساده
فرض کنید میخواهید مجموع فروش فقط برای محصولات الکترونیکی را محاسبه کنید:
TotalElectronicsSales =
CALCULATE(
SUM(Sales[Amount]),
Products[Category] = "Electronics"
)
در این مثال، فقط ردیفهایی که دستهبندی آنها “Electronics” است در محاسبه لحاظ میشوند.
استفاده در معیارهای پویا
تابع CALCULATE اغلب در ترکیب با توابعی مانند SUM, AVERAGE, COUNT, و FILTER استفاده میشود.
مثال: میانگین فروش در سال 2025
AverageSales2025 =
CALCULATE(
AVERAGE(Sales[Amount]),
YEAR(Sales[Date]) = 2025
)
تفاوت CALCULATE و CALCULATETABLE
| تابع | خروجی | کاربرد |
|---|---|---|
CALCULATE() |
مقدار منفرد (Scalar) | محاسبه عددی با فیلتر |
CALCULATETABLE() |
جدول | استخراج مجموعه داده با فیلتر |
نکات مهم
- CALCULATE فقط در صورتی کار میکند که عبارت ورودی قابل ارزیابی عددی باشد.
- فیلترها میتوانند شامل توابع پیچیده مانند
FILTER,ALL,VALUESباشند. - CALCULATE زمینه ارزیابی (Context) را تغییر میدهد، بنابراین درک درست از زمینه بسیار مهم است.
کاربردهای رایج
- ساخت KPIهای سفارشی
- تحلیل فروش بر اساس منطقه، زمان یا دستهبندی
- مقایسه عملکرد در بازههای زمانی مختلف
- اعمال فیلترهای پویا بر اساس انتخاب کاربر
مثال پیشرفته: فروش مشتریان VIP در سال جاری
VIPSalesThisYear =
CALCULATE(
SUM(Sales[Amount]),
Customers[VIPStatus] = TRUE(),
YEAR(Sales[Date]) = YEAR(TODAY())
)
ملاحظات
- هنگامی که عبارات فیلتر ارائه میشوند، تابع CALCULATE زمینه فیلتر را برای ارزیابی عبارت تغییر میدهد. برای هر عبارت فیلتر، دو نتیجه استاندارد ممکن وجود دارد که عبارت فیلتر در تابع KEEPFILTERS قرار نمیگیرد:
- اگر ستونها (یا جداول) در زمینه فیلتر نباشند، فیلترهای جدید برای ارزیابی عبارت به زمینه فیلتر اضافه میشوند.
- اگر ستونها (یا جداول) از قبل در زمینه فیلتر باشند، فیلترهای موجود توسط فیلترهای جدید برای ارزیابی عبارت CALCULATE رونویسی میشوند.
- تابع CALCULATE که بدون فیلتر استفاده میشود، یک الزام خاص را برآورده میکند. این تابع زمینه ردیف را به زمینه فیلتر منتقل میکند. زمانی که یک عبارت (نه یک معیار مدل) که دادههای مدل را خلاصه میکند، نیاز به ارزیابی در زمینه ردیف داشته باشد، لازم است. این سناریو میتواند در یک فرمول ستون محاسبه شده یا زمانی که یک عبارت در یک تابع تکرارگر ارزیابی میشود، اتفاق بیفتد. توجه داشته باشید که وقتی یک معیار مدل در زمینه ردیف استفاده میشود، انتقال زمینه به صورت خودکار انجام میشود.
- این تابع برای استفاده در حالت DirectQuery در هنگام استفاده در ستونهای محاسبه شده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمیشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
