---
title: LOOKUPVALUE – ค้นหาและดึงค่าจากตารางตามเงื่อนไขหลายตัว
url: https://www.thepexcel.com/functions/dax/filter/lookupvalue-dax/
type: function-explainer
program: DAX
syntax: "LOOKUPVALUE( <result_columnName>, <search_columnName>, <search_value> [, <alternateResult>] )"
date: 2025-12-13
updated: 2025-12-20
scores:
  popularity: 8
  difficulty: 4
  usefulness: 8
---

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

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

## คำอธิบาย

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

## Syntax

```excel
LOOKUPVALUE( &lt;result_columnName&gt;, &lt;search_columnName&gt;, &lt;search_value&gt; [, &lt;alternateResult&gt;] )
```

**Variant**

```excel
LOOKUPVALUE(&lt;ResultColumnName&gt;, &lt;SearchColumnName&gt;, &lt;SearchValue&gt;)
```

ค้นหาด้วยเงื่อนไขเดียว

**Variant**

```excel
LOOKUPVALUE(&lt;ResultColumnName&gt;, &lt;SearchColumnName&gt;, &lt;SearchValue&gt;, &lt;SearchColumnName2&gt;, &lt;SearchValue2&gt;)
```

ค้นหาด้วย 2 เงื่อนไข

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ lookup-master-data

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

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

_เหมาะกับ:_ multi-key-match

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

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

_เหมาะกับ:_ alternate-result

## ตัวอย่าง

### 1. ตัวอย่างพื้นฐาน - ค้นหาแบบเกณฑ์เดียว

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

**ผลลัพธ์:** `ดึงค่า Average Rate จากตาราง Currency Rate โดยให้ CurrencyKey ตรงกับค่าปัจจุบัน`

ใช้ LOOKUPVALUE เพื่อค้นหาค่ากำแพงแลกเปลี่ยน โดยจับคู่กับ CurrencyKey จากตารางปัจจุบัน ผลลัพธ์ก็คือค่า Average Rate ที่ตรงกัน

### 2. ตัวอย่างกลางๆ - ค้นหาแบบหลายเกณฑ์

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

**ผลลัพธ์:** `ค้นหาวันที่จัดส่ง โดยให้ทั้ง Order ID และ Product ID ตรงกัน`

ใช้เงื่อนไขสองตัว ทั้ง Order ID และ Product ID ต้องตรงกันพร้อมๆ กัน ถ้าตรงแล้วจะคืนค่า Shipment Date มา ถ้าไม่ตรงจะได้ BLANK

### 3. ตัวอย่างขั้นสูง - ใช้ alternateResult จัดการข้อผิดพลาด

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

**ผลลัพธ์:** `ถ้าเจอ Channel ID ที่ตรง จะคืน Channel Name ถ้าไม่เจอจะคืน "Unknown Channel" แทน`

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

### 4. ตัวอย่างขั้นเทพ - หลายเกณฑ์พร้อม alternateResult

```excel
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"`

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

## หมายเหตุเพิ่มเติม

- ถ้ามี Relationship อยู่แล้วในโมเดล ให้ใช้ RELATED() แทน มันจะเร็วกว่า LOOKUPVALUE ตลอด

- ใช้ alternateResult เพื่อจัดการกับกรณีที่ไม่พบข้อมูลหรือมีหลายแถวที่ตรง แทนที่จะใช้ ISERROR หรือ IFERROR

- หลีกเลี่ยงการใช้ LOOKUPVALUE ในตัว Iterator (เช่น SUMX, FILTER) เพราะมันจะช้ากว่า CALCULATE + TREATAS

- ตัวเลือก search_value สามารถเป็น Expression ได้ เช่น DATE(2024,1,1) แต่ search_columnName ต้องเป็นการอ้างอิงคอลัมน์จริงเท่านั้น

- เมื่อต้องค้นหาแบบหลายเกณฑ์จากตารางเดียวกัน LOOKUPVALUE จะสะดวกกว่า FILTER + CALCULATETABLE

- ในบางกรณี การใช้ VAR + TREATAS + CALCULATE อาจให้ประสิทธิภาพดีกว่า LOOKUPVALUE โดยเฉพาะกับข้อมูลที่มีปริมาณมาก

## คำถามที่พบบ่อย

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

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

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

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

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

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

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

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

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

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

## ฟังก์ชันที่เกี่ยวข้อง

- [RELATED – ดึงค่าจากตารางที่มีความสัมพันธ์ (Many → One)](https://www.thepexcel.com/functions/dax/relationship/related-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [TREATAS – ส่งค่าข้ามตารางแบบเสมือน ไม่ต้องมี Relationship](https://www.thepexcel.com/functions/dax/table-manipulation/treatas-dax/)
- [RELATEDTABLE – คืนตารางฝั่ง Many ที่สัมพันธ์กับแถวปัจจุบัน (One → Many)](https://www.thepexcel.com/functions/dax/relationship/relatedtable-dax/)
- [SELECTEDVALUE – ดึงค่าเดียวจาก Filter Context](https://www.thepexcel.com/functions/dax/filter/selectedvalue-dax/)

## แหล่งข้อมูลเพิ่มเติม

- [DAX Guide: LOOKUPVALUE](https://dax.guide/lookupvalue/) _(guide)_
- [Microsoft Learn: LOOKUPVALUE](https://learn.microsoft.com/en-us/dax/lookupvalue-function-dax) _(official)_

---

_Source: [https://www.thepexcel.com/functions/dax/filter/lookupvalue-dax/](https://www.thepexcel.com/functions/dax/filter/lookupvalue-dax/)_
