Thep Excel

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

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

=ALL(<table_or_column>[, <column>[, ...]])

By ThepExcel AI Agent
20 December 2025

Function Metrics


Popularity
9/10

Difficulty
5/10

Usefulness
9/10

Syntax & Arguments

=ALL(<table_or_column>[, <column>[, ...]])

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

How it works

คำนวณ Grand Total

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

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

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

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

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

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

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

Examples

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

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

Result:

5

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

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

Result:

1,250,000

ตัวอย่างที่ 3: คำนวณเปอร์เซ็นต์เทียบยอดรวม
% of Total Sales = VAR CurrentSales = SUM(Sales[Amount]) VAR TotalSales = CALCULATE( SUM(Sales[Amount]), ALL(Products[Category]) ) RETURN DIVIDE(CurrentSales, T…
สมมติยอดขาย 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 เสมอเมื่อคำนวณที่ซับซ้อน อ่านโค้ดง่ายกว่าเยอะครับ 😎
DAX Formula:

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

Result:

0.35 หรือ 35%

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

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

Result:

ตารางที่มีสินค้าราคาเกิน 10,000 บาททั้งหมด

ตัวอย่างที่ 5: ลบ Filter หลายคอลัมน์พร้อมกัน
Sales Ignoring Category And Color = CALCULATE( SUM(Sales[Amount]), ALL(Products[Category], Products[Color]) )
สมมติมี 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 ด้วย ซึ่งอาจไม่ใช่สิ่งที่เราต้องการ 😅
DAX Formula:

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

Result:

850,000

FAQs

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

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

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 เลือก” 💡

ทำไมใช้ 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 ปีเท่านั้น

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

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

ทำไมใช้ 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) แทน 💡

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 ครับ ต้องระวังว่าเรานับอะไรอยู่ 😎

Resources & Related

Related functions

Additional Notes

ALL เป็นฟังก์ชันที่มี 2 บทบาทหลัก ที่แตกต่างกันโดยสิ้นเชิง ขึ้นอยู่กับว่าเราใช้มันในบริบทไหน
.
ที่เจ๋งคือฟังก์ชันเดียวกัน แต่พฤติกรรมต่างกันเลย ตอนแรกผมก็งงเหมือนกันครับ 😅 แต่พอเข้าใจแล้วจะรู้เลยว่ามันเป็น “หัวใจ” ของ DAX จริงๆ
.
บทบาทที่ 1: Table Function เมื่อใช้ ALL ในบริบทที่ต้องการตาราง (เช่น ใน FILTER, COUNTROWS) มันจะคืนตารางที่มีทุกแถว หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter Context ที่มีอยู่
.
บทบาทที่ 2: CALCULATE Modifier เมื่อใช้ ALL ภายใน CALCULATE หรือ CALCULATETABLE มันจะไม่คืนตาราง แต่ทำหน้าที่ลบ Filter ออกจาก Filter Context แทน
.
ส่วนตัวผมคิดว่า ถ้าจะเข้าใจ DAX ให้ลึกจริงๆ ต้องเข้าใจ ALL ให้ชัดเจน เพราะมันเกี่ยวข้องกับ Filter Context ซึ่งเป็นแนวคิดพื้นฐานที่สำคัญที่สุดของ DAX เลยก็ว่าได้ 😎

Leave a Reply

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