คืนตาราง Top N แถวจากตารางที่กำหนด โดยเรียงตามนิพจน์หนึ่งตัวหรือมากกว่า สามารถระบุทิศทางการเรียงลำดับแยกต่างหากสำหรับแต่ละเกณฑ์
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| N_Value | Integer | จำนวนแถวที่ต้องการคืน (scalar value) ถ้าเกินจำนวนแถวจริงจะคืนเท่าที่มี ถ้าค่านี้ ≤ 0 จะคืนตารางว่าง | |
| Table | Table | ตารางต้นทางที่ต้องการเลือก Top N (อาจเป็นผลจาก VALUES, SUMMARIZE, หรือตารางในโมเดล) | |
| [OrderBy_Expression]ไม่บังคับ | Expression | หากไม่ระบุ TOPN จะไม่เรียงลำดับ | นิพจน์สำหรับจัดลำดับแถว (ประเมินในrow context ของตาราง) สามารถระบุได้หลายตัวเพื่อทำ secondary/tertiary sort |
| [Order]ไม่บังคับ | Integer or Boolean | 0 (DESC) | ทิศทางการเรียง: 0 หรือ FALSE = DESC (มากไปน้อย), 1 หรือ TRUE = ASC (น้อยไปมาก). ต้องระบุหลังจากแต่ละ OrderBy_Expression |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
TOPN คืนตารางที่มีแถว “บนสุด N แถว” จากตารางที่กำหนด โดยพิจารณาจากนิพจน์สำหรับจัดลำดับ (เช่น ยอดขายมากไปน้อย) ใช้บ่อยสำหรับทำ Top Customers/Top Products, ทำตารางจัดอันดับ หรือเตรียมชุดแถวไปใช้เป็นตารางตัวกรองใน CALCULATE
ส่วนตัวผม ชอบใช้ TOPN เพราะมันคืนค่าเป็นตาราง ซึ่งสามารถส่งต่อไปยัง CALCULATE ได้เลย บอกได้เลยว่า มันคือวิธีที่ดีที่สุดสำหรับการทำ “Top N dynamic filtering” อยู่ 😎
เรื่องที่ต้องระวัง: ถ้าค่าที่เรียงลำดับมี “ความเสมอ” (เช่น ยอดขายเท่ากัน) TOPN จะคืนแถวทั้งหมดที่มีค่าเท่ากัน จึงอาจได้มากกว่า N แถว เสมอให้เพิ่ม secondary sort เพื่อให้ลำดับแน่นอน
เลือกเฉพาะ N รายการที่มีค่ามากที่สุดตามเมเชอร์ เช่น ยอดขาย/กำไร
ส่งตาราง Top N เข้าไปเป็นตัวกรองเพื่อคำนวณยอดรวมเฉพาะ Top N
TOPN(5,…) ขอแถว 5 แถว ลำดับแรก, VALUES(Product[ProductName]) = แต่ละสินค้า, [Total Sales] = เกณฑ์เรียง, 0 = DESC
Secondary sort (Country ASC) ป้องกัน 'tie breaker' ที่ไม่เสถียร เมื่อ Revenue เท่ากัน
TOPN คืนตาราง 10 ประเทศ → KEEPFILTERS ส่งผ่านแต่ละประเทศเป็นตัวกรอง → CALCULATE รวมขายในแต่ละประเทศ
ใช้ VAR เก็บจำนวนที่ผู้ใช้เลือก SUMMARIZE สร้างแถวหมวดหมู่พร้อมยอดขาย TOPN เลือก Top N หมวด
หากไม่ระบุ OrderExpr TOPN จะไม่เรียงลำดับและคืนแถวแรก N แถวของตารางในลำดับดั้งเดิม ใช้อย่างระมัดระวัง เพราะผลลัพธ์อาจไม่คาดคะเน
เพราะ TOPN ประเมินค่า OrderBy_Expression แล้วคืน "ทุกแถวที่มีค่า N-th" หากมี tie (เช่น 5 แถวมียอดขาย = 1000) TOPN จะคืนแถวทั้ง 5 แม้ว่าคุณขอเพียง 3 แถว ให้เพิ่ม secondary sort เพื่อตัด tie
RANKX ให้เลขที่ (1, 2, 3…) ในแต่ละแถว; TOPN คืนตารางแถวอันดับต้น N ตัว ถ้าต้องการจำนวนอันดับ ใช้ RANKX; ถ้าต้องการตัวแถวเอง ใช้ TOPN
ได้ เพราะ OrderBy_Expression ประเมินใน row context ของตาราง เช่น [Profit Margin] = [Sales] / [Cost] แล้ว TOPN เรียงตาม Profit Margin ได้
TOPN รองรับ DirectQuery แต่มีข้อจำกัด: ไม่รองรับในคอลัมน์ที่คำนวณและกฎ RLS บางตัว; ถ้ามีปัญหา ให้ทดสอบกับ Direct Query mode
ฟังก์ชันที่ผู้เขียนโยงไว้กับ TOPN จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ADDCOLUMNS เป็นฟังก์ชัน table transformation ที่ใช้สำหรับเพิ่มคอลัมน์ใหม่ (Calculated Columns) เข้าไปในตารางที่มีอยู่เดิม โดยคำนวณค่าในแต่ละแถวผ่าน Row Context และส่งคืนตารางเดิมพร้อมคอลัมน์ใหม่ต่อท้าย
คืนตารางย่อยจากตารางต้นทางโดยแบ่งแกน X เป็นช่วงเท่า ๆ กัน และคงแถวที่ให้ค่า Measure ต่ำสุด/สูงสุดในแต่ละช่วง (ต่อซีรีส์) เพื่อช่วยลดจำนวนจุดสำหรับการแสดงผล
SUMMARIZE สร้างตารางสรุปโดยจัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนด คล้าย GROUP BY ใน SQL หรือ Pivot Table ใน Excel คืนค่าตารางที่มีหนึ่งแถวต่อหนึ่ง unique combination ของคอลัมน์ที่เลือก สามารถอ้างถึงคอลัมน์จาก related table ได้โดยตรงโดยไม่ต้องใช้ RELATED มักใช้สร้าง virtual table ใน measure เพื่อทำ intermediate calculations ก่อนใช้ iterator functions อย่าง SUMX, AVERAGEX คำนวณต่อ ⚠️ Best Practice: ใช้ ADDCOLUMNS ครอบ SUMMARIZE แทนการใส่ extension columns ตรงๆ เพื่อ performance และ filter context control ที่ดีกว่า สำหรับ calculated table แนะนำใช้ SUMMARIZECOLUMNS แทนเนื่องจากมี performance ดีกว่าอย่างมาก
SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที
ฟังก์ชันเชิงเครื่องมือสำหรับเลือกจำนวนแถวสูงสุด (Top N) ต่อ ระดับในโครงสร้างลำดับชั้น (hierarchy) ที่มีการขยาย/ยุบโหนด
ดึงแถวจากตารางโดยข้ามจำนวนแถวที่กำหนดก่อน แล้วคืนแถวถัดไปตามการเรียงลำดับที่ระบุ มีประสิทธิภาพสูงสำหรับงาน pagination
VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้
CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่