فروش لایسنس Power BI

با ما داده های خود را درک کنید تا برای آینده کسب و کارتان بهتر تصمیم گیری کنید.

تابع CROSSFILTER در DAX

تابع CROSSFILTER در DAX

تابع CROSSFILTER در Power BI

تابع CROSSFILTER در زبان DAX یکی از توابع پیشرفته و بسیار کاربردی در Power BI است که برای کنترل جهت فیلترگذاری بین دو جدول مرتبط استفاده می‌شود. این تابع به شما امکان می‌دهد تا جهت جریان فیلتر (Filter Direction) را در یک رابطه تغییر دهید یا آن را به‌طور موقت غیرفعال کنید.

تعریف تابع CROSSFILTER

DAX
CROSSFILTER(<column1>, <column2>, <direction>)
  • column1 و column2: ستون‌هایی از دو جدول که بین آن‌ها رابطه وجود دارد.
  • direction: جهت فیلترگذاری که می‌تواند یکی از مقادیر زیر باشد:
    • "None": غیرفعال کردن رابطه (هیچ فیلترگذاری انجام نمی‌شود)
    • "OneWay" یا "One": فیلتر فقط از ستون اول به ستون دوم اعمال می‌شود
    • "Both": فیلترگذاری دوطرفه فعال می‌شود

عملکرد چگونه است؟

در مدل داده‌ای Power BI، روابط معمولاً به‌صورت یک‌طرفه تعریف می‌شوند (از جدول والد به جدول فرزند). اما در برخی محاسبات، ممکن است نیاز داشته باشید که فیلتر از جدول فرزند به والد نیز اعمال شود یا رابطه را به‌طور موقت غیرفعال کنید. تابع CROSSFILTER دقیقاً برای همین هدف طراحی شده است.

✅ مثال ساده

فرض کنید دو جدول دارید:

  • Sales با ستون CustomerID
  • Customers با ستون CustomerID

و رابطه‌ای یک‌طرفه از Customers به Sales وجود دارد. حالا می‌خواهید مجموع فروش را محاسبه کنید، اما فیلتر را از Sales به Customers اعمال کنید:

DAX
SalesByCustomerFilter =
CALCULATE(
    COUNTROWS(Customers),
    CROSSFILTER(Sales[CustomerID], Customers[CustomerID], "Both")
)

در این مثال، فیلترگذاری دوطرفه فعال می‌شود تا بتوان از جدول فروش به جدول مشتریان فیلتر اعمال کرد.

مثال کاربردی

در نمودار مدل زیر، هم DimProduct و هم DimDate رابطه‌ای یک‌طرفه با FactInternetSales دارند.
تابع CROSSFILTER در DAX
به طور پیش‌فرض، ما نمی‌توانیم تعداد محصولات فروخته شده بر اساس سال را دریافت کنیم:
تابع CROSSFILTER در DAX

دو راه برای بدست آوردن تعداد محصولات بر اساس سال وجود دارد:

  • فیلترینگ متقاطع دو طرفه را روی رابطه فعال کنید. این کار نحوه عملکرد فیلترها را برای همه داده‌های بین این دو جدول تغییر می‌دهد.
  • از تابع CROSSFILTER برای تغییر نحوه عملکرد روابط فقط برای این معیار استفاده کنید.

هنگام استفاده از DAX، می‌توانیم از تابع CROSSFILTER برای تغییر نحوه رفتار جهت فیلتر متقاطع بین دو ستون تعریف شده توسط یک رابطه استفاده کنیم. در این حالت، عبارت DAX به این شکل است:

DAX
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))

با استفاده از تابع CROSSFILTER در عبارت اندازه‌گیری خود، به نتایج مورد انتظار دست می‌یابیم:

تابع CROSSFILTER در DAX

کاربردهای رایج

  • فعال‌سازی فیلترگذاری دوطرفه برای محاسبات خاص
  • غیرفعال کردن رابطه برای جلوگیری از تأثیر فیلترها
  • کنترل دقیق‌تر جریان فیلتر در مدل‌های پیچیده
  • استفاده در ترکیب با CALCULATE برای ساخت معیارهای سفارشی

⚠️ نکات مهم

  • CROSSFILTER فقط در توابعی مانند CALCULATE و CALCULATETABLE قابل استفاده است.
  • این تابع رابطه مدل را تغییر نمی‌دهد؛ فقط در زمینه همان محاسبه اعمال می‌شود.
  • اگر بین ستون‌ها رابطه‌ای وجود نداشته باشد، استفاده از این تابع باعث خطا می‌شود.

مقادیر مجاز برای پارامتر direction

مقدار توضیح
"None" رابطه غیرفعال می‌شود
"OneWay" یا "One" فیلتر فقط از ستون اول به دوم اعمال می‌شود
"Both" فیلترگذاری دوطرفه فعال می‌شود

مثال پیشرفته: غیرفعال کردن رابطه برای محاسبه کل بدون فیلتر

DAX
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

میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download

 

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پیمایش به بالا