---
title: ALL – ลบ Filter หรือคืนค่าทุกแถว
url: https://www.thepexcel.com/functions/dax/filter/all-dax/
type: function-explainer
program: DAX
syntax: "ALL(<table_or_column>[, <column>[, ...]])"
date: 2025-12-20
scores:
  popularity: 9
  difficulty: 5
  usefulness: 9
---

# ALL – ลบ Filter หรือคืนค่าทุกแถว

> คืนทุกแถว/ค่า หรือลบ Filter ขึ้นอยู่กับบริบทการใช้งาน

## คำอธิบาย

ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้

## Syntax

```excel
ALL(&lt;table_or_column&gt;[, &lt;column&gt;[, ...]])
```

**Variant**

```excel
ALL(&lt;table&gt;)
```

คืนทุกแถวในตาราง (รวม duplicate rows) หรือลบ Filter ทั้งหมดออกจากตารางนั้น

**Variant**

```excel
ALL(&lt;column&gt;)
```

คืนทุกค่า unique ในคอลัมน์ หรือลบ Filter ออกจากคอลัมน์นั้น

**Variant**

```excel
ALL(&lt;column&gt;, &lt;column&gt;, ...)
```

คืนทุก unique combination ของหลายคอลัมน์ หรือลบ Filter ออกจากหลายคอลัมน์พร้อมกัน

**Variant**

```excel
ALL()
```

ใช้ได้เฉพาะใน CALCULATE/CALCULATETABLE เท่านั้น - ลบ Filter ทั้งหมดออกจาก Filter Context

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| table_or_column | No | table/column |  | ตารางหรือคอลัมน์ที่ต้องการ - ถ้าระบุตาราง จะคืนทุกแถวหรือลบ Filter ออกจากตารางนั้น ถ้าระบุคอลัมน์ จะคืนทุกค่า unique หรือลบ Filter ออกจากคอลัมน์นั้น |
| column | No | column |  | คอลัมน์ที่ต้องการคืนทุกค่า unique หรือลบ Filter ออกจากคอลัมน์นั้น (ต้องเป็น base column ไม่สามารถใช้ calculated column ได้ สามารถระบุหลายคอลัมน์ได้) |

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

### คำนวณ Grand Total

ใช้ ALL ภายใน CALCULATE เพื่อลบ Filter ทั้งหมดและหายอดรวมสูงสุด ไม่ว่าจะมี Slicer หรือ Filter อะไรอยู่ก็ตาม

_เหมาะกับ:_ grand-total-calculation

### คำนวณเปอร์เซ็นต์เทียบยอดรวม

ใช้ ALL เพื่อหาตัวหารที่เป็นยอดรวมทั้งหมด เพื่อคำนวณสัดส่วนของแต่ละส่วนเทียบกับยอดรวม

_เหมาะกับ:_ percentage-of-total

### วนลูปทุกแถวโดยไม่สนใจ Filter

ใช้ ALL เป็น Table Expression ส่งให้ FILTER หรือฟังก์ชัน iterator เพื่อประมวลผลทุกแถว โดยไม่สนใจ Filter Context ภายนอก

_เหมาะกับ:_ iterate-all-rows

### ลบ Filter เฉพาะบางคอลัมน์

ระบุคอลัมน์เฉพาะใน ALL เพื่อลบ Filter เฉพาะคอลัมน์นั้นๆ แต่ยังคง Filter อื่นๆ ไว้

_เหมาะกับ:_ selective-filter-removal

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Table Function พื้นฐาน - คืนทุกค่าในคอลัมน์

```excel
All Product Categories =
COUNTROWS(
    ALL(Products[Category])
)
```

**ผลลัพธ์:** `5`

สมมติตาราง Products มี Category: Electronics, Furniture, Clothing, Books, Toys (5 หมวดหมู่)
.
ALL(Products[Category]) คืนตารางที่มีทุกค่า unique ในคอลัมน์ Category โดยไม่สนใจว่า Slicer หรือ Filter ใดๆ เลือกอะไรอยู่ จากนั้น COUNTROWS นับจำนวนแถว ได้ 5
.
ที่เจ๋งคือแม้ Slicer กรองเหลือแค่ Electronics ผลลัพธ์ก็ยังคงเป็น 5 เสมอ เพราะ ALL ไม่สนใจ Filter ใดๆ เลย 😎

### 2. ตัวอย่างที่ 2: CALCULATE Modifier - หา Grand Total

```excel
Total Sales All Products =
CALCULATE(
    SUM(Sales[Amount]),
    ALL(Products)
)
```

**ผลลัพธ์:** `1,250,000`

สมมติยอดขายรวมทั้งหมดคือ 1,250,000 บาท
.
ALL(Products) ทำหน้าที่ลบ Filter ทั้งหมดที่เกี่ยวกับตาราง Products ออกจาก Filter Context (ไม่ได้คืนตาราง!) จากนั้น CALCULATE จะคำนวณ SUM(Sales[Amount]) โดยไม่มี Filter ใดๆ จึงได้ Grand Total
.
ส่วนตัวผมใช้เทคนิคนี้บ่อยมากเวลาต้องการแสดง Grand Total ใน Card visual หรือใช้เป็นตัวหารเพื่อคำนวณเปอร์เซ็นต์ครับ 💡

### 3. ตัวอย่างที่ 3: คำนวณเปอร์เซ็นต์เทียบยอดรวม

```excel
% of Total Sales =
VAR CurrentSales = SUM(Sales[Amount])
VAR TotalSales =
    CALCULATE(
        SUM(Sales[Amount]),
        ALL(Products[Category])
    )
RETURN
    DIVIDE(CurrentSales, TotalSales, 0)
```

**ผลลัพธ์:** `0.35 หรือ 35%`

สมมติยอดขาย Electronics = 437,500 บาท, ยอดรวมทุกหมวด = 1,250,000 บาท
.
CurrentSales คำนวณตาม Filter Context ปัจจุบัน (ได้ 437,500)
.
TotalSales ใช้ ALL(Products[Category]) เพื่อลบ Filter หมวดสินค้า แต่ยังคง Filter อื่นๆ เช่น ปี หรือภูมิภาค (ได้ 1,250,000)
.
ผลลัพธ์: 437,500 / 1,250,000 = 0.35 หรือ 35%
.
สังเกตว่าเราใช้ VAR เพื่อแยกขั้นตอนให้ชัดเจน ส่วนตัวผมแนะนำให้ใช้ VAR เสมอเมื่อคำนวณที่ซับซ้อน อ่านโค้ดง่ายกว่าเยอะครับ 😎

### 4. ตัวอย่างที่ 4: Table Function ร่วมกับ FILTER

```excel
High Value Products =
CALCULATETABLE(
    FILTER(
        ALL(Products),
        Products[Price] > 10000
    )
)
```

**ผลลัพธ์:** `ตารางที่มีสินค้าราคาเกิน 10,000 บาททั้งหมด`

สมมติตาราง Products มีสินค้า 100 รายการ โดยมี 25 รายการที่ราคาเกิน 10,000 บาท
.
ALL(Products) คืนตารางที่มีทุกแถวในตาราง Products (100 แถว) โดยไม่สนใจ Filter Context
.
จากนั้น FILTER กรองเอาเฉพาะแถวที่ Price > 10000 (เหลือ 25 แถว)
.
ผลลัพธ์เป็นตารางที่มี 25 แถว ซึ่งสามารถนำไปใช้ต่อใน CALCULATETABLE หรือฟังก์ชันอื่นๆ ได้
.
เทคนิคนี้เหมาะมากเวลาต้องการสร้าง virtual table เพื่อคำนวณต่อ โดยไม่ต้องสร้าง Calculated Table จริงๆ ประหยัด memory ด้วยครับ 💡

### 5. ตัวอย่างที่ 5: ลบ Filter หลายคอลัมน์พร้อมกัน

```excel
Sales Ignoring Category And Color =
CALCULATE(
    SUM(Sales[Amount]),
    ALL(Products[Category], Products[Color])
)
```

**ผลลัพธ์:** `850,000`

สมมติมี Slicer กรอง Category = "Electronics" และ Color = "Black" อยู่
.
ALL(Products[Category], Products[Color]) ลบ Filter ออกจากทั้ง 2 คอลัมน์พร้อมกัน แต่ยังคง Filter อื่นๆ เช่น Date, Region ไว้
.
จากนั้น CALCULATE คำนวณ SUM(Sales[Amount]) โดยไม่มี Filter หมวดและสี (แต่ยังมี Filter อื่นๆ) ได้ 850,000 บาท
.
ที่ต้องระวังคือ ถ้าใช้ ALL(Products) แทน มันจะลบ Filter ทุกคอลัมน์ที่เกี่ยวกับ Products รวมถึง Size, Brand ด้วย ซึ่งอาจไม่ใช่สิ่งที่เราต้องการ 😅

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

⚠️ Expanded Table Behavior
.
เมื่อใช้ ALL กับ Fact Table (เช่น Sales) DAX จะลบ Filter ออกจากทั้ง Fact Table และ Dimension Table ทุกตารางที่เชื่อมด้วย Relationship แบบ many-to-one
.
ตัวอย่าง: ALL(Sales) จะลบ Filter ทั้ง Sales, Date, Products, Customers
.
ถ้าต้องการลบเฉพาะบางคอลัมน์ ให้ใช้ ALL(Table[Column]) แทนครับ
.
💡 Best Practice
.
ส่วนตัวผมแนะนำให้ใช้ REMOVEFILTERS แทน ALL เมื่อต้องการลบ Filter ใน CALCULATE เพราะ:
1. ชัดเจนกว่า - อ่านโค้ดแล้วรู้เลยว่ากำลังลบ Filter
2. ไม่สับสนกับ Table Function - ไม่ต้องมานั่งคิดว่า ALL ตรงนี้คือ Table หรือ Modifier
3. เป็น Best Practice ที่ SQLBI แนะนำ
.
แต่ถ้าต้องการใช้เป็น Table Function (คืนตาราง) ก็ต้องใช้ ALL เท่านั้นนะครับ เพราะ REMOVEFILTERS ทำหน้าที่นี้ไม่ได้ 😎

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

**Q: ALL ต่างจาก REMOVEFILTERS อย่างไร?**

ถ้าใช้เป็น CALCULATE Modifier ทั้งสองทำงานเหมือนกันเลย คือลบ Filter ออกจากตาราง/คอลัมน์ที่ระบุ
.
แต่ความต่างคือ ALL สามารถใช้เป็น Table Function ได้ด้วย (คืนตาราง) ส่วน REMOVEFILTERS ใช้ได้แค่ใน CALCULATE/CALCULATETABLE เท่านั้น
.
ส่วนตัวผมแนะนำให้ใช้ REMOVEFILTERS เมื่อต้องการลบ Filter ครับ เพราะชื่อชัดเจนกว่า อ่านโค้ดแล้วรู้เลยว่ากำลังทำอะไร ไม่ต้องมานั่งคิดว่า ALL ตรงนี้คือ Table Function หรือ Modifier 😎

**Q: ALL ต่างจาก ALLSELECTED อย่างไร?**

ALL ลบ Filter ทั้งหมด ได้ Grand Total แท้จริง
.
ALLSELECTED ลบ Filter เฉพาะภายใน Visual (Row Context, Column Context) แต่ยังคง Filter จาก Slicer, Page Filter, Report Filter ไว้
.
ตัวอย่าง: ถ้า Slicer เลือก Year = 2024 อยู่
- ALL จะได้ยอดรวมทุกปี (2020-2024)
- ALLSELECTED จะได้ยอดรวมเฉพาะ 2024 (ตาม Slicer)
.
ส่วนตัวผมใช้ ALL เวลาต้องการ "ยอดรวมสุดท้าย" จริงๆ ส่วน ALLSELECTED ใช้เวลาต้องการ "ยอดรวมตามที่ User เลือก" 💡

**Q: ทำไมใช้ ALL(Sales) แล้ว Filter ของ Date, Product หายไปด้วย?**

เรื่องนี้เจอบ่อยมากครับ 😅 เพราะ DAX มีแนวคิดที่เรียกว่า "Expanded Table"
.
เมื่อใช้ ALL กับ Fact Table (เช่น Sales) DAX จะลบ Filter ออกจากทั้ง Fact Table และ Dimension Table ทุกตารางที่มี Relationship แบบ one-to-many ด้วย
.
ตัวอย่าง: ถ้า Sales มี Relationship ไปยัง Date, Products, Customers
- ALL(Sales) จะลบ Filter จาก Sales, Date, Products, Customers ทั้งหมด
.
ถ้าต้องการลบเฉพาะบางคอลัมน์ ให้ใช้ ALL(Table[Column]) แทน เช่น ALL(Date[Year]) จะลบแค่ Filter ปีเท่านั้น

**Q: ALL() ไม่มี argument ใช้ตอนไหน?**

ALL() ไม่มี argument ใช้ได้เฉพาะใน CALCULATE/CALCULATETABLE เท่านั้น และจะลบ Filter ทั้งหมดออกจาก Filter Context
.
คำเตือน: ใช้ด้วยความระมัดระวังครับ เพราะมันลบ Filter ทุกอย่างเลย รวมถึง Filter จาก Relationship ด้วย อาจทำให้ได้ผลลัพธ์ที่ไม่ตรงตามที่คาดหวัง 😅
.
ส่วนตัวผมไม่ค่อยแนะนำให้ใช้ ALL() แบบไม่มี argument ครับ ควรระบุตาราง/คอลัมน์ให้ชัดเจนเสมอ เพื่อควบคุม Filter ได้แม่นยำกว่า

**Q: ทำไมใช้ ALL กับ Calculated Column ไม่ได้?**

ALL ต้องใช้กับ base column เท่านั้น ไม่สามารถใช้กับ calculated column ได้
.
เหตุผลคือ Calculated Column ถูกสร้างขึ้นจาก expression ไม่ใช่คอลัมน์จริงในตาราง ดังนั้น DAX ไม่สามารถ reference ได้แบบ direct
.
ถ้าต้องการใช้ ALL กับข้อมูลที่คำนวณมา ให้สร้างเป็น measure หรือใช้ table expression แทนครับ
.
ตัวอย่างที่ผิด: ALL(Products[Calculated Price])
.
ทางแก้: ใช้ FILTER(ALL(Products), [Price] * 1.1 > 10000) แทน 💡

**Q: ALL คืนแถวที่ซ้ำกัน (duplicate rows) ด้วยหรือไม่?**

ขึ้นอยู่กับว่าเราใช้แบบไหนครับ
.
ALL(Table) คืนทุกแถวรวมถึงแถวที่ซ้ำกันด้วย (duplicate rows)
.
ALL(Column) หรือ ALL(Column1, Column2, ...) คืนเฉพาะค่า unique combinations ไม่มี duplicate
.
ตัวอย่าง: ถ้า Sales มี 1000 transactions
- ALL(Sales) คืน 1000 แถว (รวม duplicate)
- ALL(Sales[ProductID]) คืนเฉพาะ ProductID ที่ไม่ซ้ำกัน (สมมติ 50 products)
.
เรื่องนี้สำคัญมากเวลาใช้ COUNTROWS ครับ ต้องระวังว่าเรานับอะไรอยู่ 😎

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

- [REMOVEFILTERS – ลบตัวกรองออกจากตาราง/คอลัมน์](https://www.thepexcel.com/functions/dax/filter/removefilters-dax/)
- [ALLSELECTED – ลบตัวกรอง Visual แต่คง Slicer เพื่อสร้าง Visual Total](https://www.thepexcel.com/functions/dax/filter/allselected-dax/)
- [ALLEXCEPT – ล้างตัวกรองทั้งหมดยกเว้นคอลัมน์ที่ระบุ](https://www.thepexcel.com/functions/dax/filter/allexcept-dax/)
- [ALLNOBLANKROW – ล้างตัวกรองทั้งหมดและตัด Blank Row ออก](https://www.thepexcel.com/functions/dax/filter/allnoblankrow-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)
- [CALCULATETABLE – Evaluate Table Expression ใน Modified Filter Context](https://www.thepexcel.com/functions/dax/filter/calculatetable-dax/)
- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [VALUES – ดึงค่าที่ไม่ซ้ำจากคอลัมน์ (รวม Blank จากข้อผิดพลาดความสัมพันธ์)](https://www.thepexcel.com/functions/dax/table-manipulation/values-dax/)
- [DISTINCT – ดึงรายการที่ไม่ซ้ำ (Unique Values) พร้อมหลีกหนีค่า Blank Row](https://www.thepexcel.com/functions/dax/table-manipulation/distinct-dax/)
- [COUNTROWS – นับจำนวนแถวในตารางและเทบิลเสมือน](https://www.thepexcel.com/functions/dax/aggregation/countrows-dax/)
- [DIVIDE – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/math-and-trig/divide-dax/)
- [SUMMARIZE – จัดกลุ่มข้อมูลและสร้างตารางสรุป (Table Grouping)](https://www.thepexcel.com/functions/dax/table-manipulation/summarize-dax/)

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

- [Microsoft Learn: ALL function (DAX)](https://learn.microsoft.com/en-us/dax/all-function-dax) _(documentation)_
- [DAX Guide: ALL](https://dax.guide/all/) _(documentation)_
- [SQLBI: Managing ALL functions in DAX](https://www.sqlbi.com/articles/managing-all-functions-in-dax-all-allselected-allnoblankrow-allexcept/) _(guide)_
- [SQLBI: Filter Context in DAX](https://www.sqlbi.com/articles/filter-context-in-dax/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/filter/all-dax/](https://www.thepexcel.com/functions/dax/filter/all-dax/)_
