تابع USERELATIONSHIP در Power BI
تابع USERELATIONSHIP در زبان DAX یکی از توابع تخصصی و قدرتمند در Power BI است که برای فعالسازی یک رابطه غیرفعال بین دو جدول در هنگام محاسبه استفاده میشود. این تابع معمولاً در ترکیب با CALCULATE یا CALCULATETABLE بهکار میرود تا زمینه فیلتر را بر اساس یک رابطه خاص تغییر دهد.
تعریف تابع USERELATIONSHIP
USERELATIONSHIP(<column1>, <column2>)
- column1 و column2: ستونهایی از دو جدول مختلف که بین آنها یک رابطه تعریف شده اما غیرفعال است.
عملکرد چگونه است؟
در مدل دادهای Power BI، ممکن است بین دو جدول چند رابطه وجود داشته باشد، اما فقط یکی از آنها فعال باشد. تابع USERELATIONSHIP به شما اجازه میدهد تا در یک محاسبه خاص، رابطه غیرفعال را بهطور موقت فعال کنید بدون اینکه رابطه اصلی مدل تغییر کند.
✅ مثال ساده
فرض کنید دو جدول دارید:
- جدول Sales با ستون
OrderDate - جدول Date با ستونهای
Date,ShipDate
در مدل، رابطه فعال بین Sales[OrderDate] و Date[Date] است. اما شما میخواهید مجموع فروش را بر اساس تاریخ ارسال (ShipDate) محاسبه کنید:
TotalSalesByShipDate =
CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[ShipDate], Date[Date])
)
در این مثال، رابطه بین Sales[ShipDate] و Date[Date] بهطور موقت فعال میشود تا محاسبه بر اساس تاریخ ارسال انجام شود.
مثال کاربردی
نمونه زیر سینتکس لغو رابطه پیشفرض و فعال بین جداول InternetSales و DateTime را نشان میدهد. رابطه پیشفرض بین ستون OrderDate در جدول InternetSales و ستون Date در جدول DateTime وجود دارد.
برای محاسبه مجموع فروشهای اینترنتی و امکان برش بر اساس ShippingDate به جای OrderDate سنتی، معیار [InternetSales by ShippingDate] را با استفاده از عبارت زیر ایجاد کنید:
= CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
روابط بین InternetSales[ShippingDate] و DateTime[Date] باید وجود داشته باشند و نباید رابطه فعال باشند؛ همچنین، رابطه بین InternetSales[OrderDate] و DateTime[Date] باید وجود داشته باشد و باید رابطه فعال باشد.
کاربردهای رایج
- استفاده از روابط جایگزین برای محاسبات خاص (مانند تاریخ سفارش، تاریخ ارسال، تاریخ فاکتور)
- ساخت معیارهای مقایسهای بین روابط مختلف
- تحلیلهای زمانی با چندین نوع تاریخ در یک مدل
نکات مهم
USERELATIONSHIPفقط در توابعی مانندCALCULATEوCALCULATETABLEقابل استفاده است.- این تابع رابطه را فقط در زمینه همان محاسبه فعال میکند؛ رابطه اصلی مدل تغییر نمیکند.
- اگر رابطهای بین ستونها تعریف نشده باشد، استفاده از این تابع باعث خطا میشود.
تفاوت با سایر توابع مرتبط
| تابع | عملکرد |
|---|---|
USERELATIONSHIP |
فعالسازی موقت یک رابطه غیرفعال |
RELATED |
بازیابی مقدار از جدول مرتبط (رابطه فعال) |
RELATEDTABLE |
بازیابی ردیفهای مرتبط از جدول دیگر |
TREATAS |
اعمال فیلتر از یک جدول به جدول دیگر بدون رابطه مستقیم |
ملاحظات
- تابع USERELATIONSHIP فقط در توابعی قابل استفاده است که فیلتر را به عنوان آرگومان دریافت میکنند، برای مثال: CALCULATE، CALCULATETABLE، CLOSINGBALANCEWEEK، CLOSINGBALANCEMONTH، CLOSINGBALANCEQUARTER، CLOSINGBALANCEYEAR، OPENINGBALANCEWEEK، OPENINGBALANCEMONTH، OPENINGBALANCEQUARTER، OPENINGBALANCEYEAR، TOTALWTD، TOTALMTD، TOTALQTD و TOTALYTD.
- تابع USERELATIONSHIP زمانی که امنیت سطح ردیف برای جدولی که معیار در آن قرار دارد تعریف شده باشد، قابل استفاده نیست. برای مثال، اگر امنیت سطح ردیف برای DimCustomer تعریف شده باشد، تابع CALCULATE(SUM([SalesAmount])، USERELATIONSHIP(FactInternetSales[CustomerKey])، DimCustomer[CustomerKey])) خطا میدهد.
- تابع USERELATIONSHIP از روابط موجود در مدل استفاده میکند و روابط را با ستونهای نقطه پایانی آنها شناسایی میکند.
- در تابع USERELATIONSHIP، وضعیت یک رابطه مهم نیست؛ یعنی فعال بودن یا نبودن رابطه، تاثیری بر استفاده از تابع ندارد. حتی اگر رابطه غیرفعال باشد، از آن استفاده میشود و هر رابطه فعال دیگری را که ممکن است در مدل وجود داشته باشد اما در آرگومانهای تابع ذکر نشده باشد، لغو میکند.
تابع USERELATIONSHIP
- اگر هر یک از ستونهای نامگذاری شده به عنوان آرگومان بخشی از یک رابطه نباشد یا آرگومانها متعلق به روابط مختلفی باشند، خطایی بازگردانده میشود.
- اگر برای اتصال جدول A به جدول B در یک محاسبه، به چندین رابطه نیاز باشد، هر رابطه باید در یک تابع USERELATIONSHIP متفاوت نشان داده شود.
- اگر عبارات CALCULATE تو در تو باشند و بیش از یک عبارت CALCULATE شامل یک تابع USERELATIONSHIP باشد، آنگاه درونیترین تابع USERELATIONSHIP در صورت وجود تضاد یا ابهام، تابع غالب است.
- تا 10 تابع USERELATIONSHIP را میتوان تو در تو قرار داد؛ با این حال، عبارت شما ممکن است سطح عمیقتری از تودرتو بودن داشته باشد، یعنی عبارت نمونه زیر ۳ سطح تودرتو است، اما فقط ۲ سطح برای USERELATIONSHIP: =CALCULATE(CALCULATE(CALCULATE(<anyExpression>, USERELATIONSHIP(t1[colA], t2[colB])), t99[colZ]=999), USERELATIONSHIP(t1[colA], t2[colA])).
- برای روابط ۱ به ۱، USERELATIONSHIP فقط رابطه را در یک جهت فعال میکند. به طور خاص، فیلترها فقط میتوانند از جدول columnName2 به جدول columnName1 جریان داشته باشند. اگر فیلترینگ متقاطع دو طرفه مورد نظر باشد، میتوان از دو USERELATIONSHIP با جهتگیری مخالف در یک محاسبه استفاده کرد. برای مثال، CALCULATE(…, USERELATIONSHIP(T1[K], T2[K]), USERELATIONSHIP(T2[K], T1[K])).
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
