Thep Excel

FILTERS – คืนค่าตารางของค่าที่ถูกกรองโดยตรง

FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด

=FILTERS(<column>)

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
5/10

Difficulty
5/10

Usefulness
5/10

Syntax & Arguments

=FILTERS(<column>)

Argument Type Required Default Description
column column Yes คอลัมน์ที่ต้องการดึง ‘รายการค่าที่ถูกกรองโดยตรง’ ออกมาเป็นตาราง จะคืนค่าเฉพาะค่าที่ระบุชัดเจนในตัวกรอง ไม่ใช่ค่าที่ถูกกรองผ่านความสัมพันธ์ (cross-filter)

How it works

ตรวจสอบว่าคอลัมน์ถูกกรองอยู่หรือไม่

นับจำนวนค่าที่ถูกกรองโดยตรงบนคอลัมน์ เพื่อแยกกรณี filtered vs not filtered

ใช้เป็นส่วนหนึ่งของ Measure ที่ตอบสนองต่อการเลือกของผู้ใช้

นำ FILTERS ไปใช้ใน CALCULATE เพื่อให้ Measure เคารพเฉพาะค่าที่ผู้ใช้เลือกโดยตรงในคอลัมน์นั้น

Examples

ตัวอย่างที่ 1: นับจำนวนค่าที่ถูกกรองโดยตรง
Direct Selection Count = COUNTROWS( FILTERS( Product[Category] ) )
ถ้าผู้ใช้ไม่ได้กรองคอลัมน์นี้โดยตรง ผลลัพธ์เป็น 0 แต่ถ้าเลือกจากตัวแบ่งส่วนข้อมูล (Slicer) จะได้จำนวนค่าที่เลือก เช่น 1 (เลือก 'Electronics') หรือ 2 (เลือก 'Electronics' และ 'Clothing')
DAX Formula:

Direct Selection Count =
COUNTROWS(
    FILTERS( Product[Category] )
)

Result:

จำนวนค่า (0, 1, 2, 3, ...) ที่ถูกเลือกโดยตรงบน Category

ตัวอย่างที่ 2: สร้างสถานะว่าใช้ตัวกรองโดยตรงหรือไม่
Filter Status = IF( COUNTROWS(FILTERS(Product[Category])) > 0, "มีการเลือก Category", "ไม่มีการเลือก Category" )
ใช้เพื่อสร้าง Measure ที่ตอบสนองต่อการเลือกของผู้ใช้ เหมาะสำหรับ Tooltip หรือข้อความไดนามิก เพื่อแจ้งว่ามีการกรองบนคอลัมน์นี้อยู่หรือไม่
DAX Formula:

Filter Status =
IF(
    COUNTROWS(FILTERS(Product[Category])) > 0,
    "มีการเลือก Category",
    "ไม่มีการเลือก Category"
)

Result:

"มีการเลือก Category" หรือ "ไม่มีการเลือก Category"

ตัวอย่างที่ 3: ใช้ FILTERS เป็นตัวกรองใน CALCULATE
Sales with Direct Category = CALCULATE( [Total Sales], FILTERS(Product[Category]) )
แนวคิดคือส่งตารางค่าที่ถูกกรองโดยตรงเข้าไปเป็นอาร์กิวเมนต์ตัวกรองของ CALCULATE เพื่อควบคุมให้ Measure รับตัวกรองชุดเดิม (ไม่เพิ่ม/ลดตัวกรอง) ใช้เมื่อต้องการ 'อ่านเฉพาะ' ค่าที่กรองโดยตรง
DAX Formula:

Sales with Direct Category =
CALCULATE(
    [Total Sales],
    FILTERS(Product[Category])
)

Result:

ยอดขายที่คงตัวกรองเฉพาะค่าที่ถูกกรองโดยตรงบน Category

ตัวอย่างที่ 4: ตรวจสอบเงื่อนไขตัวกรองที่ซับซ้อน
Check Multiple Categories = VAR SelectedCategories = COUNTROWS(FILTERS(Product[Category])) RETURN IF( SelectedCategories > 1, "เลือกหลายหมวดหมู่", IF( SelectedC…
ใช้ VAR เพื่อเก็บจำนวนตัวกรอง แล้วจึงตัดสินใจ Measure ต่างๆ บนพื้นฐาน 'กรองกี่ค่า' ประโยชน์เมื่อต้องการพฤติกรรมที่แตกต่างตามสถานการณ์
DAX Formula:

Check Multiple Categories =
VAR SelectedCategories =
    COUNTROWS(FILTERS(Product[Category]))
RETURN
    IF(
        SelectedCategories > 1,
        "เลือกหลายหมวดหมู่",
        IF(
            SelectedCategories = 1,
            "เลือกหมวดหมู่เดียว",
            "ไม่มีการเลือก"
        )
    )

Result:

ข้อความบรรยาย: "เลือกหลายหมวดหมู่" หรือ "เลือกหมวดหมู่เดียว" หรือ "ไม่มีการเลือก"

FAQs

FILTERS คืนค่าเป็นตารางหรือค่าเดียว?

FILTERS คืนค่าเป็น ‘ตาราง’ เสมอ (เป็นรายการค่าที่ถูกกรองโดยตรง) ดังนั้นถ้าต้องการใช้เป็นเงื่อนไขหรือนับ มักใช้ COUNTROWS ครอบเพื่อแปลงเป็นตัวเลข

FILTERS กับ ALL/ALLEXCEPT ต่างกันยังไง?

ALL/ALLEXCEPT ‘เคลียร์’ ตัวกรอง ส่วน FILTERS ‘อ่านและคืนค่า’ ตัวกรองที่มีอยู่ ดังนั้น FILTERS ใช้เมื่อต้อง ‘เก็บรักษา’ ตัวกรองโดยตรง ไม่ใช่เมื่อต้อง ‘ลบ’ มัน

FILTERS เหมาะกับงานแบบไหนมากที่สุด?

เหมาะกับงาน: (1) ตรวจสอบบริบทตัวกรอง เช่น Debug measure, (2) สร้าง Tooltip/ข้อความไดนามิก, (3) สร้างตรรกะที่ต้องรู้ ‘ผู้ใช้กรองอะไรไป’ (4) ส่งตัวกรองโดยตรงเข้า CALCULATE เพื่อรักษาเงื่อนไขกรอง

FILTERS vs CALCULATE(… , Product[Category] = 'Electronics') ต่างกันไหม?

ต่างกันสำคัญ: FILTERS(‘Product'[Category]) ‘อ่าน’ ว่าผู้ใช้เลือกหมวดหมู่อะไร แล้วคืนค่า ส่วน CALCULATE(…, ‘Product'[Category]=’Electronics’) ‘กำหนด’ ตัวกรองใหม่โดยไม่สนใจการเลือกปัจจุบัน

FILTERS ใช้ได้กับคอลัมน์จากตาราง Related หรือไม่?

ใช่ได้ แต่ต้องระวัง ถ้ากรองผ่านความสัมพันธ์ (cross-filter) FILTERS อาจไม่ได้ผลตามคาด เพราะจะคืนค่าเฉพาะ ‘กรองโดยตรง’ บนคอลัมน์นั้น ไม่ใช่ค่าจากการ cross-filter จากตาราง อื่น

Resources & Related

Additional Notes

FILTERS เป็นฟังก์ชัน DAX ที่คืนค่าเป็น ‘ตาราง’ ของค่าที่ถูกกรอง โดยตรง บนคอลัมน์ที่ระบุ โดยทำงานในบริบทตัวกรอง (filter context) ของคำสั่ง CALCULATE

ที่เจ๋งคือ: FILTERS ไม่เคลียร์ตัวกรอง แต่คืนค่า ‘รายการตัวกรองปัจจุบัน’ เป็นตาราง ทำให้สามารถนำไปใช้ต่อ เช่น นับจำนวน ตรวจสอบเงื่อนไข หรือส่งเข้า CALCULATE อีกครั้ง

ส่วนตัวผม: ฟังก์ชันนี้ยากเข้าใจเพราะมันไม่ ‘ลบ’ ตัวกรอง แต่ ‘อ่าน’ ตัวกรอง ใช้เมื่อต้องการเข้าใจว่า ‘ผู้ใช้เลือก/กรองอะไรไป’ ในบริบทนี้บ้าง แล้วจึงทำสิ่งอื่นต่อจากนั้น

Leave a Reply

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