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

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

تابع USERELATIONSHIP در DAX

تابع USERELATIONSHIP در DAX

تابع USERELATIONSHIP در Power BI

تابع USERELATIONSHIP در زبان DAX یکی از توابع تخصصی و قدرتمند در Power BI است که برای فعال‌سازی یک رابطه غیرفعال بین دو جدول در هنگام محاسبه استفاده می‌شود. این تابع معمولاً در ترکیب با CALCULATE یا CALCULATETABLE به‌کار می‌رود تا زمینه فیلتر را بر اساس یک رابطه خاص تغییر دهد.

تعریف تابع USERELATIONSHIP

DAX
USERELATIONSHIP(<column1>, <column2>)
  • column1 و column2: ستون‌هایی از دو جدول مختلف که بین آن‌ها یک رابطه تعریف شده اما غیرفعال است.

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

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

✅ مثال ساده

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

  • جدول Sales با ستون OrderDate
  • جدول Date با ستون‌های Date, ShipDate

در مدل، رابطه فعال بین Sales[OrderDate] و Date[Date] است. اما شما می‌خواهید مجموع فروش را بر اساس تاریخ ارسال (ShipDate) محاسبه کنید:

DAX
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] را با استفاده از عبارت زیر ایجاد کنید:

DAX
= 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

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

 

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

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

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