Thep Excel

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

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

=MIN(<column>)

By ThepExcel AI Agent
18 December 2025

Function Metrics


Popularity
9/10

Difficulty
2/10

Usefulness
9/10

Syntax & Arguments

=MIN(<column>)

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

How it works

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

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

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

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

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

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

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

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

Examples

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

Lowest Price = MIN(Products[Price])

Result:

คืนราคาต่ำสุดของสินค้าทั้งหมดที่อยู่ใน filter context ปัจจุบัน

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

First Order Date = MIN(Sales[OrderDate])

Result:

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

ตัวอย่างที่ 3: ตั้งเพดานส่วนลดสูงสุด (Advanced – Cap Value with VAR)
Capped Discount Rate = VAR ActualDiscount = DIVIDE(SUM(Sales[DiscountAmount]), SUM(Sales[SalesAmount]), 0) RETURN MIN(ActualDiscount, 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 ที่มีค่าพุ่งสูงผิดปกติครับ 💡
DAX Formula:

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

Result:

คืน discount rate จริง แต่ถ้าเกิน 30% จะคืน 0.30

ตัวอย่างที่ 4: เปรียบเทียบสอง measure แล้วเลือกค่าต่ำกว่า (Complex Real-World)
Lower of Budget vs Actual = VAR TotalBudget = SUM(Budget[BudgetAmount]) VAR TotalActual = SUM(Sales[SalesAmount]) VAR LowerValue = MIN(TotalBudget, TotalActual)…
ใช้ VAR เก็บค่า TotalBudget จาก Budget table และ TotalActual จาก Sales table ไว้ก่อน จากนั้นใช้ MIN แบบ 2 arguments เปรียบเทียบสองค่านี้แล้วคืนค่าที่ต่ำกว่า
.
วิธีนี้มีประโยชน์ในการวิเคราดี์ว่าควรจัดสรร resource ตามค่าไหน บางครั้ง budget อาจต่ำกว่า actual ในกรณีที่ขายดีเกินคาด ซึ่งเราก็ต้องเลือกว่าจะใช้ค่าไหนเป็นฐานในการวางแผนต่อไป
.
การใช้ VAR ทำให้ formula อ่านง่ายและหลีกเลี่ยงการคำนวณซ้ำ ซึ่งช่วยเรื่อง performance ใน large dataset มากครับ โดยเฉพาะเมื่อ expression ซับซ้อน
DAX Formula:

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

Result:

คืนค่าที่ต่ำกว่าระหว่าง budget กับ actual sales

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

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

Result:

แต่ละ row แสดงราคาต่ำสุดในหมวดสินค้าเดียวกันกับ row นั้น

FAQs

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 ครับ

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 ที่ไม่คาดคิดนะครับ

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

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

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 ครับ

สามารถใช้ 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 ครับ

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

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

ใช้ 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 นะ 💡

Resources & Related

Additional Notes

MIN เป็น aggregation function ที่คืนค่าน้อยที่สุดจากคอลัมน์ภายใต้ filter context ปัจจุบัน หรือเปรียบเทียบสองค่า scalar expression แล้วคืนค่าที่น้อยกว่า

.

รองรับข้อมูลประเภทตัวเลข วันที่ และข้อความ (เรียงตามลำดับตัวอักษร) ใช้บ่อยในการหาค่าต่ำสุด เช่น ราคาต่ำสุด วันที่เร็วที่สุด หรือการตั้งเพดาน (cap) ให้กับค่าคำนวณ

.

MIN ทำงานภายใต้ filter context ใน measure และสามารถ evaluate ได้ทั้งใน calculated column, calculated table และ measure ครับ 💡

การทำงานภายใต้ Filter Context

MIN ทำงานภายใต้ filter context ปัจจุบัน หมายความว่าค่าที่หาได้จะถูกกรองตาม slicer, visual filter หรือ CALCULATE function ตัวอย่างเช่น ถ้ากรองเฉพาะสินค้าหมวด “Electronics” ค่า MIN จะหาราคาต่ำสุดเฉพาะสินค้าในหมวดนั้น ไม่ใช่ราคาต่ำสุดของทั้งตาราง ใน measure นี้เป็นพื้นฐานการทำงานที่สำคัญที่สุด

การจัดการค่า BLANK

MIN จัดการค่า BLANK แตกต่างกันขึ้นกับรูปแบบการใช้งาน:

  • รูปแบบ 1 argument (column): ข้ามค่า BLANK ไปและหาค่าต่ำสุดจากค่าที่ไม่ใช่ BLANK ถ้าทุก row เป็น BLANK จะคืน BLANK
  • รูปแบบ 2 arguments (scalar comparison): ตาม Microsoft Learn, BLANK ถูกปฏิบัติเหมือน 0 เมื่อเปรียบเทียบ เช่น MIN(1, BLANK()) คืนค่า 0 และ MIN(-1, BLANK()) คืนค่า -1 แต่ถ้าทั้งสองค่าเป็น BLANK จะคืน BLANK โดยตรง

⚠️ ข้อควรระวัง: DAX Guide ระบุว่า MIN แบบ 2 arguments “ถือว่า BLANK เป็นค่าที่มีนัยสำคัญ” (considers BLANK as significative) ซึ่งหมายความว่าถ้าอย่างน้อย 1 argument เป็น BLANK ผลลัพธ์จะเป็น BLANK ตัวอย่างจาก DAX Guide: MIN(2, BLANK()) คืนค่า BLANK ในขณะที่ MINX({2, BLANK()}, [Value]) คืนค่า 2 ความแตกต่างนี้สำคัญมากเมื่อเปรียบเทียบ MIN กับ MINX

MIN vs MINX

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

การเปรียบเทียบข้อความ

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

Leave a Reply

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