Thep Excel

LOOKUPVALUE – ค้นหาและดึงค่าจากตารางตามเงื่อนไขหลายตัว

LOOKUPVALUE เป็นฟังก์ชันค้นหาที่ยืดหยุ่น โดยจะดึงค่าจากคอลัมน์หนึ่งโดยการค้นหาตามเงื่อนไขหลายตัวในเวลาเดียวกัน

=LOOKUPVALUE( <result_columnName>, <search_columnName>, <search_value> [, <alternateResult>] )

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
8/10

Difficulty
4/10

Usefulness
8/10

Syntax & Arguments

=LOOKUPVALUE( <result_columnName>, <search_columnName>, <search_value> [, <alternateResult>] )

Argument Type Required Default Description
result_columnName Column Reference Yes คอลัมน์ที่มีค่าที่ต้องการคืนกลับ (ต้องเป็นอ้างอิงคอลัมน์จริง ไม่สามารถเป็น Expression ได้)
search_columnName Column Reference Yes คอลัมน์ที่ต้องการค้นหา (สามารถอยู่ในตารางเดียวกันหรือตารางที่มี Relationship ได้)
search_value Scalar/Expression Yes ค่าที่ต้องการค้นหา (สามารถใส่หลายคู่ของ search_columnName และ search_value ได้)
search_columnName Column Reference Optional คอลัมน์เพิ่มเติมสำหรับเงื่อนไขการค้นหา (สามารถระบุได้หลายคู่กับ search_value)
search_value Scalar/Expression Optional ค่าที่ต้องการค้นหาเพิ่มเติม (จับคู่กับ search_columnName)
alternateResult Scalar Optional Error if no match or multiple different results ค่าที่คืนกลับเมื่อไม่มีการจับคู่หรือมีการจับคู่หลายแถวแต่ค่าผลลัพธ์ต่างกัน ถ้าไม่ระบุจะเกิด Error

How it works

ดึงข้อมูลอ้างอิงจากตารางอื่นด้วยคีย์

เช่น ดึงชื่อ/กลุ่ม/สถานะจากตารางมาสเตอร์ด้วยรหัส

จับคู่ด้วยหลายคอลัมน์ (Composite Key)

เช่น ค้นหาด้วย Date+Currency หรือ Year+Region

คืนค่าแทนเมื่อไม่พบ

กำหนด AlternateResult เพื่อคืน 0/ข้อความ/ค่าอื่นแทน BLANK

Examples

ตัวอย่างพื้นฐาน – ค้นหาแบบเกณฑ์เดียว
Exchange Rate = LOOKUPVALUE( 'Currency Rate'[Average Rate], 'Currency Rate'[CurrencyKey], [CurrencyKey] )
ใช้ LOOKUPVALUE เพื่อค้นหาค่ากำแพงแลกเปลี่ยน โดยจับคู่กับ CurrencyKey จากตารางปัจจุบัน ผลลัพธ์ก็คือค่า Average Rate ที่ตรงกัน
DAX Formula:

Exchange Rate = 
LOOKUPVALUE(
    'Currency Rate'[Average Rate],
    'Currency Rate'[CurrencyKey],
    [CurrencyKey]
)

Result:

ดึงค่า Average Rate จากตาราง Currency Rate โดยให้ CurrencyKey ตรงกับค่าปัจจุบัน

ตัวอย่างกลางๆ – ค้นหาแบบหลายเกณฑ์
Shipment Date = LOOKUPVALUE( 'Shipping'[Shipment Date], 'Shipping'[Order ID], [Order ID], 'Shipping'[Product ID], [Product ID] )
ใช้เงื่อนไขสองตัว ทั้ง Order ID และ Product ID ต้องตรงกันพร้อมๆ กัน ถ้าตรงแล้วจะคืนค่า Shipment Date มา ถ้าไม่ตรงจะได้ BLANK
DAX Formula:

Shipment Date = 
LOOKUPVALUE(
    'Shipping'[Shipment Date],
    'Shipping'[Order ID],
    [Order ID],
    'Shipping'[Product ID],
    [Product ID]
)

Result:

ค้นหาวันที่จัดส่ง โดยให้ทั้ง Order ID และ Product ID ตรงกัน

ตัวอย่างขั้นสูง – ใช้ alternateResult จัดการข้อผิดพลาด
Channel Name = LOOKUPVALUE( Channels[Channel Name], Channels[Channel ID], [Channel ID], "Unknown Channel" )
ตัวพารามิเตอร์ alternateResult ช่วยให้เราจัดการกับการไม่พบข้อมูลแทนที่จะปล่อยให้เกิด Error ต่อได้อย่างดี
DAX Formula:

Channel Name = 
LOOKUPVALUE(
    Channels[Channel Name],
    Channels[Channel ID],
    [Channel ID],
    "Unknown Channel"
)

Result:

ถ้าเจอ Channel ID ที่ตรง จะคืน Channel Name ถ้าไม่เจอจะคืน "Unknown Channel" แทน

ตัวอย่างขั้นเทพ – หลายเกณฑ์พร้อม alternateResult
Employee Department = LOOKUPVALUE( Employees[Department], Employees[Company ID], [Company ID], Employees[Employee Code], [Employee Code], Employees[Location], […
ตัวอย่างนี้แสดงการใช้ LOOKUPVALUE เพื่อค้นหาแบบเกณฑ์สามตัว (multi-level lookup) พร้อมการจัดการข้อผิดพลาด ต่างจาก VLOOKUP ที่ต้องค้นหาทีละคอลัมน์จากซ้ายไปขวาเท่านั้น
DAX Formula:

Employee Department = 
LOOKUPVALUE(
    Employees[Department],
    Employees[Company ID],
    [Company ID],
    Employees[Employee Code],
    [Employee Code],
    Employees[Location],
    [Location],
    "Not Found"
)

Result:

ค้นหา Department จากตาราง Employees โดยให้ Company ID, Employee Code, และ Location ตรงกัน ถ้าไม่เจอจะคืน "Not Found"

FAQs

LOOKUPVALUE ต่างจาก RELATED() อย่างไร

RELATED() ใช้ Relationship ที่มีอยู่ในโมเดลเพื่อดึงค่า มันเร็วกว่าและเหมาะสำหรับการค้นหากรณีที่มี Relationship อยู่แล้ว แต่ LOOKUPVALUE ใช้ได้แม้ไม่มี Relationship หรือต้องค้นหาแบบ many-to-many หรือเงื่อนไขที่ซับซ้อน

ถ้า LOOKUPVALUE ไม่เจอค่าจะเกิดอะไรขึ้น

จะคืนค่า BLANK หากไม่พบข้อมูลที่ตรงกับเงื่อนไข แต่ถ้ามีหลายแถวที่ตรง แล้วค่าผลลัพธ์ต่างกัน ก็จะเกิด Error (ยกเว้นกำหนด alternateResult)

สามารถใช้ LOOKUPVALUE ในหลายเงื่อนไขได้หรือไม่

ได้เลย สามารถใส่หลายคู่ของ search_columnName และ search_value ได้มากเท่าที่ต้องการ แต่ข้อสังเกต ทั้งหมดเงื่อนไขต้องตรงกันพร้อมๆ กัน (AND logic)

ทำไม LOOKUPVALUE ช้ากว่า RELATED()

เพราะ RELATED() ใช้ประโยชน์จาก Relationship ที่เคยสร้างไว้ในโมเดล ซึ่งมีการ Optimize ไว้แล้ว แต่ LOOKUPVALUE ต้องทำการค้นหาแบบ Scan ทั่วทั้งตาราง ดังนั้นถ้ามี Relationship ให้ใช้ RELATED() ดีกว่า

LOOKUPVALUE ใช้ได้ในทั้ง Measure และ Calculated Column หรือไม่

ใช้ได้ในทั้งสองแบบ แต่มีข้อจำกัด ในหลายกรณี เมื่อใช้ใน Calculated Column มันจะต้อง Scan ทั้งตารางซึ่งอาจช้า ถ้าต้องการประสิทธิภาพดี ให้ใช้ Relationship และ RELATED() ด้วย

Resources & Related

Additional Notes

LOOKUPVALUE คือฟังก์ชันค้นหาที่มีประสิทธิภาพสูงในการค้นหาค่าจากตารางตามหลายเงื่อนไข

ส่วนตัวผมคิดว่า ถ้าคุณเจอกรณีที่ต้องค้นหาค่าแต่ไม่มี Relationship หรือ Relationship ไม่ตรงตามที่ต้องการ LOOKUPVALUE คือตัวช่วยสุดที่ดี มันสามารถจับคู่กับหลายคอลัมน์พร้อมกันได้เลย 😎

แต่ที่ต้องจำไว้นะ:
– ทุกเงื่อนไขต้องตรงกันพร้อมๆ กัน ถ้าไม่ตรงก็จะได้ BLANK
– ถ้ามีหลายแถวที่ตรง แต่ค่าผลลัพธ์เหมือนกันก็ไม่เป็นไร มันจะคืนค่านั้นให้
– ถ้ามีหลายแถวที่ตรง แต่ค่าผลลัพธ์ต่างกันก็จะเกิด Error (ยกเว้นกำหนด alternateResult)

เทคนิคการใช้งาน:
1. ใช้ LOOKUPVALUE เมื่อไม่มี Relationship หรือ Relationship ไม่เหมาะสม
2. ถ้ามี Relationship อยู่แล้ว ให้ใช้ RELATED() แทน มันจะเร็วกว่า
3. ตัวเลือก alternateResult จะช่วยให้จัดการกับข้อผิดพลาดได้ดีกว่า ISERROR/IFERROR

Leave a Reply

Your email address will not be published. Required fields are marked *