عملکرد این تابع مشابه تابع 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()
).
به عنوان اولین نفر، تجربه یا دیدگاه خود را بنویسید!