Thep Excel

ROLLUP – สร้างแถว Subtotal ในตาราง SUMMARIZE

ROLLUP บอก SUMMARIZE ให้สร้างแถว subtotal เพิ่มเติมตามคอลัมน์ที่กำหนด ทำให้ได้ทั้งรายละเอียดและรวมย่อยในผลลัพธ์เดียว

=ROLLUP(<GroupColumn>[, <GroupColumn>]...)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=ROLLUP(<GroupColumn>[, <GroupColumn>]...)

Argument Type Required Default Description
GroupColumn column Yes คอลัมน์ที่ต้องการสร้างแถว subtotal (ระบุได้หลายคอลัมน์ เรียงลำดับจากระดับสูงสุดไปต่ำสุด เช่น ปี แล้วเดือน)

How it works

สร้างตารางสรุปที่มีแถว subtotal ในตารางเดียว

คืนทั้งแถวรายละเอียดและแถวรวมย่อยเพื่อเอาไปแสดงผล

ตรวจแถว subtotal เพื่อนำไปจัดรูปแบบ

ใช้ ISSUBTOTAL แยกแถว subtotal ออกจากแถวรายละเอียด

Examples

ตัวอย่างที่ 1: ROLLUP พื้นฐาน – สร้างแถว subtotal ตามปี
VAR SummaryTable = SUMMARIZE( Sales, 'Date'[Year], ROLLUP('Date'[Year]), "Total Amount", SUM(Sales[Amount]) ) RETURN SummaryTable
ROLLUP กับ 1 คอลัมน์ = สร้างแถว subtotal 1 ชั้น ในตัวอย่างนี้ได้ (2022, Amount), (2023, Amount), (BLANK, Total) โดย BLANK แสดงว่าเป็น subtotal
DAX Formula:

VAR SummaryTable = SUMMARIZE(
    Sales,
    'Date'[Year],
    ROLLUP('Date'[Year]),
    "Total Amount", SUM(Sales[Amount])
)
RETURN SummaryTable

Result:

ตารางที่มีแถวแต่ละปี บวก 1 แถว subtotal ที่ Year = BLANK แสดงรวมทั้งหมด

ตัวอย่างที่ 2: ROLLUP กับ ISSUBTOTAL – ตรวจแถว subtotal
VAR SummaryTable = SUMMARIZE( Sales, 'Date'[Year], 'Date'[Month], ROLLUP('Date'[Year], 'Date'[Month]), "Total Amount", SUM(Sales[Amount]), "Is Subtotal", ISSUBT…
ROLLUP 2 คอลัมน์ + ISSUBTOTAL ช่วยบอกว่าแถวไหนเป็น subtotal ที่ใด – ได้ structure ชัดเจนสำหรับ format หรือ filter ต่อ
DAX Formula:

VAR SummaryTable = SUMMARIZE(
    Sales,
    'Date'[Year],
    'Date'[Month],
    ROLLUP('Date'[Year], 'Date'[Month]),
    "Total Amount", SUM(Sales[Amount]),
    "Is Subtotal", ISSUBTOTAL('Date'[Year])
)
RETURN SummaryTable

Result:

ตารางหลายระดับ: แถวรายละเอียด (2023, January), แถว subtotal ปี (2023, BLANK), แถว Grand Total (BLANK, BLANK)

ตัวอย่างที่ 3: ใช้ ISSUBTOTAL ข้อคู่เพื่อตรวจแต่ละระดับ
VAR SummaryTable = SUMMARIZE( Sales, 'Date'[Year], Product[Category], ROLLUP('Date'[Year], Product[Category]), "Amount", SUM(Sales[Amount]), "Is Year Total", IS…
ใช้หลาย ISSUBTOTAL เพื่อตรวจว่า subtotal เป็นระดับไหน ช่วยตัดสินใจการ format หรือซ่อนแถว subtotal บางประเภท
DAX Formula:

VAR SummaryTable = SUMMARIZE(
    Sales,
    'Date'[Year],
    Product[Category],
    ROLLUP('Date'[Year], Product[Category]),
    "Amount", SUM(Sales[Amount]),
    "Is Year Total", ISSUBTOTAL('Date'[Year]),
    "Is Category Total", ISSUBTOTAL(Product[Category])
)
RETURN SummaryTable

Result:

ตารางลำดับชั้น 3 ระดับ: รายละเอียด (Year, Category), subtotal ตามปี, subtotal ตามประเภท, grand total

ตัวอย่างที่ 4: กรอง subtotal ออก (เฉพาะรายละเอียด)
VAR SummaryTable = SUMMARIZE( Sales, 'Date'[Year], 'Date'[Month], ROLLUP('Date'[Year], 'Date'[Month]), "Amount", SUM(Sales[Amount]), "Is Subtotal", ISSUBTOTAL('…
ถ้าต้องการเห็นเฉพาะรายละเอียดโดยไม่ต้องสร้าง SUMMARIZE ใหม่ ให้ FILTER บนผลลัพธ์ ROLLUP
DAX Formula:

VAR SummaryTable = SUMMARIZE(
    Sales,
    'Date'[Year],
    'Date'[Month],
    ROLLUP('Date'[Year], 'Date'[Month]),
    "Amount", SUM(Sales[Amount]),
    "Is Subtotal", ISSUBTOTAL('Date'[Year])
)
VAR FilteredTable = FILTER(
    SummaryTable,
    NOT([Is Subtotal])
)
RETURN FilteredTable

Result:

ตารางเฉพาะแถวรายละเอียด โดยตัดแถว subtotal ออก

FAQs

ROLLUP ใช้กับฟังก์ชันอะไร?

ROLLUP ใช้เฉพาะภายใน SUMMARIZE เท่านั้น ไม่สามารถใช้กับ SUMMARIZECOLUMNS ได้

ทำไมคอลัมน์ใน ROLLUP ต้องเหมือนกับ GroupBy columns ใน SUMMARIZE?

เพราะ ROLLUP ทำหน้าที่ “บอก” ว่าคอลัมน์ไหนควรสร้าง subtotal ถ้าคอลัมน์ที่ group ไม่อยู่ใน ROLLUP ก็จะไม่สร้าง subtotal ระดับนั้น ลำดับของ ROLLUP มีความสำคัญ – เรียงจากระดับ detail ไปรวม ทั่วไป

ROLLUP กับ ROLLUPADDISSUBTOTAL ต่างกันอย่างไร?

ROLLUP สร้างแถว subtotal โดยใช้ BLANK บอกตำแหน่ง ROLLUPADDISSUBTOTAL สร้างแถว subtotal และเพิ่มคอลัมน์ที่ทำให้รู้ว่าเป็น subtotal เลยตรงไหน (ด้วย marker อยู่ในคอลัมน์เดียว) แต่ ROLLUPADDISSUBTOTAL ใช้เฉพาะ SUMMARIZECOLUMNS

แถว subtotal มีค่าอะไรในคอลัมน์ที่ roll-up?

ค่า BLANK – ช่วยให้ ISSUBTOTAL รู้ว่าแถวไหนเป็น subtotal ถ้าคอลัมน์นั้นเป็น text ก็จะว่าง ถ้าเป็นตัวเลขก็เป็น 0 หรือ BLANK ขึ้นอยู่ context

สามารถใช้ ROLLUP กับ measure ได้ไหม?

ไม่ได้ ROLLUP รับเฉพาะคอลัมน์ (column reference) ไม่สามารถส่ง expression หรือ measure เข้าไป หากต้องการ subtotal ตามเงื่อนไข ต้องใช้ VAR + FILTER บนผลลัพธ์

Resources & Related

Additional Notes

ROLLUP เป็นฟังก์ชันพิเศษที่ใช้ภายใน SUMMARIZE เพื่อระบุว่า “คอลัมน์ใดควรสร้างแถว subtotal” ตัวอย่างเช่น ถ้าคุณ group by ปี และเดือน โดยธรรมชาติ SUMMARIZE จะได้แถวรายละเอียดเพียง (2023, January), (2023, February) เป็นต้น แต่ถ้าใส่ ROLLUP จะเพิ่มแถว subtotal อีก (2023, [blank]) สำหรับรวมปี 2023

ที่เจ๋งคือ ROLLUP ทำให้คุณได้ “pyramid of aggregation” – เห็นทั้งรายละเอียดขั้นละเอียด (month-level) และรวมระดับบน (year-level) ในตารางเดียว ถ้าไม่มี ROLLUP ต้องสร้าง SUMMARIZE หลายตัวแล้วรวมกัน

ส่วนตัวผมใช้ ROLLUP กับ ISSUBTOTAL ข้อคู่ – ROLLUP สร้างแถว ISSUBTOTAL บอกว่าแถวไหนเป็น subtotal ถึงจะควบคุมการ format/filter/คำนวณต่อได้ง่าย ประหยัด performance กว่าสร้าง SUMMARIZE หลายทีมากครับ

Leave a Reply

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