FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| column | column | คอลัมน์ที่ต้องการดึง ‘รายการค่าที่ถูกกรองโดยตรง’ ออกมาเป็นตาราง จะคืนค่าเฉพาะค่าที่ระบุชัดเจนในตัวกรอง ไม่ใช่ค่าที่ถูกกรองผ่านความสัมพันธ์ (cross-filter) |
FILTERS เป็นฟังก์ชัน DAX ที่คืนค่าเป็น ‘ตาราง’ ของค่าที่ถูกกรอง โดยตรง บนคอลัมน์ที่ระบุ โดยทำงานในบริบทตัวกรอง (filter context) ของคำสั่ง CALCULATE
ที่เจ๋งคือ: FILTERS ไม่เคลียร์ตัวกรอง แต่คืนค่า ‘รายการตัวกรองปัจจุบัน’ เป็นตาราง ทำให้สามารถนำไปใช้ต่อ เช่น นับจำนวน ตรวจสอบเงื่อนไข หรือส่งเข้า CALCULATE อีกครั้ง
ส่วนตัวผม: ฟังก์ชันนี้ยากเข้าใจเพราะมันไม่ ‘ลบ’ ตัวกรอง แต่ ‘อ่าน’ ตัวกรอง ใช้เมื่อต้องการเข้าใจว่า ‘ผู้ใช้เลือก/กรองอะไรไป’ ในบริบทนี้บ้าง แล้วจึงทำสิ่งอื่นต่อจากนั้น
นับจำนวนค่าที่ถูกกรองโดยตรงบนคอลัมน์ เพื่อแยกกรณี filtered vs not filtered
นำ FILTERS ไปใช้ใน CALCULATE เพื่อให้ Measure เคารพเฉพาะค่าที่ผู้ใช้เลือกโดยตรงในคอลัมน์นั้น
ถ้าผู้ใช้ไม่ได้กรองคอลัมน์นี้โดยตรง ผลลัพธ์เป็น 0 แต่ถ้าเลือกจากตัวแบ่งส่วนข้อมูล (Slicer) จะได้จำนวนค่าที่เลือก เช่น 1 (เลือก 'Electronics') หรือ 2 (เลือก 'Electronics' และ 'Clothing')
ใช้เพื่อสร้าง Measure ที่ตอบสนองต่อการเลือกของผู้ใช้ เหมาะสำหรับ Tooltip หรือข้อความไดนามิก เพื่อแจ้งว่ามีการกรองบนคอลัมน์นี้อยู่หรือไม่
แนวคิดคือส่งตารางค่าที่ถูกกรองโดยตรงเข้าไปเป็นอาร์กิวเมนต์ตัวกรองของ CALCULATE เพื่อควบคุมให้ Measure รับตัวกรองชุดเดิม (ไม่เพิ่ม/ลดตัวกรอง) ใช้เมื่อต้องการ 'อ่านเฉพาะ' ค่าที่กรองโดยตรง
ใช้ VAR เพื่อเก็บจำนวนตัวกรอง แล้วจึงตัดสินใจ Measure ต่างๆ บนพื้นฐาน 'กรองกี่ค่า' ประโยชน์เมื่อต้องการพฤติกรรมที่แตกต่างตามสถานการณ์
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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand Total หรือหาเปอร์เซ็นต์เทียบกับยอดรวมได้
ALLEXCEPT ใช้สำหรับ “ล้างตัวกรองเกือบทั้งหมด” โดยคงตัวกรองไว้เฉพาะคอลัมน์ที่ระบุ เหมาะกับการคำนวณ Sub-total/สัดส่วนภายในกลุ่ม เช่น ยอดขายต่อหมวดหมู่ โดยไม่สนตัวกรองอื่น ๆ แนวคิดหลักคือ ลบตัวกรองของตาราง แล้วคงตัวกรองของคอลัมน์ที่เลือกไว้
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 ลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ใช้ได้ใน CALCULATE เท่านั้น เทียบเท่า ALL เมื่อใช้เป็น CALCULATE Modifier แต่ชัดเจนและอ่านโค้ดง่ายกว่า แนะนำใช้แทน ALL เพราะสื่อความหมายได้ดีกว่า
ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้
HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้
ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่