MINX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่น้อยที่สุด ต่างจาก MIN ที่ใช้กับคอลัมน์โดยตรง MINX เหมาะกับการหาค่าต่ำสุดจากค่าที่คำนวณต่อแถว เช่น (Quantity × UnitPrice)
=MINX(<table>, <expression>, [<variant>])
=MINX(<table>, <expression>, [<variant>])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตาราง (หรือผลลัพธ์ตาราง) ที่ต้องการไล่ทีละแถว เช่น Sales, Transactions หรือผลลัพธ์จาก FILTER | |
| expression | scalar | Yes | นิพจน์ที่ต้องการประเมินในแต่ละแถว ต้องได้ผลเป็นค่าสเกลาร์ (ตัวเลข วันที่ ข้อความ) เพื่อเปรียบเทียบและหาค่าต่ำสุด | |
| variant | boolean | Optional | FALSE | ถ้าเป็น TRUE จะเปรียบเทียบค่าโดยไม่สนใจชนิดข้อมูลและคืนค่าต่ำสุดตามลำดับตัวอักษร/ตัวเลข (ORDER BY ASC) เมื่อมีชนิดข้อมูลผสม เช่น ข้อความกับตัวเลข ค่า Default คือ FALSE ซึ่งเปรียบเทียบเฉพาะตัวเลข |
เช่น ยอดต่อบรรทัด = จำนวน * ราคาต่อหน่วย แล้วหาแถวที่ต่ำสุด
เช่น คะแนนรวม = คะแนน1 + คะแนน2 แล้วหาค่าต่ำสุด
Minimum Line Amount = MINX( Sales, Sales[Quantity] * Sales[UnitPrice] )Minimum Line Amount =
MINX(
Sales,
Sales[Quantity] * Sales[UnitPrice]
)
12.50 (หากเป็นยอดต่อบรรทัดที่น้อยที่สุดในตาราง)
Minimum Discount % = MINX( Sales, Sales[DiscountPct] )Minimum Discount % =
MINX(
Sales,
Sales[DiscountPct]
)
0% (หรือค่าเปอร์เซ็นต์ส่วนลดต่ำสุดในข้อมูล)
Min Total Score = MINX( StudentScores, StudentScores[Math] + StudentScores[English] + StudentScores[Science] )Min Total Score =
MINX(
StudentScores,
StudentScores[Math] + StudentScores[English] + StudentScores[Science]
)
45 (สมมติว่านี่คือคะแนนรวมต่ำสุดของนักเรียน)
Min Product Price in Category = MINX( FILTER( Products, Products[Category] = "Electronics" ), Products[UnitPrice] )Min Product Price in Category =
MINX(
FILTER(
Products,
Products[Category] = "Electronics"
),
Products[UnitPrice]
)
99.99 (ราคาต่ำสุดของสินค้าในหมวด Electronics)
Min Product Cost = MINX( Sales, RELATED(Products[Cost]) )Min Product Cost =
MINX(
Sales,
RELATED(Products[Cost])
)
5.50 (ต้นทุนต่ำสุดของสินค้าที่ขายได้)
ใช้ MIN เมื่อค่าที่ต้องหาต่ำสุดอยู่ในคอลัมน์เดี่ยว เช่น MIN(Sales[Price]) แต่ใช้ MINX เมื่อต้องคำนวณก่อน เช่น MINX(Sales, Sales[Qty] * Sales[Price]) ส่วนตัวผมมักใช้ MINX เพื่อให้โค้ดอ่านชัดเจนว่า ‘ทีละแถว’ ครับ
MINX หาค่าน้อยที่สุด ส่วน MAXX หาค่ามากที่สุด ความเหมือนกันคือทั้งคู่เป็น Iterator ที่ประเมินนิพจน์ต่อแถว ถ้าต้องการเปรียบเทียบกับตัวเลขสูงสุดก็ใช้ MAXX ได้เลย
MINX จะคืนค่า BLANK (ว่าง) ถ้าตารางไม่มีแถวเลย ส่วนถ้ามีแถวแต่ expression คำนวณได้ BLANK ก็จะข้ามไปหาค่าถัดไป (BLANK จะถูกข้ามเสมอ)
ได้ครับ MINX ทำงานแบบ Row Context ซึ่งเหมาะสำหรับ RELATED() ตัวอย่างเช่น MINX(Sales, RELATED(Products[Price])) ก็สามารถใช้ได้เลย
ได้ครับ แต่ข้อความจะเปรียบเทียบตามลำดับตัวอักษร (Alphabetical Order) ถ้าต้องการจัดการข้อมูล Mixed Type ให้ใช้ variant = TRUE
MINX สามารถใช้ในเมจเชอร์ (Measures) ได้ แต่ไม่สามารถใช้ในคำนวณคอลัมน์ (Calculated Columns) หรือ RLS Rules หากเป็น DirectQuery mode ตัวอื่น ๆ ใช้ได้ปกติครับ
เพราะ MINX เป็น Iterator – มันประเมินนิพจน์ทีละแถว ถ้ามีแถวจำนวนมาก (หลักแสน) มันจะช้า ใช้ MIN (ฟังก์ชันอัตโนมัติ) เมื่อเป็นคอลัมน์เดี่ยว หรือลอง VAR + FILTER เพื่อลดจำนวนแถวก่อน
MINX เป็นฟังก์ชัน Iterator ที่ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วคืนค่าสเกลาร์ที่น้อยที่สุดจากผลลัพธ์ทั้งหมด ต่างจาก MIN ที่ทำงานบนคอลัมน์เดี่ยวในฟิลเตอร์คอนเท็กซ์ MINX สร้างแถวคอนเท็กซ์เพื่อประเมินนิพจน์ซับซ้อน
ที่เจ๋งคือ MINX ช่วยเวลาค่าที่ต้องการหาต่ำสุดไม่ได้อยู่ในคอลัมน์ตรง ๆ แต่เป็นค่าที่ต้องคำนวณต่อแถว เช่น จำนวน * ราคาต่อหน่วย หรือคะแนนรวมจากหลายคอลัมน์ มันเหมือนการสอบถาม “ยอดการซื้อต่ำสุดของลูกค้าแต่ละราย” – ข้อมูลนั้นไม่ได้อยู่ในตารางอยู่แล้ว ต้องคำนวณ
ส่วนตัวผมแนะนำให้ใช้ MINX เมื่อต้องการหาค่าต่ำสุดของนิพจน์ที่คำนวณ แต่ต้องจำไว้ว่าเนื่องจากเป็น Iterator (ประเมินทีละแถว) ตารางที่ใหญ่มากอาจช้า ถ้าเป็นคอลัมน์เดี่ยวให้ใช้ MIN จะเร็วกว่า 😎