Thep Excel

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

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

fx
=FILTERS(<column>)

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

อัปเดต 13 December 2025

Syntax & Arguments

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

Additional Notes

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

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

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

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')

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

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

ใช้เพื่อสร้าง Measure ที่ตอบสนองต่อการเลือกของผู้ใช้ เหมาะสำหรับ Tooltip หรือข้อความไดนามิก เพื่อแจ้งว่ามีการกรองบนคอลัมน์นี้อยู่หรือไม่

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

ผลลัพธ์"มีการเลือก Category" หรือ "ไม่มีการเลือก Category"
ตัวอย่างที่ 3: ใช้ FILTERS เป็นตัวกรองใน CALCULATESales with Direct Category = CALCULATE( [Total Sales], FILTERS(Product[Category]) )

แนวคิดคือส่งตารางค่าที่ถูกกรองโดยตรงเข้าไปเป็นอาร์กิวเมนต์ตัวกรองของ CALCULATE เพื่อควบคุมให้ Measure รับตัวกรองชุดเดิม (ไม่เพิ่ม/ลดตัวกรอง) ใช้เมื่อต้องการ 'อ่านเฉพาะ' ค่าที่กรองโดยตรง

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

ผลลัพธ์ยอดขายที่คงตัวกรองเฉพาะค่าที่ถูกกรองโดยตรงบน Category
ตัวอย่างที่ 4: ตรวจสอบเงื่อนไขตัวกรองที่ซับซ้อนCheck Multiple Categories = VAR SelectedCategories = COUNTROWS(FILTERS(Product[Category])) RETURN IF( SelectedCategories > 1, "เลือกหลายหมวดหมู่", IF( SelectedC…

ใช้ VAR เพื่อเก็บจำนวนตัวกรอง แล้วจึงตัดสินใจ Measure ต่างๆ บนพื้นฐาน 'กรองกี่ค่า' ประโยชน์เมื่อต้องการพฤติกรรมที่แตกต่างตามสถานการณ์

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

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

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

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

ฟังก์ชันนี้FILTERSTable manipulation
Filter (4)
ALL

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

ALLEXCEPT

ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้

CALCULATE

CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation

REMOVEFILTERS

REMOVEFILTERS ลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ใช้ได้ใน CALCULATE เท่านั้น เทียบเท่า ALL เมื่อใช้เป็น CALCULATE Modifier แต่ชัดเจนและอ่านโค้ดง่ายกว่า แนะนำใช้แทน ALL เพราะสื่อความหมายได้ดีกว่า

Information (3)
HASONEFILTER

ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้

HASONEVALUE

HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้

ISFILTERED

ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้

Comments

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