تابع ALLEXCEPT در Power BI
تابع ALLEXCEPT در زبان DAX یکی از توابع قدرتمند برای کنترل زمینه فیلتر (Filter Context) در Power BI است. این تابع به شما اجازه میدهد تا تمام فیلترهای اعمالشده روی یک جدول را حذف کنید، بهجز فیلترهایی که روی ستونهای مشخصشده باقی میمانند.
تعریف تابع ALLEXCEPT
ALLEXCEPT(<table>, <column1>, <column2>, ...)
- table: نام جدولی که میخواهید فیلترهای آن حذف شوند.
- column1, column2, …: ستونهایی که فیلترشان حفظ میشود.
عملکرد چگونه است؟
تابع ALLEXCEPT تمام فیلترهای اعمالشده روی جدول مشخصشده را حذف میکند، اما فیلترهایی که روی ستونهای تعیینشده باقی میمانند. این تابع برای محاسبه مقادیر در سطح گروهبندی خاص بسیار کاربردی است.
✅ مثال ساده
فرض کنید میخواهید مجموع فروش را برای هر منطقه محاسبه کنید، اما بدون در نظر گرفتن فیلترهای دیگر مانند محصول یا تاریخ:
TotalSalesByRegion =
CALCULATE(
SUM(Sales[Amount]),
ALLEXCEPT(Sales, Sales[Region])
)
در این مثال، فقط فیلتر روی ستون Region حفظ میشود و سایر فیلترها حذف میشوند.
مثالی دیگر
فرمول اندازهگیری زیر مجموع SalesAmount_USD را محاسبه میکند و از تابع ALLEXCEPT برای حذف هرگونه فیلتر زمینهای در جدول DateTime استفاده میکند، مگر اینکه فیلتر روی ستون CalendarYear اعمال شده باشد.
= CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]), ALLEXCEPT(DateTime, DateTime[CalendarYear]))
از آنجا که فرمول از ALLEXCEPT استفاده میکند، هر زمان که از هر ستونی به جز CalendarYear از جدول DateTime برای برش یک تجسم استفاده شود، فرمول هرگونه فیلتر برشدهنده را حذف میکند و مقداری برابر با مجموع SalesAmount_USD ارائه میدهد. با این حال، اگر از ستون CalendarYear برای برش تجسم استفاده شود، نتایج متفاوت است. از آنجا که CalendarYear به عنوان آرگومان برای ALLEXCEPT مشخص شده است، هنگامی که دادهها بر اساس سال برش داده میشوند، یک فیلتر بر روی سالها در سطح ردیف اعمال میشود.
کاربردهای رایج
- محاسبه مجموع یا میانگین در سطح گروهبندی خاص
- ساخت معیارهای مقایسهای مانند درصد سهم از گروه
- حذف فیلترهای اضافی در گزارشها برای کنترل دقیقتر زمینه
مثال پیشرفته: درصد فروش هر محصول نسبت به کل فروش گروه آن محصول
ProductSalesPercentage =
DIVIDE(
SUM(Sales[Amount]),
CALCULATE(
SUM(Sales[Amount]),
ALLEXCEPT(Sales, Sales[ProductCategory])
)
)
در این مثال، مقدار فروش هر محصول بر مجموع فروش کل گروه آن محصول تقسیم میشود تا درصد سهم محاسبه شود.
نکات مهم
- اگر هیچ ستونی در ALLEXCEPT مشخص نشود، عملکرد آن مشابه
ALL(table)خواهد بود. - این تابع فقط در توابعی مانند
CALCULATE,CALCULATETABLE, و توابع پیمایشی کاربرد دارد. - استفاده نادرست از ستونها ممکن است باعث نتایج اشتباه یا غیرمنتظره شود.
ملاحضات
- این تابع به خودی خود استفاده نمیشود، بلکه به عنوان یک تابع واسطه عمل میکند که میتواند برای تغییر مجموعه نتایجی که محاسبات دیگری روی آنها انجام میشود، مورد استفاده قرار گیرد.
- ALL و ALLEXCEPT را میتوان در سناریوهای مختلف استفاده کرد:
| Function and usage | توضیحات |
|---|---|
| ALL(Table) | تمام فیلترها را از جدول مشخص شده حذف میکند. در واقع، ALL(Table) تمام مقادیر موجود در جدول را برمیگرداند و هر فیلتری را از زمینهای که در غیر این صورت ممکن است اعمال شده باشد، حذف میکند. این تابع زمانی مفید است که با سطوح مختلف گروهبندی کار میکنید و میخواهید محاسبهای ایجاد کنید که نسبت یک مقدار تجمیع شده به کل مقدار را ایجاد کند. |
| ALL (Column[, Column[, …]]) | تمام فیلترها را از ستونهای مشخصشده در جدول حذف میکند؛ تمام فیلترهای دیگر روی ستونهای دیگر جدول همچنان اعمال میشوند. تمام آرگومانهای ستون باید از همان جدول باشند. نوع ALL(Column) زمانی مفید است که میخواهید فیلترهای زمینه را برای یک یا چند ستون خاص حذف کنید و تمام فیلترهای زمینه دیگر را نگه دارید. |
| ALLEXCEPT(Table, Column1 [,Column2]…) | تمام فیلترهای زمینهای جدول را به جز فیلترهایی که روی ستونهای مشخصشده اعمال شدهاند، حذف میکند. این یک میانبر مناسب برای موقعیتهایی است که میخواهید فیلترها را روی بسیاری از ستونهای یک جدول، اما نه همه آنها، حذف کنید. |
- این تابع برای استفاده در حالت DirectQuery، هنگام استفاده در ستونهای محاسبهشده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمیشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
