Thep Excel

TOPNPERLEVEL – เลือก Top N ต่อระดับลำดับชั้น

ฟังก์ชันเชิงเครื่องมือสำหรับเลือกจำนวนแถวสูงสุด (Top N) ต่อ ระดับในโครงสร้างลำดับชั้น (hierarchy) ที่มีการขยาย/ยุบโหนด

=TOPNPERLEVEL(<Rows>, <Table>, <LevelsDefinition>, <NodesExpanded>, <LevelsBoundaries>, <RestartIndicatorColumnName>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=TOPNPERLEVEL(<Rows>, <Table>, <LevelsDefinition>, <NodesExpanded>, <LevelsBoundaries>, <RestartIndicatorColumnName>)

Argument Type Required Default Description
Rows integer Yes จำนวนแถว (Top N) ที่ต้องการคืนต่อระดับลำดับชั้น
Table table Yes ตารางต้นทางที่บรรจุข้อมูลลำดับชั้น (เช่น สินค้า ประเทศ บุคคล)
LevelsDefinition table Yes ตารางนิยามระดับ ที่ระบุคอลัมน์แต่ละระดับและลำดับการเรียงลำดับ (order indicator)
NodesExpanded table Yes ตารางสถานะการขยายโหนด (expanded nodes) ที่แสดงว่าต้องคืนแถวของระดับใดบ้าง
LevelsBoundaries table Yes ตารางขอบเขตของแต่ละระดับ ที่กำหนดเงื่อนไขการเลือกแถว (เช่น หลังจากข้อมูลใด)
RestartIndicatorColumnName text Yes ชื่อคอลัมน์ที่ฟังก์ชันจะเพิ่มเข้าไป เพื่อบ่งชี้ว่าแถวนั้นอยู่ก่อนหรือหลังขอบเขต (1 = ก่อน, 2 = หลัง)

How it works

รองรับ visual แบบ hierarchy ที่ต้องขยาย/ยุบระดับ

ใช้เป็นเครื่องมือในการเลือกแถวที่ต้องแสดงตามระดับที่ผู้ใช้ขยายใน visual

จำกัดจำนวนแถวต่อระดับเพื่อประสิทธิภาพ

ใช้ลดจำนวนแถวที่คืนในแต่ละระดับ เมื่อโครงสร้างลำดับชั้นมีขนาดใหญ่

Examples

ตัวอย่างที่ 1: ตำแหน่งพื้นฐานของ TOPNPERLEVEL
TOPNPERLEVEL( 10, Products, LevelsDefinition, NodesExpanded, LevelsBoundaries, "RestartFlag" )
คืนจำนวนแถวสูงสุด 10 ต่อระดับหนึ่ง โดยคอลัมน์ RestartFlag บ่งชี้ว่าแถวนั้นเป็นจุดเริ่มต้นของขอบเขตใหม่หรือไม่
DAX Formula:

=TOPNPERLEVEL(
    10,
    Products,
    LevelsDefinition,
    NodesExpanded,
    LevelsBoundaries,
    "RestartFlag"
)

Result:

ตารางย่อยของ Products ที่เลือก Top 10 รายการต่อระดับในลำดับชั้น พร้อมคอลัมน์ RestartFlag

ตัวอย่างที่ 2: ใช้กับ TOPNSKIP สำหรับการเลื่อนหน้า
VAR TopByLevel = TOPNPERLEVEL( 10, Products, LevelsDefinition, NodesExpanded, LevelsBoundaries, "RestartFlag" ) RETURN TOPNSKIP( 5, 2, TopByLevel, [ProductName]…
ใช้ TOPNPERLEVEL เพื่อจำกัดจำนวนแถวต่อระดับก่อน แล้วใช้ TOPNSKIP เพื่อดึงข้อมูลแบบเลื่อนหน้า (pagination)
DAX Formula:

VAR TopByLevel = TOPNPERLEVEL(
    10,
    Products,
    LevelsDefinition,
    NodesExpanded,
    LevelsBoundaries,
    "RestartFlag"
)
RETURN
  TOPNSKIP(
      5,
      2,
      TopByLevel,
      [ProductName]
  )

Result:

แสดงผลลัพธ์จาก TOPNPERLEVEL โดยข้ามแถว 5 แถวแรก และเลือกเพียง 2 แถวถัดไป

ตัวอย่างที่ 3: ตรวจสอบผลลัพธ์ด้วย COUNTROWS
VAR SelectionTable = TOPNPERLEVEL( 5, Sales, LevelsDefinition, NodesExpanded, LevelsBoundaries, "IsRestart" ) RETURN COUNTROWS(SelectionTable)
ใช้ COUNTROWS เพื่อตรวจสอบว่า TOPNPERLEVEL คืนจำนวนแถวเท่าไหร่จริง โดยเฉพาะเมื่อพารามิเตอร์ซับซ้อน
DAX Formula:

VAR SelectionTable = TOPNPERLEVEL(
    5,
    Sales,
    LevelsDefinition,
    NodesExpanded,
    LevelsBoundaries,
    "IsRestart"
)
RETURN
  COUNTROWS(SelectionTable)

Result:

ตัวเลขที่แสดงจำนวนแถวทั้งหมดที่คืนจาก TOPNPERLEVEL

FAQs

TOPNPERLEVEL เป็นฟังก์ชันที่ใช้บ่อยหรือไม่?

ไม่ใช่ครับ TOPNPERLEVEL เป็นฟังก์ชันเชิงเครื่องมือ (extension function) ที่ออกแบบมาโดยเฉพาะสำหรับงานการสร้าง visual ที่มี drill-down hierarchy ใช้ได้เฉพาะเมื่อเชื่อมต่อ Analysis Services หรือโมเดลลำดับชั้นจริง ถ้าท่านเขียน DAX ปกติเพื่อสร้าง measure ปกติคงไม่ต้องใช้ครับ

ทำไม TOPNPERLEVEL ถึงต้องพารามิเตอร์เยอะ และดูซับซ้อน?

เพราะว่า TOPNPERLEVEL ต้องการข้อมูลที่ครบถ้วน: นิยามระดับของ hierarchy ข้อมูลเกี่ยวกับว่าโหนดใดถูกขยาย และขอบเขต (boundary) ของแต่ละระดับ ถึงจะคืนผลลัพธ์ที่ถูกต้องตามสถานะการขยาย/ยุบ ของ visual ได้ ผมมองว่านี่คือ trade-off ที่จำเป็นสำหรับการทำงานกับ hierarchy ที่ซับซ้อน

TOPNPERLEVEL มีความสัมพันธ์กับ context transition ไหม?

ใช่ครับ เมื่อ TOPNPERLEVEL ถูกเรียกในสถานการณ์ที่มี row context (เช่นอยู่ในตารางคำนวณ column formula หรือใน iterator) ฟังก์ชันจะทำ context transition โดยอัตโนมัติ แล้วทำงานใน filter context เพื่อจัดการกับพารามิเตอร์ลำดับชั้น

ต้องใช้ TOPNPERLEVEL เสมอหรือ TOPN/TOPNSKIP ที่ง่ายกว่าเพียงพอ?

ขึ้นอยู่กับงานของคุณ ถ้าต้อง Top N แบบปกติ (ไม่ต้องสนใจลำดับชั้น) ให้ใช้ TOPN หรือ TOPNSKIP เพื่อความง่าย แต่ถ้า visual ของคุณมี multi-level drill-down hierarchy และต้องแสดง Top N ต่อระดับ ค่อยใช้ TOPNPERLEVEL ครับ

Resources & Related

Additional Notes

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 จริงๆ คงไม่ต้องใช้ครับ

Leave a Reply

Your email address will not be published. Required fields are marked *