Thep Excel

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

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

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

ความนิยม8/10
ความยาก4/10
ประโยชน์8/10

อัปเดต 13 December 2025

Syntax & Arguments

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

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

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

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

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

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

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 ที่ตรงกัน

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

ผลลัพธ์ดึงค่า 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

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

ผลลัพธ์ค้นหาวันที่จัดส่ง โดยให้ทั้ง Order ID และ Product ID ตรงกัน
ตัวอย่างขั้นสูง – ใช้ alternateResult จัดการข้อผิดพลาดChannel Name = LOOKUPVALUE( Channels[Channel Name], Channels[Channel ID], [Channel ID], "Unknown Channel" )

ตัวพารามิเตอร์ alternateResult ช่วยให้เราจัดการกับการไม่พบข้อมูลแทนที่จะปล่อยให้เกิด Error ต่อได้อย่างดี

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

ผลลัพธ์ถ้าเจอ Channel ID ที่ตรง จะคืน Channel Name ถ้าไม่เจอจะคืน "Unknown Channel" แทน
ตัวอย่างขั้นเทพ – หลายเกณฑ์พร้อม alternateResultEmployee Department = LOOKUPVALUE( Employees[Department], Employees[Company ID], [Company ID], Employees[Employee Code], [Employee Code], Employees[Location], […

ตัวอย่างนี้แสดงการใช้ LOOKUPVALUE เพื่อค้นหาแบบเกณฑ์สามตัว (multi-level lookup) พร้อมการจัดการข้อผิดพลาด ต่างจาก VLOOKUP ที่ต้องค้นหาทีละคอลัมน์จากซ้ายไปขวาเท่านั้น

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

ผลลัพธ์ค้นหา 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

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

ฟังก์ชันนี้LOOKUPVALUEFilter
Filter (5)
CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

FILTER

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

LOOKUP

LOOKUP ค้นหาและดึงค่าจากเมทริกซ์ภาพ (visual matrix) ในการคำนวณภาพโดยการระบุเงื่อนไขการกรอง ใช้เฉพาะในการคำนวณภาพเท่านั้น

LOOKUPWITHTOTALS

LOOKUPWITHTOTALS ค้นหาตำแหน่งที่ตรงเงื่อนไขในตารางสรุป/กริด แล้วคืนค่าเดี่ยวจากคอลัมน์ผลลัพธ์หรือคำนวณนิพจน์จากชุดที่ตรงเงื่อนไข โดยถือว่าคอลัมน์ที่ไม่ระบุในเงื่อนไขอยู่ในสถานะรวม (total) ซึ่งต่างจาก LOOKUP

SELECTEDVALUE

SELECTEDVALUE ตรวจสอบว่า Filter Context ลดลงเหลือเพียงค่าเดียวแล้ว ถ้าใช่ให้คืนค่านั้น ถ้าไม่ใช่ให้คืนค่าอื่นแทน

Table manipulation (1)
DATATABLE

DATATABLE สร้างตารางแบบ hardcode ด้วยข้อมูลคงที่ โดยระบุชื่อคอลัมน์ ชนิดข้อมูล และค่าของแต่ละแถว เหมาะสำหรับตารางอ้างอิงเล็กๆ เช่น lookup table หรือข้อมูลตัวอย่าง

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่