RELATED function (DAX)
تابع RELATED در زبان DAX یکی از توابع بسیار کاربردی در Power BI است که برای بازیابی مقادیر از جدول مرتبط (related table) استفاده میشود. این تابع به شما امکان میدهد تا از طریق روابط تعریفشده بین جداول، به دادههای جدول دیگر دسترسی پیدا کنید.
Syntax
RELATED(<column>)
Parameters
| Term | تعریف |
|---|---|
column |
ستونی که شامل مقادیری است که میخواهید بازیابی کنید. |
مقدار بازگشتی
یک مقدار واحد که مربوط به ردیف فعلی است.
توضیحات
- تابع RELATED مستلزم وجود رابطهای بین جدول فعلی و جدولی با اطلاعات مرتبط است. شما ستونی را که حاوی دادههای مورد نظر شماست مشخص میکنید و این تابع از یک رابطه چند به یک موجود برای دریافت مقدار از ستون مشخص شده در جدول مرتبط پیروی میکند. اگر رابطهای وجود نداشته باشد، باید یک رابطه ایجاد کنید.
- هنگامی که تابع RELATED جستجو را انجام میدهد، تمام مقادیر موجود در جدول مشخص شده را صرف نظر از هرگونه فیلتری که ممکن است اعمال شده باشد، بررسی میکند.
- تابع RELATED به یک زمینه ردیف نیاز دارد. بنابراین، فقط میتوان از آن در عبارت ستونی محاسبه شده، که در آن زمینه ردیف فعلی بدون ابهام است، یا به عنوان یک تابع تو در تو در عبارتی که از یک تابع اسکن جدول استفاده میکند، استفاده کرد. یک تابع اسکن جدول، مانند SUMX، مقدار مقدار ردیف فعلی را دریافت میکند و سپس جدول دیگری را برای یافتن نمونههایی از آن مقدار اسکن میکند.
- تابع RELATED را نمیتوان برای دریافت یک ستون در یک رابطه محدود استفاده کرد.
مثال
در مثال زیر، معیار «فروش اینترنتی غیر آمریکایی» برای تولید گزارش فروشی ایجاد شده است که فروش در ایالات متحده را شامل نمیشود. برای ایجاد این معیار، جدول InternetSales_USD باید فیلتر شود تا تمام فروشهای متعلق به ایالات متحده در جدول SalesTerritory حذف شوند. ایالات متحده، به عنوان یک کشور، 5 بار در جدول SalesTerritory ظاهر میشود؛ یک بار برای هر یک از مناطق زیر: شمال غربی، شمال شرقی، مرکزی، جنوب غربی و جنوب شرقی.
اولین رویکرد برای فیلتر کردن فروش اینترنتی، به منظور ایجاد معیار، میتواند اضافه کردن یک عبارت فیلتر مانند زیر باشد:
FILTER('InternetSales_USD'
, 'InternetSales_USD'[SalesTerritoryKey]<>1 && 'InternetSales_USD'[SalesTerritoryKey]<>2 && 'InternetSales_USD'[SalesTerritoryKey]<>3 && 'InternetSales_USD'[SalesTerritoryKey]<>4 && 'InternetSales_USD'[SalesTerritoryKey]<>5)
با این حال، این رویکرد خلاف شهود است، مستعد خطاهای تایپی است و اگر هر یک از مناطق موجود در آینده تقسیم شوند، ممکن است کار نکند.
یک رویکرد بهتر این است که از رابطه موجود بین InternetSales_USD و SalesTerritory استفاده کنید و صریحاً بیان کنید که کشور باید متفاوت از ایالات متحده باشد. برای انجام این کار، یک عبارت فیلتر مانند زیر ایجاد کنید:
FILTER( 'InternetSales_USD', RELATED('SalesTerritory'[SalesTerritoryCountry])<>"United States")
تابع RELATED
این عبارت از تابع RELATED برای جستجوی مقدار کشور در جدول SalesTerritory استفاده میکند و با شروع از مقدار ستون کلیدی، SalesTerritoryKey، در جدول InternetSales_USD جستجو را انجام میدهد. نتیجه جستجو توسط تابع فیلتر برای تعیین اینکه آیا ردیف InternetSales_USD فیلتر شده است یا خیر، استفاده میشود.
نکته : اگر مثال کار نکرد، ممکن است لازم باشد بین جداول رابطه ایجاد کنید.
= SUMX(FILTER( 'InternetSales_USD'
, RELATED('SalesTerritory'[SalesTerritoryCountry])
<>"United States"
)
,'InternetSales_USD'[SalesAmount_USD])
جدول زیر فقط مجموعهای مربوط به هر منطقه را نشان میدهد تا ثابت کند که عبارت فیلتر در معیار، فروش اینترنتی غیر آمریکایی، همانطور که انتظار میرفت عمل میکند.
| Row Labels | Internet Sales | Non USA Internet Sales |
|---|---|---|
| Australia | $4,999,021.84 | $4,999,021.84 |
| Canada | $1,343,109.10 | $1,343,109.10 |
| France | $2,490,944.57 | $2,490,944.57 |
| Germany | $2,775,195.60 | $2,775,195.60 |
| United Kingdom | $5,057,076.55 | $5,057,076.55 |
| United States | $9,389,479.79 | |
| Grand Total | $26,054,827.45 | $16,665,347.67 |
شکل زیر نشان میدهد که اگر از این معیار در یک جدول گزارش تصویری استفاده کنید، چه چیزی ممکن است به دست آورید:
| Row Labels | Accessories | Bikes | Clothing | Grand Total |
|---|---|---|---|---|
| 2005 | $1,526,481.95 | $1,526,481.95 | ||
| 2006 | $3,554,744.04 | $3,554,744.04 | ||
| 2007 | $156,480.18 | $5,640,106.05 | $70,142.77 | $5,866,729.00 |
| 2008 | $228,159.45 | $5,386,558.19 | $102,675.04 | $5,717,392.68 |
| Grand Total | $384,639.63 | $16,107,890.23 | $172,817.81 | $16,665,347.67 |
مثال ساده
فرض کنید دو جدول دارید:
- جدول Orders با ستونهای:
OrderID,CustomerID,OrderAmount - جدول Customers با ستونهای:
CustomerID,CustomerName
و بین این دو جدول یک رابطه بر اساس CustomerID تعریف شده است.
اکنون میخواهید در جدول Orders، نام مشتری را نیز نمایش دهید:
CustomerName = RELATED(Customers[CustomerName])
این فرمول مقدار CustomerName را از جدول Customers برای هر ردیف جدول Orders بازیابی میکند.
نکات مهم
- اگر رابطهای بین جداول وجود نداشته باشد، تابع RELATED خطا میدهد.
- اگر چندین مقدار برای یک کلید وجود داشته باشد (مثلاً رابطه چند به چند)، RELATED فقط اولین مقدار را بازمیگرداند.
- این تابع فقط در ستونهای محاسبهشده (Calculated Columns) یا معیارها (Measures) قابل استفاده است.
کاربردهای رایج
- اضافه کردن اطلاعات توصیفی از جدول مرجع (مانند نام مشتری، دستهبندی محصول)
- ساخت ستونهای ترکیبی از چند جدول
- استفاده در فیلترهای شرطی و محاسبات سفارشی
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.
میتوانید پاور بی آی دسکتاپ رایگان را دانلود کنید : Power BI desktop download
