| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| [orderBy_expression]ไม่บังคับ | scalar expression | (ว่าง) | นิพจน์หรือคอลัมน์ที่ใช้เป็นเกณฑ์เรียงลำดับ เช่น Sales[OrderDate], Measure[Total Sales] สามารถมีหลายตัวได้ (คีย์หลัก รองลำดับ ลำดับสาม ฯลฯ) |
| [order]ไม่บังคับ | two-part value | ASC (BLANKS DEFAULT) | ทิศทางการเรียง + การจัดการค่าว่าง ตัวอย่าง: ASC, DESC, ASC BLANKS FIRST, DESC BLANKS LAST เป็นต้น |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
ORDERBY เป็นฟังก์ชันที่ใช้ “เดี่ยว” ในกลุ่ม Window Functions เท่านั้น โดยทำหน้าที่บอก INDEX, OFFSET, WINDOW, และ MATCHBY ว่า “เรียงลำดับแถวตามอันไหนก่อน” ใช้ได้หลายคีย์ และสามารถควบคุมทิศทาง (ASC/DESC) รวมถึงจัดการค่าว่างได้ (BLANKS FIRST/DEFAULT/LAST)
ที่เจ๋งคือ ORDERBY มีพลัง BLANK HANDLING ที่ละเอียด สำหรับตัวเลขแล้ว DEFAULT วางค่าว่างระหว่างศูนย์กับลบ แต่สำหรับข้อความแล้ว DEFAULT วางค่าว่างก่อนสตริงทั้งหมด และ BLANKS FIRST/LAST บังคับให้ค่าว่างอยู่ที่ตำแหน่งระบุ ไม่ว่าจะเรียงขึ้นหรือลงก็ตาม
ส่วนตัวผมถือว่า ORDERBY คือ “กระดูกสันหลัง” ของ window functions ถ้าคุณไม่ระบุ ORDERBY หรือ ORDERBY ลำดับไม่ชัดเจน ผลลัพธ์จะลอยไปมาหรือไม่คาดการณ์ได้ ผมแนะนำให้ ORDERBY มีคีย์เพียงพอทำให้แถวแต่ละแถวมีลำดับไม่กำกวม
ใช้ ORDERBY กับ OFFSET เพื่อเลื่อนตำแหน่งตามลำดับที่กำหนด
ใช้ ORDERBY กับ INDEX เพื่อดึงตำแหน่งคงที่ตามลำดับ
ORDERBY DESC เรียงลำดับจากมากไปน้อยตามยอดขาย แล้ว OFFSET(-1) เลื่อนขึ้นไปแถวถัดไป ถ้าแถวปัจจุบันเป็นอันดับ 1 ก็ได้อันดับ 2
INDEX(1, …, ORDERBY(…, DESC)) เลือกแถวลำดับที่ 1 จากตารางที่เรียงยอดขายจากมากไปน้อย
ORDERBY คีย์แรก (Date ASC) หลักกว่า แต่เมื่อวันที่ซ้ำแล้วค่อยมองไปยัง ORDERBY คีย์รอง (OrderID DESC) นี่ทำให้ลำดับไม่กำกวมแม้มีค่าซ้ำ
BLANKS LAST บังคับให้ค่าว่างอยู่ท้ายสุดไม่ว่า DESC/ASC ตรงข้ามกับ BLANKS DEFAULT ที่วางแตกต่างตามประเภทข้อมูล
ไม่ได้ครับ ORDERBY ไม่คืนค่า มันเป็น "ส่วนประกอบ" ของ window functions เท่านั้น ถ้าคุณพยายามใช้ ORDERBY เดี่ยว DAX จะขึ้น error ว่า "This function can only be used within a window function expression" ORDERBY ต้องอยู่ภายใน INDEX, OFFSET, WINDOW, MATCHBY, PARTITIONBY เท่านั้น
สำหรับ **ตัวเลข** แล้ว BLANKS DEFAULT วางค่าว่างระหว่างศูนย์กับลบ (ASC: -5, -3, [blank], 0, 2, 5 | DESC: 5, 2, 0, [blank], -3, -5) แต่ BLANKS FIRST บังคับค่าว่างอยู่หน้าสุดเสมอ (ASC: [blank], -5, -3, 0, 2, 5 | DESC: [blank], 5, 2, 0, -3, -5) สำหรับ **ข้อความ** แล้ว BLANKS DEFAULT วางค่าว่างก่อนสตริงทั้งหมด ซึ่งเหมือน BLANKS FIRST
เพิ่มคีย์รอง (secondary key) ใน ORDERBY เพื่อให้แถวแต่ละแถวมีลำดับไม่กำกวม เช่นถ้า ORDERBY(Amount, DESC) มี Amount ซ้ำจำนวนมาก ให้เพิ่ม ORDERBY(Amount, DESC, Date, ASC) หรือใช้ MATCHBY ระบุคีย์ที่ unique (ตัวตนที่ไม่ซ้ำ) เพื่อให้ DAX รู้ว่าแถวไหนคือแถวไหน
ไม่บังคับ แต่ถ้าไม่ใส่ ORDERBY แล้ว index หรือ offset อาจให้ผลลัพธ์ที่ไม่คาดการณ์หรือลอยไปมา เพราะแถวไม่มีลำดับที่กำหนด ผมแนะนำให้ใส่ ORDERBY เพื่อให้ผลลัพธ์นิ่งขึ้น
ฟังก์ชันที่ผู้เขียนโยงไว้กับ ORDERBY จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
INDEX ดึงแถวจากตำแหน่งที่ระบุ (Position) ภายในกลุ่มข้อมูลที่เรียงแล้ว โดยสามารถใช้ ORDERBY และ PARTITIONBY เพื่อควบคุมลำดับและการแบ่งกลุ่ม เหมาะสำหรับงาน window function เช่นดึงค่าอันดับที่ N
LOOKUP ค้นหาและดึงค่าจากเมทริกซ์ภาพ (visual matrix) ในการคำนวณภาพโดยการระบุเงื่อนไขการกรอง ใช้เฉพาะในการคำนวณภาพเท่านั้น
MATCHBY ระบุคอลัมน์ที่ใช้จับคู่และระบุแถวปัจจุบันใน window functions เพื่อให้การเลื่อน/เลือกตำแหน่งแถวทำงานถูกต้องเมื่อมีค่า ORDERBY ซ้ำ หรือเมื่อจำเป็นต้องกำหนดเอกลักษณ์ของแถว
PARTITIONBY ระบุคอลัมน์ที่ใช้แบ่งกลุ่มสำหรับ window functions เพื่อให้การเลื่อน/เลือกตำแหน่งเกิดขึ้น “ภายในกลุ่ม” ตามที่กำหนด มักใช้ร่วมกับ ORDERBY และ MATCHBY
WINDOW ดึงช่วงแถวภายในพาร์ทิชัน คืนค่าเป็นตาราง เหมาะกับการคำนวณแบบช่วง เช่น moving average, running sum, หรือ lead/lag analysis
MOVINGAVERAGE คำนวณค่าเฉลี่ยเคลื่อนที่ (moving average) บนแกนของ Visual Calculations ในตารางข้อมูล เหมาะสำหรับทำเส้นแนวโน้มที่เรียบขึ้นและลดความผันผวนของข้อมูล
RUNNINGSUM คำนวณยอดสะสมของคอลัมน์/นิพจน์ตามลำดับบนแกนของ Visual Calculations โดยสามารถกำหนด Axis, OrderBy, Blanks และ Reset เพื่อควบคุมลำดับและจุดเริ่มสะสม
ดึงแถวจากตารางโดยข้ามจำนวนแถวที่กำหนดก่อน แล้วคืนแถวถัดไปตามการเรียงลำดับที่ระบุ มีประสิทธิภาพสูงสำหรับงาน pagination
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่