FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
=FILTERS(<column>)
=FILTERS(<column>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| column | column | Yes | คอลัมน์ที่ต้องการดึง ‘รายการค่าที่ถูกกรองโดยตรง’ ออกมาเป็นตาราง จะคืนค่าเฉพาะค่าที่ระบุชัดเจนในตัวกรอง ไม่ใช่ค่าที่ถูกกรองผ่านความสัมพันธ์ (cross-filter) |
นับจำนวนค่าที่ถูกกรองโดยตรงบนคอลัมน์ เพื่อแยกกรณี filtered vs not filtered
นำ FILTERS ไปใช้ใน CALCULATE เพื่อให้ Measure เคารพเฉพาะค่าที่ผู้ใช้เลือกโดยตรงในคอลัมน์นั้น
Direct Selection Count = COUNTROWS( FILTERS( Product[Category] ) )Direct Selection Count =
COUNTROWS(
FILTERS( Product[Category] )
)
จำนวนค่า (0, 1, 2, 3, ...) ที่ถูกเลือกโดยตรงบน Category
Filter Status = IF( COUNTROWS(FILTERS(Product[Category])) > 0, "มีการเลือก Category", "ไม่มีการเลือก Category" )Filter Status =
IF(
COUNTROWS(FILTERS(Product[Category])) > 0,
"มีการเลือก Category",
"ไม่มีการเลือก Category"
)
"มีการเลือก Category" หรือ "ไม่มีการเลือก Category"
Sales with Direct Category = CALCULATE( [Total Sales], FILTERS(Product[Category]) )Sales with Direct Category =
CALCULATE(
[Total Sales],
FILTERS(Product[Category])
)
ยอดขายที่คงตัวกรองเฉพาะค่าที่ถูกกรองโดยตรงบน Category
Check Multiple Categories = VAR SelectedCategories = COUNTROWS(FILTERS(Product[Category])) RETURN IF( SelectedCategories > 1, "เลือกหลายหมวดหมู่", IF( SelectedC…Check Multiple Categories =
VAR SelectedCategories =
COUNTROWS(FILTERS(Product[Category]))
RETURN
IF(
SelectedCategories > 1,
"เลือกหลายหมวดหมู่",
IF(
SelectedCategories = 1,
"เลือกหมวดหมู่เดียว",
"ไม่มีการเลือก"
)
)
ข้อความบรรยาย: "เลือกหลายหมวดหมู่" หรือ "เลือกหมวดหมู่เดียว" หรือ "ไม่มีการเลือก"
FILTERS คืนค่าเป็น ‘ตาราง’ เสมอ (เป็นรายการค่าที่ถูกกรองโดยตรง) ดังนั้นถ้าต้องการใช้เป็นเงื่อนไขหรือนับ มักใช้ COUNTROWS ครอบเพื่อแปลงเป็นตัวเลข
ALL/ALLEXCEPT ‘เคลียร์’ ตัวกรอง ส่วน FILTERS ‘อ่านและคืนค่า’ ตัวกรองที่มีอยู่ ดังนั้น FILTERS ใช้เมื่อต้อง ‘เก็บรักษา’ ตัวกรองโดยตรง ไม่ใช่เมื่อต้อง ‘ลบ’ มัน
เหมาะกับงาน: (1) ตรวจสอบบริบทตัวกรอง เช่น Debug measure, (2) สร้าง Tooltip/ข้อความไดนามิก, (3) สร้างตรรกะที่ต้องรู้ ‘ผู้ใช้กรองอะไรไป’ (4) ส่งตัวกรองโดยตรงเข้า CALCULATE เพื่อรักษาเงื่อนไขกรอง
ต่างกันสำคัญ: FILTERS(‘Product'[Category]) ‘อ่าน’ ว่าผู้ใช้เลือกหมวดหมู่อะไร แล้วคืนค่า ส่วน CALCULATE(…, ‘Product'[Category]=’Electronics’) ‘กำหนด’ ตัวกรองใหม่โดยไม่สนใจการเลือกปัจจุบัน
ใช่ได้ แต่ต้องระวัง ถ้ากรองผ่านความสัมพันธ์ (cross-filter) FILTERS อาจไม่ได้ผลตามคาด เพราะจะคืนค่าเฉพาะ ‘กรองโดยตรง’ บนคอลัมน์นั้น ไม่ใช่ค่าจากการ cross-filter จากตาราง อื่น
FILTERS เป็นฟังก์ชัน DAX ที่คืนค่าเป็น ‘ตาราง’ ของค่าที่ถูกกรอง โดยตรง บนคอลัมน์ที่ระบุ โดยทำงานในบริบทตัวกรอง (filter context) ของคำสั่ง CALCULATE
ที่เจ๋งคือ: FILTERS ไม่เคลียร์ตัวกรอง แต่คืนค่า ‘รายการตัวกรองปัจจุบัน’ เป็นตาราง ทำให้สามารถนำไปใช้ต่อ เช่น นับจำนวน ตรวจสอบเงื่อนไข หรือส่งเข้า CALCULATE อีกครั้ง
ส่วนตัวผม: ฟังก์ชันนี้ยากเข้าใจเพราะมันไม่ ‘ลบ’ ตัวกรอง แต่ ‘อ่าน’ ตัวกรอง ใช้เมื่อต้องการเข้าใจว่า ‘ผู้ใช้เลือก/กรองอะไรไป’ ในบริบทนี้บ้าง แล้วจึงทำสิ่งอื่นต่อจากนั้น