تابع KEEPFILTERS در Power BI
تابع KEEPFILTERS در زبان DAX یکی از توابع مهم برای کنترل دقیقتر زمینه فیلتر (Filter Context) در Power BI است. این تابع به شما اجازه میدهد تا فیلترهای جدیدی را به زمینه موجود اضافه کنید، بدون اینکه فیلترهای قبلی حذف شوند. بهعبارت دیگر، KEEPFILTERS باعث میشود فیلترهای اعمالشده در گزارش یا معیار حفظ شوند و با فیلترهای جدید ترکیب شوند.
تعریف تابع KEEPFILTERS
KEEPFILTERS(<filter>)
- filter: شرط یا جدول فیلترشدهای که میخواهید به زمینه فیلتر اضافه کنید.
عملکرد چگونه است؟
در حالت عادی، وقتی از تابع CALCULATE استفاده میکنید و یک فیلتر جدید اعمال میکنید، فیلترهای قبلی روی همان ستون جایگزین میشوند. اما اگر از KEEPFILTERS استفاده کنید، فیلتر جدید به فیلترهای قبلی اضافه میشود و نتیجه محدودتر خواهد بود.
✅ مثال ساده
فرض کنید در گزارش، فیلتر روی سال 2025 اعمال شده است. حالا میخواهید فقط سفارشهایی را محاسبه کنید که مبلغ آنها بیشتر از 100٬000 تومان باشد، بدون حذف فیلتر سال:
HighValueSales =
CALCULATE(
SUM(Sales[Amount]),
KEEPFILTERS(Sales[Amount] > 100000)
)
در این مثال، شرط مبلغ بالا به فیلتر سال اضافه میشود، نه اینکه جایگزین آن شود.
تفاوت با رفتار پیشفرض CALCULATE
| حالت | نتیجه |
|---|---|
| بدون KEEPFILTERS | فیلتر جدید ممکن است فیلترهای قبلی را حذف کند |
| با KEEPFILTERS | فیلتر جدید به فیلترهای قبلی اضافه میشود |
کاربردهای رایج
- ترکیب فیلترهای گزارش با فیلترهای سفارشی در معیارها
- محدود کردن نتایج بدون حذف زمینه فیلتر اصلی
- ساخت معیارهای دقیقتر در گزارشهای تعاملی
مثال پیشرفته: فروش محصولات الکترونیکی با تخفیف، فقط در سال انتخابشده
DiscountedElectronicsSales =
CALCULATE(
SUM(Sales[Amount]),
KEEPFILTERS(Products[Category] = "Electronics"),
KEEPFILTERS(Sales[Discount] > 0)
)
در این مثال، اگر کاربر سال خاصی را در گزارش انتخاب کرده باشد، آن فیلتر حفظ میشود و فقط سفارشهای الکترونیکی با تخفیف در همان سال محاسبه میشوند.
مثال کاربردی
مثال زیر شما را با برخی از سناریوهای رایج که استفاده از تابع KEEPFILTERS را به عنوان بخشی از فرمول CALCULATE یا CALCULATETABLE نشان میدهند، آشنا میکند.
سه عبارت اول دادههای سادهای را برای مقایسه به دست میآورند:
- فروش اینترنتی برای ایالت واشنگتن.
- فروش اینترنتی برای ایالتهای واشنگتن و اورگان (هر دو ایالت روی هم رفته).
- فروش اینترنتی برای ایالت واشنگتن و استان بریتیش کلمبیا (هر دو منطقه روی هم رفته).
عبارت چهارم، فروش اینترنتی را برای واشنگتن و اورگان محاسبه میکند، در حالی که فیلتر برای واشنگتن و بریتیش کلمبیا اعمال میشود.
عبارت بعدی، فروش اینترنتی را برای واشنگتن و اورگان محاسبه میکند اما از KEEPFILTERS استفاده میکند؛ فیلتر برای واشنگتن و بریتیش کلمبیا بخشی از متن قبلی است.
EVALUATE ROW(
"$$ in WA"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
)
, "$$ in WA and OR"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, "$$ in WA and BC"
, CALCULATE('Internet Sales'[Internet Total Sales]
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA and OR ??"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
,'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
, "$$ in WA !!"
, CALCULATE(
CALCULATE('Internet Sales'[Internet Total Sales]
, KEEPFILTERS('Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="OR"
)
)
, 'Geography'[State Province Code]="WA"
|| 'Geography'[State Province Code]="BC"
)
)
وقتی این عبارت در مقابل پایگاه داده نمونه AdventureWorks DW ارزیابی میشود، نتایج زیر حاصل میشود.
| Column | Value |
|---|---|
[$$ in WA] |
$ 2,467,248.34 |
[$$ in WA and OR] |
$ 3,638,239.88 |
[$$ in WA and BC] |
$ 4,422,588.44 |
[$$ in WA and OR ??] |
$ 3,638,239.88 |
[$$ in WA !!] |
$ 2,467,248.34 |
KEEPFILTERS
توجه: نتایج فوق به جای یک ردیف، برای اهداف آموزشی در یک جدول قالببندی شدهاند.
ابتدا، عبارت [$$ در WA و OR ??] را بررسی کنید. ممکن است تعجب کنید که چگونه این فرمول میتواند مقدار فروش در واشنگتن و اورگان را برگرداند، زیرا عبارت بیرونی CALCULATE شامل یک فیلتر برای واشنگتن و بریتیش کلمبیا است. پاسخ این است که رفتار پیشفرض CALCULATE فیلترهای بیرونی در ‘Geography'[State Province Code] را نادیده میگیرد و آرگومانهای فیلتر خود را جایگزین میکند، زیرا فیلترها برای همان ستون اعمال میشوند.
سپس، عبارت [$$ در WA !!] را بررسی کنید. ممکن است تعجب کنید که چگونه این فرمول میتواند مقدار فروش در واشنگتن را برگرداند و هیچ چیز دیگری را، زیرا فیلتر آرگومان شامل اورگان است و عبارت بیرونی CALCULATE شامل یک فیلتر در واشنگتن و بریتیش کلمبیا است. پاسخ این است که KEEPFILTERS رفتار پیشفرض CALCULATE را تغییر میدهد و یک فیلتر اضافی اضافه میکند. از آنجا که از تقاطع فیلترها استفاده میشود، اکنون فیلتر بیرونی ‘Geography'[State Province Code]=”WA” || عبارت ‘Geography'[State Province Code]=”BC”) به آرگومان فیلتر ‘Geography'[State Province Code]=”WA” || ‘Geography'[State Province Code]=”OR” اضافه شده است. از آنجایی که هر دو فیلتر روی یک ستون اعمال میشوند، فیلتر حاصل ‘Geography'[State Province Code]=”WA” فیلتری است که هنگام ارزیابی عبارت اعمال میشود.
⚠️ نکات مهم
KEEPFILTERSفقط در توابعی مانندCALCULATEوCALCULATETABLEکاربرد دارد.- اگر فیلتر جدید با فیلتر قبلی تضاد داشته باشد، ممکن است نتیجه خالی شود.
- این تابع برای کنترل دقیقتر زمینه فیلتر در مدلهای پیچیده بسیار مفید است.
ملاحظات
- شما از KEEPFILTERS در چارچوب توابع CALCULATE و CALCULATETABLE برای لغو رفتار استاندارد آن توابع استفاده میکنید.
- به طور پیشفرض، آرگومانهای فیلتر در توابعی مانند CALCULATE به عنوان زمینهای برای ارزیابی عبارت استفاده میشوند و به این ترتیب آرگومانهای فیلتر برای CALCULATE جایگزین تمام فیلترهای موجود در همان ستونها میشوند. زمینه جدیدی که توسط آرگومان فیلتر برای CALCULATE ایجاد میشود، فقط فیلترهای موجود در ستونهایی که به عنوان بخشی از آرگومان فیلتر ذکر شدهاند را تحت تأثیر قرار میدهد. فیلترهای روی ستونها غیر از مواردی که در آرگومانهای CALCULATE یا سایر توابع مرتبط ذکر شدهاند، به قوت خود باقی میمانند و بدون تغییر باقی میمانند.
- تابع KEEPFILTERS به شما امکان میدهد این رفتار را تغییر دهید. وقتی از KEEPFILTERS استفاده میکنید، هر فیلتر موجود در چارچوب فعلی با ستونهای موجود در آرگومانهای فیلتر مقایسه میشود و محل تقاطع آن آرگومانها به عنوان زمینهای برای ارزیابی عبارت استفاده میشود. تأثیر خالص روی هر ستون این است که هر دو مجموعه آرگومان اعمال میشوند: هم آرگومانهای فیلتر استفاده شده در CALCULATE و هم فیلترهای موجود در آرگومانهای تابع KEEPFILTER. به عبارت دیگر، در حالی که فیلترهای CALCULATE جایگزین متن فعلی میشوند، KEEPFILTERS فیلترها را به متن فعلی اضافه میکند.
- این تابع برای استفاده در حالت DirectQuery هنگام استفاده در ستونهای محاسبهشده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمیشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
