Thep Excel

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

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

fx
=ROLLUP(<GroupColumn>[, <GroupColumn>]…)

ความนิยม5/10
ความยาก5/10
ประโยชน์5/10

อัปเดต 13 December 2025

Syntax & Arguments

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

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 หลายทีมากครับ

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

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

ผลลัพธ์ตารางที่มีแถวแต่ละปี บวก 1 แถว subtotal ที่ Year = BLANK แสดงรวมทั้งหมด
ตัวอย่างที่ 2: ROLLUP กับ ISSUBTOTAL – ตรวจแถว subtotalVAR 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 ต่อ

fx
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

ผลลัพธ์ตารางหลายระดับ: แถวรายละเอียด (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 บางประเภท

fx
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

ผลลัพธ์ตารางลำดับชั้น 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

fx
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

ผลลัพธ์ตารางเฉพาะแถวรายละเอียด โดยตัดแถว 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

ฟังก์ชันที่ผู้เขียนโยงไว้กับ ROLLUP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้ROLLUPTable manipulation
Table manipulation (7)
ADDMISSINGITEMS

ADDMISSINGITEMS เติมสมาชิกที่หายไปในผลลัพธ์สรุปแบบกลุ่ม เพื่อให้แสดงครบทุกสมาชิกของคอลัมน์ที่ระบุ เหมาะกับรายงานที่ต้องการเห็นรายการที่ไม่มีข้อมูลด้วย

ROLLUPADDISSUBTOTAL

ROLLUPADDISSUBTOTAL ใช้ใน SUMMARIZECOLUMNS เพื่อเพิ่มแถว roll-up/subtotal และเพิ่มคอลัมน์ IsSubtotal สำหรับแต่ละระดับที่กำหนด ทำให้แยกแถว subtotal ออกจากรายละเอียดได้ง่าย

ROLLUPGROUP

ROLLUPGROUP ระบุชุดคอลัมน์ที่จะถูกพิจารณาเป็น “กลุ่มเดียว” สำหรับการสร้าง subtotal/roll-up ช่วยลด subtotal บางระดับ และมักใช้ร่วมกับ ROLLUP ใน SUMMARIZE

ROLLUPISSUBTOTAL

ROLLUPISSUBTOTAL ใช้ใน ADDMISSINGITEMS เพื่อจับคู่กลุ่ม roll-up กับคอลัมน์ IsSubtotal ที่สร้างจาก ROLLUPADDISSUBTOTAL ทำให้การเติมรายการที่ขาดหายทำงานได้ถูกต้องเมื่อมี roll-up/subtotal rows

SUMMARIZE

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

SUMMARIZECOLUMNS เป็นฟังก์ชันหลักสำหรับสร้างตารางสรุปผล โดยจัดกลุ่มตามคอลัมน์ที่กำหนด พร้อมเพิ่มคอลัมน์คำนวณจากเมเชอร์ และสามารถใส่เงื่อนไขกรองได้ทันที

TREATAS

TREATAS เป็นเสมือนการสร้าง "virtual relationship" โดยไม่ต้องแก้โมเดล ช่วยให้ส่งเงื่อนไขข้ามตารางที่ไม่เชื่อมกัน หรือเมื่อต้องการส่งหลายคีย์พร้อมกัน

Filter (1)
FILTER

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่