در دنیای Power BI و DAX، مدیریت فیلترها و Filter Context یکی از اصول حیاتی برای ساخت گزارشهای دقیق و پویا است. توابع ALL÷، ALLSELECTED و ALLEXCEPT ابزارهای کلیدی در کنترل زمینه فیلتر هستند و استفاده صحیح از آنها میتواند به شما امکان دهد گزارشهای تحلیلی و KPIهای حرفهای بسازید.
در این مقاله، این سه تابع را به طور کامل بررسی میکنیم، تفاوتها و کاربردهای آنها را تحلیل میکنیم، با مثالهای عملی نحوه استفاده از آنها را نشان میدهیم و بهترین روشها برای بهرهگیری از آنها را ارائه میکنیم.
اهمیت مدیریت فیلتر در DAX
قبل از بررسی توابع، باید بدانیم Filter Context چیست:
- Filter Context تعیین میکند که چه دادهای در یک محاسبه DAX استفاده شود.
- بدون کنترل مناسب، محاسبات ممکن است غیر دقیق یا گمراهکننده باشند.
- توابع ALL، ALLSELECTED و ALLEXCEPT به شما امکان میدهند سطح فیلترها را تغییر دهید یا بازنویسی کنید تا نتایج Measureها دقیق و قابل اعتماد باشند.
تابع ALL
تعریف و کاربرد
تابع ALL فیلترهای موجود روی یک جدول یا ستون را حذف میکند.
Syntax
ALL(<table_or_column>)
کاربردها
- محاسبه مجموع کل بدون فیلتر
- بازنویسی Filter Context در CALCULATE
- مقایسه مقدار فیلتر شده با مقدار کل
مثال عملی÷
TotalSales := SUM(Sales[SalesAmount])
PercentOfTotal :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALL(Sales[Product]))
)
- ALL(Sales[Product]) فیلتر ستون Product را نادیده میگیرد.
- نتیجه: هر محصول بر اساس کل فروش مقایسه میشود.
تابع ALLSELECTED
تعریف و کاربرد
تابع ALLSELECTED فیلترهای انتخاب شده توسط کاربر (مثلاً Slicer) را حفظ میکند و فقط فیلترهای داخل Measure را نادیده میگیرد.
Syntax
ALLSELECTED(<table_or_column>)
کاربردها
- نمایش درصد سهم در محدوده انتخابی کاربر
- ایجاد Measure پویا بر اساس انتخاب کاربر
مثال عملی
PercentOfSelected :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALLSELECTED(Sales[Product]))
)
تفاوت با ALL
- ALL تمام فیلترها را حذف میکند.
- ALLSELECTED فقط فیلترهای انتخاب کاربر را حفظ میکند.
تابع ALLEXCEPT
تعریف و کاربرد
تابع ALLEXCEPT تمام فیلترها را حذف میکند به جز ستونهایی که مشخص کردهایم.
Syntax
ALLEXCEPT(<table>, <column1>, [<column2>], ...)
کاربردها
- محاسبه مجموع یا میانگین با حفظ فیلتر یک یا چند ستون
- حذف فیلترهای غیرضروری و تمرکز روی ستونهای کلیدی
مثال عملی
TotalSalesByRegion :=
CALCULATE(
SUM(Sales[SalesAmount]),
ALLEXCEPT(Sales, Sales[Region])
)
- فیلترهای دیگر حذف میشوند.
- فقط فیلتر Region حفظ میشود.
جدول مقایسه پیشرفته
| ویژگی / سناریو | ALL | ALLSELECTED | ALLEXCEPT |
|---|---|---|---|
| حذف همه فیلترها | ✅ | ✅ (غیر از انتخاب کاربر) | ❌ |
| حفظ انتخاب کاربر | ❌ | ✅ | ❌ |
| حفظ فیلتر ستون خاص | ❌ | ❌ | ✅ |
| استفاده در CALCULATE | ✅ | ✅ | ✅ |
| کاربرد در درصد سهم | ✅ | ✅ | ✅ |
| کاربرد در Rank | ✅ | ✅ | ✅ |
| مناسب KPI پویا | ❌ | ✅ | ✅ |
| پیچیدگی کدنویسی | کم | متوسط | متوسط |
| عملکرد در مدلهای بزرگ | عالی | خوب | خوب |
سناریوهای عملی
مثال ۱: درصد سهم محصول از کل فروش (ALL)
PercentOfTotal :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALL(Sales[Product]))
)
مثال ۲: درصد سهم محصول در بازه انتخابی کاربر (ALLSELECTED)
PercentOfSelected :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALLSELECTED(Sales[Product]))
)
مثال ۳: مجموع فروش هر محصول در همان Region (ALLEXCEPT)
TotalSalesByRegion :=
CALCULATE(
SUM(Sales[SalesAmount]),
ALLEXCEPT(Sales, Sales[Region])
)
مثال ۴: رتبه محصولات بر اساس فروش کل (ALL)
ProductRank :=
RANKX(
ALL(Sales[Product]),
SUM(Sales[SalesAmount]),
,
DESC,
Skip
)
مثال ۵: رتبه محصولات در بازه انتخابی کاربر (ALLSELECTED)
ProductRankSelected :=
RANKX(
ALLSELECTED(Sales[Product]),
SUM(Sales[SalesAmount]),
,
DESC,
Skip
)
مثال ۶: درصد سهم فروش هر Region نسبت به کل Region (ALL)
PercentOfRegion :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALL(Sales[Region]))
)
مثال ۷: درصد سهم فروش Region در بازه انتخابی کاربر (ALLSELECTED)
PercentOfRegionSelected :=
DIVIDE(
SUM(Sales[SalesAmount]),
CALCULATE(SUM(Sales[SalesAmount]), ALLSELECTED(Sales[Region]))
)
نکات کلیدی برای تحلیل حرفهای
- ALL: مناسب محاسبات کل (Global)
- ALLSELECTED: تعامل با انتخاب کاربر و Slicer
- ALLEXCEPT: حفظ ستونهای کلیدی و حذف فیلترهای اضافی
- ترکیب توابع با CALCULATE ،DIVIDE و RANKX برای KPI و درصد سهم
- مستندسازی دقیق Measureها برای جلوگیری از خطا
- تست عملکرد در مدلهای بزرگ ضروری است
معایب و محدودیتها
- استفاده بیش از حد از ALLSELECTED ممکن است باعث کاهش عملکرد شود
- ALLEXCEPT اگر ستونهای کلیدی اشتباه انتخاب شوند، نتایج اشتباه ایجاد میکند
- پیچیدگی Measureها در مدلهای بزرگ افزایش مییابد
سوالات متداول (FAQ)
۱. تفاوت ALL و ALLSELECTED چیست؟
ALL همه فیلترها را حذف میکند، ALLSELECTED فیلترهای انتخاب کاربر را حفظ میکند.
۲. کاربرد ALLEXCEPT چیست؟
حذف فیلترها ولی حفظ ستون یا ستونهای مشخص
۳. استفاده از این توابع باعث کاهش سرعت میشود؟
در مدلهای بزرگ، استفاده نادرست ممکن است سرعت را کاهش دهد.
۴. آیا در Excel Power Pivot هم قابل استفاده است؟
بله، تمام توابع اصلی DAX در Power Pivot پشتیبانی میشوند.
پیشنهاد مطالعه
- مرجع زبان DAX افزونه کوئری نویسی در اکسل و POWER BI
- مرجع زبان فرمول نویسی M در پاور کوئری
- طراحی داشبوردهای مدیریتی در Microsoft Power BI
تماس و مشاوره با لاندا
مدلسازی دادههای حرفهای با Power BI، اگر میخواهید گزارشهای دقیق، پویا و قابل اعتماد بسازید و از تمام قابلیتهای ALL، ALLSELECTED و ALLEXCEPT استفاده کنید، همین حالا با تیم توسعه فناوری اطلاعات لاندا تماس ✆ با لاندا بگیرید:
- طراحی مدل داده حرفهای و پویا
- آموزش عملی و کاربردی توابع DAX
- مشاوره و پیادهسازی پروژههای Power BI

و سپس «افزودن به صفحه اصلی» ضربه بزنید
و سپس «افزودن به صفحه اصلی» ضربه بزنید

نظری داده نشده