---
title: ROLLUP – สร้างแถว Subtotal ในตาราง SUMMARIZE
url: https://www.thepexcel.com/functions/dax/table-manipulation/rollup-dax/
type: function-explainer
program: DAX
syntax: "ROLLUP(<GroupColumn>[, <GroupColumn>]...)"
date: 2025-12-13
updated: 2025-12-25
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

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

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

## คำอธิบาย

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

## Syntax

```excel
ROLLUP(&lt;GroupColumn&gt;[, &lt;GroupColumn&gt;]...)
```

**Variant**

```excel
ROLLUP(&lt;GroupColumn&gt;)
```

สร้าง subtotal ตามคอลัมน์เดียว

**Variant**

```excel
ROLLUP(&lt;GroupColumn1&gt;, &lt;GroupColumn2&gt;)
```

สร้าง subtotal ตามหลายคอลัมน์ (แนวคิด)

## Arguments

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

## เคสการใช้งาน

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

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

_เหมาะกับ:_ summary-with-subtotals

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

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

_เหมาะกับ:_ detect-subtotal-rows

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ROLLUP พื้นฐาน - สร้างแถว subtotal ตามปี

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

**ผลลัพธ์:** `ตารางที่มีแถวแต่ละปี บวก 1 แถว subtotal ที่ Year = BLANK แสดงรวมทั้งหมด`

ROLLUP กับ 1 คอลัมน์ = สร้างแถว subtotal 1 ชั้น ในตัวอย่างนี้ได้ (2022, Amount), (2023, Amount), (BLANK, Total) โดย BLANK แสดงว่าเป็น subtotal

### 2. ตัวอย่างที่ 2: ROLLUP กับ ISSUBTOTAL - ตรวจแถว subtotal

```excel
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)`

ROLLUP 2 คอลัมน์ + ISSUBTOTAL ช่วยบอกว่าแถวไหนเป็น subtotal ที่ใด - ได้ structure ชัดเจนสำหรับ format หรือ filter ต่อ

### 3. ตัวอย่างที่ 3: ใช้ ISSUBTOTAL ข้อคู่เพื่อตรวจแต่ละระดับ

```excel
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`

ใช้หลาย ISSUBTOTAL เพื่อตรวจว่า subtotal เป็นระดับไหน ช่วยตัดสินใจการ format หรือซ่อนแถว subtotal บางประเภท

### 4. ตัวอย่างที่ 4: กรอง subtotal ออก (เฉพาะรายละเอียด)

```excel
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 ออก`

ถ้าต้องการเห็นเฉพาะรายละเอียดโดยไม่ต้องสร้าง SUMMARIZE ใหม่ ให้ FILTER บนผลลัพธ์ ROLLUP

## หมายเหตุเพิ่มเติม

- ผมแนะนำให้เรียงลำดับของ ROLLUP จากระดับสูง (ปี) ไปต่ำ (วัน) เช่น ROLLUP('Date'[Year], 'Date'[Month]) ช่วยให้ผลลัพธ์อ่านง่าย ระดับต่ำ subtotal ก่อน ระดับสูง subtotal ทีหลัง

- ส่วนตัวผมใช้ ISSUBTOTAL ตรวจแต่ละ column ที่ ROLLUP - ถ้า ROLLUP 3 คอลัมน์ ก็ ISSUBTOTAL 3 ครั้ง เพื่อให้ชัดว่า subtotal ระดับไหน จากนั้นใช้ IF เพื่อให้ขาว/เทา/หรือซ่อนแถว subtotal ยาวๆ

- ระวัง: ถ้า ROLLUP ซ้ำกับ GroupBy ใน SUMMARIZE เช่น SUMMARIZE(..., 'Date'[Year], ROLLUP('Date'[Year], 'Date'[Year])) จะได้ error ไม่สามารถระบุคอลัมน์เดียวกันสองครั้งใน ROLLUP

- ROLLUP เหมาะสำหรับ Reporting Model ที่ต้องแสดง Hierarchical Aggregation ในรายงาน Excel หรือ Power BI Matrix - ประหยัด performance เพราะ query ผลลัพธ์ครั้งเดียวแทนการ SUMMARIZE หลายชั้น

## คำถามที่พบบ่อย

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

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

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

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

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

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

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

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

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

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

## ฟังก์ชันที่เกี่ยวข้อง

- summarize
- issubtotal
- rollupgroup
- rollupaddissubtotal
- summarizecolumns
- addmissingitems
- treatas

## แหล่งข้อมูลเพิ่มเติม

- [DAX Guide - ROLLUP](https://dax.guide/rollup/) _(guide)_
- [Microsoft Learn - ROLLUP Function](https://learn.microsoft.com/en-us/dax/rollup) _(official)_
- [SQLBI - SUMMARIZE and ROLLUP](https://www.sqlbi.com/articles/understanding-dax-summarize/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/table-manipulation/rollup-dax/](https://www.thepexcel.com/functions/dax/table-manipulation/rollup-dax/)_
