ฟังก์ชันเชิงเครื่องมือสำหรับเลือกจำนวนแถวสูงสุด (Top N) ต่อ ระดับในโครงสร้างลำดับชั้น (hierarchy) ที่มีการขยาย/ยุบโหนด
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| Rows | integer | จำนวนแถว (Top N) ที่ต้องการคืนต่อระดับลำดับชั้น |
| Table | table | ตารางต้นทางที่บรรจุข้อมูลลำดับชั้น (เช่น สินค้า ประเทศ บุคคล) |
| LevelsDefinition | table | ตารางนิยามระดับ ที่ระบุคอลัมน์แต่ละระดับและลำดับการเรียงลำดับ (order indicator) |
| NodesExpanded | table | ตารางสถานะการขยายโหนด (expanded nodes) ที่แสดงว่าต้องคืนแถวของระดับใดบ้าง |
| LevelsBoundaries | table | ตารางขอบเขตของแต่ละระดับ ที่กำหนดเงื่อนไขการเลือกแถว (เช่น หลังจากข้อมูลใด) |
| RestartIndicatorColumnName | text | ชื่อคอลัมน์ที่ฟังก์ชันจะเพิ่มเข้าไป เพื่อบ่งชี้ว่าแถวนั้นอยู่ก่อนหรือหลังขอบเขต (1 = ก่อน, 2 = หลัง) |
TOPNPERLEVEL เป็นฟังก์ชันเชิงเครื่องมือ (extension function) ของ Power BI ที่ออกแบบมาเพื่อทำงานกับข้อมูลแบบลำดับชั้น (hierarchical data) โดยเลือกจำนวนแถวสูงสุดต่อระดับ ฟังก์ชันนี้รับข้อมูลของนิยามระดับ โหนดที่ขยาย และขอบเขตของแต่ละระดับ เพื่อคืนตารางย่อยที่สอดคล้องกับการทำงานแบบ hierarchy เป็นประโยชน์เมื่อต้องการแสดง Top N รายการต่อระดับในการขยาย/ยุบโหนดของ visual
ที่เจ๋งคือ TOPNPERLEVEL ทำให้เราสามารถควบคุมได้ว่า เมื่อผู้ใช้ขยายโหนดในการแสดงผล (drill-down) จะแสดง Top N รายการต่อระดับอย่างไร โดยไม่ต้องสร้างตรรมชาติ จำนวน expressions ที่ซับซ้อนสำหรับแต่ละระดับ
ส่วนตัวผมจะบอกว่า TOPNPERLEVEL เป็นฟังก์ชันที่สำหรับ Power BI professional ที่จัดการ hierarchy ที่เชื่อมกับ Analysis Services หรือ โมเดลข้อมูลที่ซับซ้อน ไม่ใช่ฟังก์ชันสำหรับ measure ทั่วไป และถ้าไม่ได้ทำงานกับ hierarchy ที่มี drill-down interactivity จริงๆ คงไม่ต้องใช้ครับ
ใช้เป็นเครื่องมือในการเลือกแถวที่ต้องแสดงตามระดับที่ผู้ใช้ขยายใน visual
ใช้ลดจำนวนแถวที่คืนในแต่ละระดับ เมื่อโครงสร้างลำดับชั้นมีขนาดใหญ่
คืนจำนวนแถวสูงสุด 10 ต่อระดับหนึ่ง โดยคอลัมน์ RestartFlag บ่งชี้ว่าแถวนั้นเป็นจุดเริ่มต้นของขอบเขตใหม่หรือไม่
ใช้ TOPNPERLEVEL เพื่อจำกัดจำนวนแถวต่อระดับก่อน แล้วใช้ TOPNSKIP เพื่อดึงข้อมูลแบบเลื่อนหน้า (pagination)
ใช้ COUNTROWS เพื่อตรวจสอบว่า TOPNPERLEVEL คืนจำนวนแถวเท่าไหร่จริง โดยเฉพาะเมื่อพารามิเตอร์ซับซ้อน
ไม่ใช่ครับ TOPNPERLEVEL เป็นฟังก์ชันเชิงเครื่องมือ (extension function) ที่ออกแบบมาโดยเฉพาะสำหรับงานการสร้าง visual ที่มี drill-down hierarchy ใช้ได้เฉพาะเมื่อเชื่อมต่อ Analysis Services หรือโมเดลลำดับชั้นจริง ถ้าท่านเขียน DAX ปกติเพื่อสร้าง measure ปกติคงไม่ต้องใช้ครับ
เพราะว่า TOPNPERLEVEL ต้องการข้อมูลที่ครบถ้วน: นิยามระดับของ hierarchy ข้อมูลเกี่ยวกับว่าโหนดใดถูกขยาย และขอบเขต (boundary) ของแต่ละระดับ ถึงจะคืนผลลัพธ์ที่ถูกต้องตามสถานะการขยาย/ยุบ ของ visual ได้ ผมมองว่านี่คือ trade-off ที่จำเป็นสำหรับการทำงานกับ hierarchy ที่ซับซ้อน
ใช่ครับ เมื่อ TOPNPERLEVEL ถูกเรียกในสถานการณ์ที่มี row context (เช่นอยู่ในตารางคำนวณ column formula หรือใน iterator) ฟังก์ชันจะทำ context transition โดยอัตโนมัติ แล้วทำงานใน filter context เพื่อจัดการกับพารามิเตอร์ลำดับชั้น
ขึ้นอยู่กับงานของคุณ ถ้าต้อง Top N แบบปกติ (ไม่ต้องสนใจลำดับชั้น) ให้ใช้ TOPN หรือ TOPNSKIP เพื่อความง่าย แต่ถ้า visual ของคุณมี multi-level drill-down hierarchy และต้องแสดง Top N ต่อระดับ ค่อยใช้ TOPNPERLEVEL ครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ TOPNPERLEVEL จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ROLLUPGROUP ระบุชุดคอลัมน์ที่จะถูกพิจารณาเป็น “กลุ่มเดียว” สำหรับการสร้าง subtotal/roll-up ช่วยลด subtotal บางระดับ และมักใช้ร่วมกับ ROLLUP ใน SUMMARIZE
SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที
คืนตาราง Top N แถวจากตารางที่กำหนด โดยเรียงตามนิพจน์หนึ่งตัวหรือมากกว่า สามารถระบุทิศทางการเรียงลำดับแยกต่างหากสำหรับแต่ละเกณฑ์
ดึงแถวจากตารางโดยข้ามจำนวนแถวที่กำหนดก่อน แล้วคืนแถวถัดไปตามการเรียงลำดับที่ระบุ มีประสิทธิภาพสูงสำหรับงาน pagination
CALCULATETABLE evaluate table expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน แล้วคืนค่าเป็น table (ตาราง) ซึ่งแตกต่างจาก CALCULATE ที่คืนค่าเป็น scalar value รองรับ filter arguments 3 รูปแบบ: Boolean expression, table expression, และ filter modifier functions (REMOVEFILTERS, ALL, KEEPFILTERS, USERELATIONSHIP, CROSSFILTER) มีพฤติกรรมเหมือน CALCULATE ในทุกแง่มุมของการจัดการ filter context รวมถึง context transition แต่เหมาะสำหรับการสร้าง intermediate table ที่ถูกกรองแล้วส่งต่อให้ iterator functions หรือใช้ใน calculated table มักมี performance ดีกว่า FILTER ใน simple filtering scenarios เพราะ DAX engine สามารถทำ cardinality estimation และ optimization ได้ดีกว่า
FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่