عملکرد این تابع مشابه تابع VLOOKUP (یا بهتر بگوییم XLOOKUP) در اکسل است و توسط آن میتوان مقداری را در یک جدول جستجو کنیم و در صورت وجود داشتن، چیزی که جلو یا پشت آن مقدار وجود دارد را بیابیم. هنگامی از این تابع استفاده میکنیم که هیچ Relationship بین جداول نیست و اگر بین جداول Relation داشته باشیم، از تابع RELATED باید استفاده کنیم زیرا بسیار بهینه تر عمل میکند.
امضای تابع LOOKUPVALUE در DAX
LOOKUPVALUE (
<result_columnName>,
<search_columnName>,
<search_value>
[, <search2_columnName>, <search2_value>]…
[, <alternateResult>]
)
شرح ساده تابع LOOKUPVALUE
LOOKUPVALUE ( Chi_ro_biar, to_koja_begard, donbal_chi_begard )
مثال
فرض کنید که بین جداول هیچ رابطهای نیست و میخواهیم در یک ستون در جدول OrderDetails، نام مشتری که در جدول Orders است را بر اساس OrderID جستجو کنیم.
customer name = LOOKUPVALUE(
'Order'[Customer],
'Order'[Order ID],
OrderDetail[Order ID]
)نکات مهم
- توجه) Data Type های
search_columnNameباsearch_valueحتما باید یکسان باشند. - اگر مقدار جستجو (
search_columnName) چند بار تکرار شده باشد و مقدارهایresult_columnNameبا هم فرق داشته باشند، تابع خطا میدهد:A table of multiple values was supplied where a single value was expected. - در این حالت، برای جلوگیری از خطا میتوان از پارامتر سوم تابع استفاده کرد و نیازی به
IFERRORنیست. - اگر مقدار جستجو تکراری باشد ولی همه مقدارهای
result_columnNameیکسان باشند، تابع خطا نمیدهد و همان مقدار را برمیگرداند. - اگر هیچ مقداری پیدا نشود، مقدار
BLANK()برگردانده میشود (نه خطا) و میتوان با پارامتر سوم تابع، مقدار دلخواه جایگزین کرد.
کاربردهای LOOKUPVALUE
- جستجو بر اساس چند کلید (Composite Key)
فرض کنید دو جدول دارید که Relationship بین آنها فقط روی یک ستون نیست، بلکه لازم است روی دو یا چند ستون همزمان مطابقت برقرار شود مثلاً میخواهیم قیمت کالایی را در سال خاصی جستجو کنیم.
Price =
LOOKUPVALUE(
ProductPrices[Price],
ProductPrices[ProductID],
Sales[ProductID],
ProductPrices[Year],
Sales[Year]
)- جستجوی مقدار از جدولی بدون تعریف Relationship در مدل
- مفید برای سناریوهایی که رابطهها circular میشوند.
- کنترل بیشتری در محاسبات شرطی پیچیده میدهد.
- جایگزینی مقدار از جدول نگاشت (Mapping Table)
در این حالت نیازی نیست که IFهای تو در تو بنویسیم مانند تبدیل عدد فصل به نام فصل.
تابع LOOKUPVALUE چه زمانی خطا میدهد؟
زمانی که مقدار جستجو در ستون
search_columnName چندین ردیف را پیدا کند و مقدارهای مربوط به result_columnName در آن ردیفها متفاوت باشند، تابع خطا میدهد. برای جلوگیری از این خطا میتوان از پارامتر جایگزین استفاده کرد.آیا میتوانم وقتی مقدار پیدا نشد مقدار پیشفرض برگردانم؟
بله، میتوانید با استفاده از پارامتر آخر تابع
LOOKUPVALUE مقدار پیشفرض را تعریف کنید تا اگر مقداری پیدا نشد، آن مقدار بازگردانده شود به جای مقدار خالی (BLANK()).
به عنوان اولین نفر، تجربه یا دیدگاه خود را بنویسید!