MINX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่น้อยที่สุด ต่างจาก MIN ที่ใช้กับคอลัมน์โดยตรง MINX เหมาะกับการหาค่าต่ำสุดจากค่าที่คำนวณต่อแถว เช่น (Quantity × UnitPrice)
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| table | table | ตาราง (หรือผลลัพธ์ตาราง) ที่ต้องการไล่ทีละแถว เช่น Sales, Transactions หรือผลลัพธ์จาก FILTER | |
| expression | scalar | นิพจน์ที่ต้องการประเมินในแต่ละแถว ต้องได้ผลเป็นค่าสเกลาร์ (ตัวเลข วันที่ ข้อความ) เพื่อเปรียบเทียบและหาค่าต่ำสุด | |
| [variant]ไม่บังคับ | boolean | FALSE | ถ้าเป็น TRUE จะเปรียบเทียบค่าโดยไม่สนใจชนิดข้อมูลและคืนค่าต่ำสุดตามลำดับตัวอักษร/ตัวเลข (ORDER BY ASC) เมื่อมีชนิดข้อมูลผสม เช่น ข้อความกับตัวเลข ค่า Default คือ FALSE ซึ่งเปรียบเทียบเฉพาะตัวเลข |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
MINX เป็นฟังก์ชัน Iterator ที่ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วคืนค่าสเกลาร์ที่น้อยที่สุดจากผลลัพธ์ทั้งหมด ต่างจาก MIN ที่ทำงานบนคอลัมน์เดี่ยวในฟิลเตอร์คอนเท็กซ์ MINX สร้างแถวคอนเท็กซ์เพื่อประเมินนิพจน์ซับซ้อน
ที่เจ๋งคือ MINX ช่วยเวลาค่าที่ต้องการหาต่ำสุดไม่ได้อยู่ในคอลัมน์ตรง ๆ แต่เป็นค่าที่ต้องคำนวณต่อแถว เช่น จำนวน * ราคาต่อหน่วย หรือคะแนนรวมจากหลายคอลัมน์ มันเหมือนการสอบถาม “ยอดการซื้อต่ำสุดของลูกค้าแต่ละราย” – ข้อมูลนั้นไม่ได้อยู่ในตารางอยู่แล้ว ต้องคำนวณ
ส่วนตัวผมแนะนำให้ใช้ MINX เมื่อต้องการหาค่าต่ำสุดของนิพจน์ที่คำนวณ แต่ต้องจำไว้ว่าเนื่องจากเป็น Iterator (ประเมินทีละแถว) ตารางที่ใหญ่มากอาจช้า ถ้าเป็นคอลัมน์เดี่ยวให้ใช้ MIN จะเร็วกว่า 😎
เช่น ยอดต่อบรรทัด = จำนวน * ราคาต่อหน่วย แล้วหาแถวที่ต่ำสุด
เช่น คะแนนรวม = คะแนน1 + คะแนน2 แล้วหาค่าต่ำสุด
MINX คำนวณ Quantity × UnitPrice สำหรับทุกแถวใน Sales Table แล้วส่งคืนค่าที่น้อยที่สุด ลูกค้าบางคนอาจซื้อเพียงชิ้นเดียวจากสินค้าราคาถูก ตรงนี้แหละ MINX มีประโยชน์มากครับ 💡
แม้จะให้ expression เป็นคอลัมน์ตรง ๆ ก็ได้ (แต่ MIN จะเร็วกว่า) การใช้ MINX ในแบบนี้มีประโยชน์ในโครงสร้างขนาดใหญ่เพราะว่า สามารถเปลี่ยนเป็นนิพจน์ที่ซับซ้อนได้ง่าย เช่น MINX(Sales, Sales[DiscountPct] * Sales[Amount]) โดยไม่ต้องเขียนใหม่ทั้งหมด
MINX ประเมินการบวกคะแนนทั้งสามวิชาของทุกคนในตาราง ส่วนตัวผมใช้แบบนี้บ่อยตอนต้องการดูว่าใครมีผลการเรียนด้อยที่สุด ✨
เมื่อต้องการหาค่าต่ำสุดจากข้อมูลที่ filtered ให้ใช้ FILTER ร่วมกับ MINX เหมือนในตัวอย่างนี้ ช่วยให้เราหลีกเลี่ยงการคำนวณทั้งคอลัมน์โดยไม่จำเป็น
MINX ทำงานในแถวคอนเท็กซ์ (Row Context) ซึ่งช่วยให้ RELATED ทำงานได้ เราจึงสามารถหาค่าต่ำสุดจากตารางที่เกี่ยวข้อง (Related Table) ได้ โดยไม่ต้อง CALCULATE หรือ Filter
ใช้ 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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
AVERAGEX เป็น Iterator Function ที่วนลูปตารางทีละแถว คำนวณ Expression แล้วนำผลลัพธ์มาหาค่าเฉลี่ย เหมาะสำหรับกรณีที่ต้องการเฉลี่ยค่าที่คำนวณได้ เช่น ราคา×จำนวน หรือค่าเฉลี่ยของ Measure ในแต่ละกลุ่ม
MAX คืนค่าสูงสุดจากคอลัมน์ภายใต้ filter context หรือเปรียบเทียบสองค่าสเกลาร์แล้วเลือกค่าที่มากกว่า ทำงานกับ numeric, date และ text columns โดย scan ทุก row ที่ผ่าน filter แล้วเลือกค่าสูงสุด เหมาะสำหรับ measures และ calculated columns (ต้อง wrap ด้วย CALCULATE)
MAXA คืนค่ามากสุดโดยตีความ TRUE=1, FALSE/BLANK=0 และข้ามข้อความที่ไม่ใช่ตัวเลข ใช้กับคอลัมน์ที่มีทั้งตัวเลขและค่าตรรกะเพื่อประเมินค่ามากสุดอย่างสอดคล้อง
MAXX ประเมินนิพจน์สำหรับทุกแถวของตาราง แล้วคืนค่าที่มากที่สุด เหมาะกับการหาค่าสูงสุดจากค่าที่คำนวณต่อแถว ไม่ใช่แค่การสรุปคอลัมน์โดยตรง
MIN คืนค่าน้อยที่สุดจากคอลัมน์ภายใต้ filter context ปัจจุบัน หรือเปรียบเทียบสองค่า scalar expression แล้วคืนค่าที่น้อยกว่า รองรับตัวเลข วันที่ และข้อความ ทำงานภายใต้ filter context ทำให้ค่าที่หาได้จะถูกกรองตาม slicer หรือ visual filter อัตโนมัติ เหมาะกับการหาราคาต่ำสุด วันที่เร็วที่สุด หรือการตั้งเพดาน (cap) ให้กับค่าคำนวณ
MINA คืนค่าน้อยสุดโดยพิจารณา TRUE เป็น 1, FALSE/BLANK เป็น 0 และข้ามข้อความที่ไม่ใช่ตัวเลข ใช้กับคอลัมน์ที่มีตัวเลขและค่าตรรกะปนกันเพื่อหาค่าน้อยสุดอย่างมีบริบท
STARTOFMONTH คืนวันแรกของเดือนเป็นตาราง 1 แถว ใช้กับการวัดที่ขึ้นต่อจุดเวลา เช่น ยอดคงเหลือ บัญชี หรือสินค้าคงคลัง
STARTOFYEAR คืนตาราง 1 แถวที่มีวันที่วันแรกของปีในบริบทปัจจุบัน ใช้สำหรับ semi-additive measure เช่น inventory balance หรือเปรียบเทียบ year-to-date
CURRENTGROUP คืนตารางย่อยของกลุ่มปัจจุบันและใช้ได้เฉพาะภายใน GROUPBY ช่วยให้คำนวณค่าที่อิงแถวภายในกลุ่มได้ เช่น SUMX/COUNTROWS/ MAXX ของกลุ่มนั้น
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่