---
title: MIN – หาค่าน้อยที่สุดในคอลัมน์หรือเปรียบเทียบสองค่า scalar
url: https://www.thepexcel.com/functions/dax/aggregation/min-dax/
type: function-explainer
program: DAX
syntax: "MIN(<column>)"
date: 2025-12-18
scores:
  popularity: 9
  difficulty: 2
  usefulness: 9
---

# MIN – หาค่าน้อยที่สุดในคอลัมน์หรือเปรียบเทียบสองค่า scalar

> คืนค่าน้อยที่สุดจากคอลัมน์หรือเปรียบเทียบสอง scalar expression

## คำอธิบาย

MIN คืนค่าน้อยที่สุดจากคอลัมน์ภายใต้ filter context ปัจจุบัน หรือเปรียบเทียบสองค่า scalar expression แล้วคืนค่าที่น้อยกว่า รองรับตัวเลข วันที่ และข้อความ ทำงานภายใต้ filter context ทำให้ค่าที่หาได้จะถูกกรองตาม slicer หรือ visual filter อัตโนมัติ เหมาะกับการหาราคาต่ำสุด วันที่เร็วที่สุด หรือการตั้งเพดาน (cap) ให้กับค่าคำนวณ

## Syntax

```excel
MIN(&lt;column&gt;)
```

**Variant**

```excel
MIN(&lt;column&gt;)
```

คืนค่าน้อยที่สุดในคอลัมน์ภายใต้ filter context ปัจจุบัน ข้ามค่า BLANK ไป

**Variant**

```excel
MIN(&lt;expression1&gt;, &lt;expression2&gt;)
```

เปรียบเทียบสองค่า scalar expression แล้วคืนค่าที่น้อยกว่า ถือว่า BLANK เป็นค่าที่มีนัยสำคัญ

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| column | Yes | column |  | คอลัมน์ที่ต้องการหาค่าน้อยที่สุด รองรับตัวเลข วันที่ หรือข้อความ ทำงานภายใต้ filter context ปัจจุบัน และข้ามค่า BLANK ไป ถ้าใช้รูปแบบนี้ไม่ต้องระบุ expression1 และ expression2 |
| expression1 | No | scalar | ไม่มี (ใช้รูปแบบ column เดียว) | ค่า scalar expression ตัวแรกสำหรับการเปรียบเทียบ (ใช้เมื่อเรียก MIN แบบ 2 arguments) อาจเป็น measure, ค่าคงที่ หรือ expression ที่คืนค่าเดียว ถ้าค่านี้เป็น BLANK ผลลัพธ์จะเป็น BLANK |
| expression2 | No | scalar | ไม่มี (ใช้รูปแบบ column เดียว) | ค่า scalar expression ตัวที่สองสำหรับการเปรียบเทียบ (ใช้เมื่อเรียก MIN แบบ 2 arguments) อาจเป็น measure, ค่าคงที่ หรือ expression ที่คืนค่าเดียว ถ้าค่านี้เป็น BLANK ผลลัพธ์จะเป็น BLANK |

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

### หาค่าต่ำสุดในข้อมูลที่กรอง

หาราคาต่ำสุด วันที่เร็วที่สุด หรือค่าต่ำสุดของข้อมูลที่อยู่ในบริบทปัจจุบัน ใช้ใน measure และ visual

_เหมาะกับ:_ min-in-filter-context

### ตั้งเพดาน (cap) ให้ค่าคำนวณ

จำกัดค่า measure ไม่ให้สูงเกินค่าที่กำหนด เช่น discount rate ไม่เกิน 30% หรือ commission rate ไม่เกิน 15%

_เหมาะกับ:_ min-cap-value

### เปรียบเทียบสอง measure

เลือกค่าที่น้อยกว่าระหว่างสอง measure เช่น เปรียบเทียบ actual กับ budget แล้วเลือกค่าที่ต่ำกว่า

_เหมาะกับ:_ min-compare-measures

### หาวันที่เร็วที่สุด (earliest date)

หา first order date หรือ earliest transaction date ในช่วงที่กรอง ใช้กับ time intelligence analysis

_เหมาะกับ:_ min-earliest-date

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: หาราคาต่ำสุดของสินค้า (Basic)

```excel
Lowest Price = MIN(Products[Price])
```

**ผลลัพธ์:** `คืนราคาต่ำสุดของสินค้าทั้งหมดที่อยู่ใน filter context ปัจจุบัน`

นี่คือการใช้งาน MIN แบบพื้นฐานในรูปแบบ measure โดยระบุเฉพาะ column เดียว MIN จะหาค่าต่ำสุดจากคอลัมน์ Products[Price] ภายใต้ filter context ปัจจุบัน
.
ตัวอย่างเช่น ถ้ามี slicer กรองเฉพาะหมวด "Electronics" MIN จะคืนราคาต่ำสุดเฉพาะสินค้าในหมวดนั้น ไม่ใช่ราคาต่ำสุดของทั้งตาราง ซึ่งเป็นจุดเด่นของ aggregation function ที่ทำงานภายใต้ filter context
.
ค่า BLANK จะถูกข้ามไป และถ้าทุก row เป็น BLANK จะคืน BLANK ครับ

### 2. ตัวอย่างที่ 2: หาวันที่ order แรกของลูกค้า (Practical - Earliest Date)

```excel
First Order Date = MIN(Sales[OrderDate])
```

**ผลลัพธ์:** `คืนวันที่ order เร็วที่สุดของแต่ละลูกค้าใน visual`

เมื่อใช้ใน table visual ที่มี Customers[CustomerName] ใน row, measure นี้จะคืนวันที่ order แรกของแต่ละลูกค้า เพราะ filter context ของแต่ละ row ในตาราง visual จะกรองเฉพาะ order ของลูกค้าคนนั้น
.
สังเกตนะครับว่า MIN กับคอลัมน์วันที่จะคืนวันที่เร็วที่สุด (earliest date) เนื่องจากวันที่เก่าจะมีค่าน้อยกว่า ซึ่งอาจฟังดูสับสนนิดนึง แต่พอเข้าใจแล้วก็ใช้งานได้ง่ายมาก 😎
.
นี่เป็นวิธีหา first order date ที่ใช้บ่อยใน customer analysis และ time intelligence ครับ

### 3. ตัวอย่างที่ 3: ตั้งเพดานส่วนลดสูงสุด (Advanced - Cap Value with VAR)

```excel
Capped Discount Rate =
VAR ActualDiscount = DIVIDE(SUM(Sales[DiscountAmount]), SUM(Sales[SalesAmount]), 0)
RETURN
    MIN(ActualDiscount, 0.30)
```

**ผลลัพธ์:** `คืน discount rate จริง แต่ถ้าเกิน 30% จะคืน 0.30`

ใช้ VAR เพื่อคำนวณ discount rate จริงจาก Sales[DiscountAmount] หาร Sales[SalesAmount] ก่อน แล้วใช้ MIN แบบ 2 arguments เปรียบเทียบกับ 0.30 (30%)
.
ถ้า ActualDiscount มากกว่า 0.30 MIN จะคืน 0.30 (เพดาน) แต่ถ้าน้อยกว่าจะคืนค่าจริง ง่ายๆ เลยครับ
.
วิธีนี้ช่วยจำกัดค่าไม่ให้เกินเพดานที่กำหนด เหมาะกับการทำ data visualization ที่ต้องการ cap outliers หรือจำกัดช่วงค่าให้อยู่ในระดับที่เหมาะสม ส่วนตัวผมใช้เทคนิคนี้บ่อยมากเวลาทำ dashboard ที่มีค่าพุ่งสูงผิดปกติครับ 💡

### 4. ตัวอย่างที่ 4: เปรียบเทียบสอง measure แล้วเลือกค่าต่ำกว่า (Complex Real-World)

```excel
Lower of Budget vs Actual =
VAR TotalBudget = SUM(Budget[BudgetAmount])
VAR TotalActual = SUM(Sales[SalesAmount])
VAR LowerValue = MIN(TotalBudget, TotalActual)
RETURN
    LowerValue
```

**ผลลัพธ์:** `คืนค่าที่ต่ำกว่าระหว่าง budget กับ actual sales`

ใช้ VAR เก็บค่า TotalBudget จาก Budget table และ TotalActual จาก Sales table ไว้ก่อน จากนั้นใช้ MIN แบบ 2 arguments เปรียบเทียบสองค่านี้แล้วคืนค่าที่ต่ำกว่า
.
วิธีนี้มีประโยชน์ในการวิเคราดี์ว่าควรจัดสรร resource ตามค่าไหน บางครั้ง budget อาจต่ำกว่า actual ในกรณีที่ขายดีเกินคาด ซึ่งเราก็ต้องเลือกว่าจะใช้ค่าไหนเป็นฐานในการวางแผนต่อไป
.
การใช้ VAR ทำให้ formula อ่านง่ายและหลีกเลี่ยงการคำนวณซ้ำ ซึ่งช่วยเรื่อง performance ใน large dataset มากครับ โดยเฉพาะเมื่อ expression ซับซ้อน

### 5. ตัวอย่างที่ 5: Calculated Column - หาราคาต่ำสุดในหมวดเดียวกัน (with CALCULATE)

```excel
Min Price in Category =
CALCULATE(
    MIN(Products[Price]),
    ALLEXCEPT(Products, Products[Category])
)
```

**ผลลัพธ์:** `แต่ละ row แสดงราคาต่ำสุดในหมวดสินค้าเดียวกันกับ row นั้น`

ใช้ใน calculated column ของตาราง Products เพื่อเปรียบเทียบราคาสินค้าแต่ละตัวกับราคาต่ำสุดในหมวดเดียวกัน
.
ต้องใช้ CALCULATE เพื่อสร้าง filter context (เพราะ calculated column ทำงานใน row context โดยปกติ) และใช้ ALLEXCEPT เพื่อลบ filter ทุกคอลัมน์ยกเว้น Products[Category] ทำให้ MIN หาค่าต่ำสุดของทั้งหมวดหมู่
.
จากนั้นสามารถใช้ column นี้คำนวณว่าสินค้าแต่ละตัวแพงกว่าราคาต่ำสุดของหมวดเท่าไหร่ เหมาะกับการวิเคราะห์ pricing strategy ครับ เช่น ถ้าสินค้าตัวไหนแพงกว่าราคาต่ำสุดของหมวดมากเกินไป อาจต้องปรับกลยุทธ์

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

⚠️ **ข้อควรระวัง BLANK handling**: MIN จัดการ BLANK แตกต่างกันระหว่างรูปแบบ 1 argument (ข้ามไป) และ 2 arguments (ถือว่ามีนัยสำคัญ ทำให้ผลลัพธ์เป็น BLANK) ตาม DAX Guide
.
ความแตกต่างนี้อาจทำให้ได้ผลลัพธ์ที่ไม่คาดคิดถ้าไม่รู้พื้นฐาน เคยเจอบั๊กจากเรื่องนี้มาแล้วครับ 😅
.
💡 **Tip สำหรับวันที่**: เมื่อใช้ MIN กับวันที่ ค่าน้อยที่สุด = วันที่เร็วที่สุด (earliest date) ซึ่งอาจฟังดูสับสนนิดนึง แต่สอดคล้องกับระบบวันที่ของ DAX ครับ ตัวอย่างเช่น 1 มกราคม 2020 มีค่าน้อยกว่า 31 ธันวาคม 2024
.
🔍 **Performance Note**: MIN และ MINX มี performance เท่ากันเมื่อใช้กับ column เดียว เพราะ DAX engine optimize ภายใน ดังนั้นเลือกใช้ตามความเหมาะสมของ scenario มากกว่ากังวลเรื่อง performance นะครับ

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

**Q: MIN ต่างจาก MINX อย่างไร?**

MIN ใช้กับคอลัมน์ที่มีอยู่แล้ว หรือเปรียบเทียบสองค่า scalar ไม่มี row context แยก ส่วน MINX เป็น iterator function ที่วนลูปแต่ละ row ในตารางและประเมิน expression ต่อแถวก่อนหาค่าต่ำสุด
.
ใช้ MIN เมื่อต้องการหาค่าต่ำสุดของคอลัมน์โดยตรง เช่น MIN(Products[Price]) และใช้ MINX เมื่อต้องคำนวณค่าต่อแถวก่อน เช่น MINX(Sales, Sales[Quantity] * Sales[UnitPrice]) เพื่อหา line total ต่ำสุด
.
ที่น่าสนใจคือ ตาม DAX Guide เมื่อใช้ MIN กับ column เดียว DAX engine จะ optimize เป็น MINX ภายในโดยอัตโนมัติ โดยไม่มีความแตกต่างด้าน performance ครับ

**Q: MIN จัดการค่า BLANK อย่างไร?**

การจัดการ BLANK แตกต่างตามรูปแบบการใช้งาน:
.
(1) MIN แบบ 1 argument (column) จะข้าม BLANK ไปและหาค่าต่ำสุดจากค่าที่ไม่ใช่ BLANK ถ้าทุกแถวเป็น BLANK จะคืน BLANK
.
(2) MIN แบบ 2 arguments (scalar comparison) มีความซับซ้อนมากกว่า โดย Microsoft Learn ระบุว่า BLANK ถูกปฏิบัติเหมือน 0 แต่ DAX Guide ระบุว่า MIN ถือว่า BLANK เป็นค่าที่มีนัยสำคัญ (significative) และถ้าอย่างน้อย 1 argument เป็น BLANK ผลลัพธ์จะเป็น BLANK
.
ตัวอย่างเช่น MIN(2, BLANK()) คืน BLANK แต่ถ้าทั้งสองค่าเป็น BLANK จะคืน BLANK เช่นกัน ⚠️ ข้อควรระวังคือพื้นฐานนี้อาจส่งผลต่อ formula ที่ไม่คาดคิดนะครับ

**Q: MIN ใช้กับข้อความได้ไหม?**

ได้ครับ MIN รองรับการเปรียบเทียบข้อความตามลำดับตัวอักษร (alphabetical order) เช่น MIN(Products[ProductName]) จะคืนชื่อสินค้าที่เรียงตามตัวอักษรลำดับแรก ("A" มาก่อน "Z") และตัวพิมพ์เล็กน้อยกว่าตัวพิมพ์ใหญ่ในบางกรณี
.
แต่... ในทางปฏิบัติการใช้ MIN กับข้อความมักไม่มีความหมายทางธุรกิจมากนักนะครับ ส่วนใหญ่ใช้กับตัวเลขและวันที่ เนื่องจากการหา "ชื่อแรกสุด" ตามตัวอักษรมักไม่ได้ให้ insight ที่มีค่า

**Q: MIN ทำงานใน calculated column และ measure ต่างกันอย่างไร?**

ใน calculated column, MIN ทำงานใน row context โดยปกติ ต้องใช้ CALCULATE เพื่อสร้าง filter context ถ้าต้องการหาค่าต่ำสุดของกลุ่ม เช่น CALCULATE(MIN(Products[Price]), ALLEXCEPT(Products, Products[Category]))
.
ส่วนใน measure, MIN ทำงานใน filter context โดยตรง และจะหาค่าต่ำสุดของแถวที่ผ่าน filter ปัจจุบัน
.
ส่วนใหญ่แล้ว MIN มักใช้ใน measure เพราะเหมาะกับการวิเคราะห์ค่าต่ำสุดใน visual ที่มี filter context จาก slicer หรือ visual filter ครับ

**Q: สามารถใช้ MIN เพื่อหาวันที่เร็วที่สุด (earliest date) ได้ไหม?**

ได้ครับ MIN รองรับ date column และจะคืนวันที่เร็วที่สุด (วันที่ที่มีค่าน้อยที่สุด) เนื่องจากวันที่เก่าจะมีค่าน้อยกว่าวันที่ใหม่ในระบบวันที่ของ DAX
.
ตัวอย่างเช่น MIN(Sales[OrderDate]) จะคืนวันที่ order แรก และ MIN(Sales[ShipDate]) จะคืนวันที่ ship เร็วที่สุด
.
นี่เป็นวิธีหา first order date หรือ earliest transaction date ที่ใช้บ่อยมากใน time intelligence analysis และ customer lifetime value calculation ครับ

**Q: MIN มี performance ดีกว่า MINX ไหม?**

โดยทั่วไป MIN มี performance ดีกว่า MINX เพราะไม่ต้อง iterate แต่ละ row แยก
.
แต่... ตาม DAX Guide ระบุว่าเมื่อใช้ MIN กับ column เดียว DAX engine จะ optimize เป็น MINX ภายในโดยอัตโนมัติโดยไม่มีความแตกต่างด้าน performance เลยนะครับ
.
ดังนั้นถ้าต้องการหาค่าต่ำสุดของคอลัมน์โดยตรงใช้ MIN ได้เลย (เพราะอ่านง่ายกว่า) แต่ถ้าต้องคำนวณ expression ต่อแถวก่อนหาค่าต่ำสุดจำเป็นต้องใช้ MINX ครับ

**Q: ใช้ MIN ตั้งเพดาน (cap) ค่าคำนวณได้อย่างไร?**

ใช้ MIN แบบ 2 arguments โดยเปรียบเทียบค่าจริงกับค่าเพดาน เช่น MIN([ActualValue], 100) จะคืนค่าจริงถ้าน้อยกว่า 100 หรือคืน 100 ถ้าค่าจริงมากกว่า
.
วิธีนี้เหมาะกับการจำกัดค่าไม่ให้เกินเพดาน เช่น:
• discount rate ไม่เกิน 30%: MIN([DiscountRate], 0.30)
• commission rate ไม่เกิน 15%: MIN([CommissionRate], 0.15)
.
ช่วยทำ data visualization ที่มี outliers ให้อยู่ในช่วงที่เหมาะสม และป้องกันค่าที่ผิดปกติจากการ skew การวิเคราะห์ครับ ส่วนตัวผมใช้บ่อยมากเวลาทำ dashboard นะ 💡

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

- [MAX – หาค่าสูงสุดในคอลัมน์หรือเปรียบเทียบสองค่า](https://www.thepexcel.com/functions/dax/aggregation/max-dax/)
- [MINX – หาค่าน้อยที่สุดจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/minx-dax/)
- [MINA – ค่าน้อยสุด (นับ TRUE/ข้อความ/ตัวเลข) ใน DAX](https://www.thepexcel.com/functions/dax/aggregation/mina-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [DIVIDE – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/math-and-trig/divide-dax/)
- [ALLEXCEPT – ล้างตัวกรองทั้งหมดยกเว้นคอลัมน์ที่ระบุ](https://www.thepexcel.com/functions/dax/filter/allexcept-dax/)
- [MAXX – หาค่ามากที่สุดจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/maxx-dax/)
- [AVERAGE – คำนวณค่าเฉลี่ยเลขคณิตจากคอลัมน์ตัวเลข](https://www.thepexcel.com/functions/dax/aggregation/average-dax/)
- [SUM – รวมค่าตัวเลขจากคอลัมน์ (DAX)](https://www.thepexcel.com/functions/dax/aggregation/sum-dax/)

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

- [Microsoft Learn: MIN Function (DAX)](https://learn.microsoft.com/en-us/dax/min-function-dax) _(documentation)_
- [DAX Guide: MIN](https://dax.guide/min/) _(documentation)_
- [SQLBI: Understanding Context Transition in DAX](https://www.sqlbi.com/articles/understanding-context-transition-in-dax/) _(article)_

---

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