تابع CROSSFILTER در Power BI
تابع CROSSFILTER در زبان DAX یکی از توابع پیشرفته و بسیار کاربردی در Power BI است که برای کنترل جهت فیلترگذاری بین دو جدول مرتبط استفاده میشود. این تابع به شما امکان میدهد تا جهت جریان فیلتر (Filter Direction) را در یک رابطه تغییر دهید یا آن را بهطور موقت غیرفعال کنید.
تعریف تابع CROSSFILTER
CROSSFILTER(<column1>, <column2>, <direction>)
- column1 و column2: ستونهایی از دو جدول که بین آنها رابطه وجود دارد.
- direction: جهت فیلترگذاری که میتواند یکی از مقادیر زیر باشد:
"None": غیرفعال کردن رابطه (هیچ فیلترگذاری انجام نمیشود)"OneWay"یا"One": فیلتر فقط از ستون اول به ستون دوم اعمال میشود"Both": فیلترگذاری دوطرفه فعال میشود
عملکرد چگونه است؟
در مدل دادهای Power BI، روابط معمولاً بهصورت یکطرفه تعریف میشوند (از جدول والد به جدول فرزند). اما در برخی محاسبات، ممکن است نیاز داشته باشید که فیلتر از جدول فرزند به والد نیز اعمال شود یا رابطه را بهطور موقت غیرفعال کنید. تابع CROSSFILTER دقیقاً برای همین هدف طراحی شده است.
✅ مثال ساده
فرض کنید دو جدول دارید:
Salesبا ستونCustomerIDCustomersبا ستونCustomerID
و رابطهای یکطرفه از Customers به Sales وجود دارد. حالا میخواهید مجموع فروش را محاسبه کنید، اما فیلتر را از Sales به Customers اعمال کنید:
SalesByCustomerFilter =
CALCULATE(
COUNTROWS(Customers),
CROSSFILTER(Sales[CustomerID], Customers[CustomerID], "Both")
)
در این مثال، فیلترگذاری دوطرفه فعال میشود تا بتوان از جدول فروش به جدول مشتریان فیلتر اعمال کرد.
مثال کاربردی


دو راه برای بدست آوردن تعداد محصولات بر اساس سال وجود دارد:
- فیلترینگ متقاطع دو طرفه را روی رابطه فعال کنید. این کار نحوه عملکرد فیلترها را برای همه دادههای بین این دو جدول تغییر میدهد.
- از تابع CROSSFILTER برای تغییر نحوه عملکرد روابط فقط برای این معیار استفاده کنید.
هنگام استفاده از DAX، میتوانیم از تابع CROSSFILTER برای تغییر نحوه رفتار جهت فیلتر متقاطع بین دو ستون تعریف شده توسط یک رابطه استفاده کنیم. در این حالت، عبارت DAX به این شکل است:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
با استفاده از تابع CROSSFILTER در عبارت اندازهگیری خود، به نتایج مورد انتظار دست مییابیم:
کاربردهای رایج
- فعالسازی فیلترگذاری دوطرفه برای محاسبات خاص
- غیرفعال کردن رابطه برای جلوگیری از تأثیر فیلترها
- کنترل دقیقتر جریان فیلتر در مدلهای پیچیده
- استفاده در ترکیب با
CALCULATEبرای ساخت معیارهای سفارشی
⚠️ نکات مهم
CROSSFILTERفقط در توابعی مانندCALCULATEوCALCULATETABLEقابل استفاده است.- این تابع رابطه مدل را تغییر نمیدهد؛ فقط در زمینه همان محاسبه اعمال میشود.
- اگر بین ستونها رابطهای وجود نداشته باشد، استفاده از این تابع باعث خطا میشود.
مقادیر مجاز برای پارامتر direction
| مقدار | توضیح |
|---|---|
"None" |
رابطه غیرفعال میشود |
"OneWay" یا "One" |
فیلتر فقط از ستون اول به دوم اعمال میشود |
"Both" |
فیلترگذاری دوطرفه فعال میشود |
مثال پیشرفته: غیرفعال کردن رابطه برای محاسبه کل بدون فیلتر
TotalSalesIgnoreCustomer =
CALCULATE(
SUM(Sales[Amount]),
CROSSFILTER(Sales[CustomerID], Customers[CustomerID], "None")
)
در این مثال، رابطه بین مشتری و فروش غیرفعال میشود تا محاسبه بدون تأثیر فیلتر مشتری انجام شود.
ملاحظات
- در مورد رابطه ۱:۱، تفاوتی بین جهت یک و دو وجود ندارد.
- CROSSFILTER فقط میتواند در توابعی استفاده شود که یک فیلتر را به عنوان آرگومان دریافت میکنند، برای مثال: توابع CALCULATE، CALCULATETABLE، CLOSINGBALANCEWEEK، CLOSINGBALANCEMONTH، CLOSINGBALANCEQUARTER، CLOSINGBALANCEYEAR، OpeningBALANCEWEEK، OpeningBALANCEMONTH، OpeningBALANCEQUARTER، OpeningBALANCEYEAR، TOTALWTD، TOTALMTD، TOTALQTD و TOTALYTD.
- CROSSFILTER از روابط موجود در مدل استفاده میکند و روابط را با ستونهای نقطه پایان آنها شناسایی میکند.
- در CROSSFILTER، تنظیم فیلتر متقاطع یک رابطه مهم نیست؛ یعنی اینکه آیا رابطه برای فیلتر کردن یک یا هر دو جهت در مدل تنظیم شده است، بر استفاده از تابع تأثیری ندارد. CROSSFILTER هرگونه تنظیمات فیلترینگ متقاطع موجود را لغو میکند.
- اگر هر یک از ستونهای نامگذاری شده به عنوان آرگومان بخشی از یک رابطه نباشند یا آرگومانها متعلق به روابط مختلف باشند، خطایی بازگردانده میشود.
- اگر عبارات CALCULATE تو در تو باشند و بیش از یک عبارت CALCULATE شامل یک تابع CROSSFILTER باشد، آنگاه درونیترین عبارت CROSSFILTER در صورت وجود تداخل یا ابهام، غالب است.
- این تابع برای استفاده در حالت DirectQuery هنگام استفاده در ستونهای محاسبه شده یا قوانین امنیتی سطح ردیف (RLS) پشتیبانی نمیشود.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download

