ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ColumnName | column reference | ไม่มี – จำเป็นต้องระบุ | คอลัมน์ที่ต้องการตรวจสอบว่ามีตัวกรองโดยตรง เช่น Product[Color], Date[Year], Territory[Region] |
ISFILTERED คือฟังก์ชันสำคัญสำหรับตรวจจับการกรองโดยตรง (Direct Filter) ที่ใช้กับคอลัมน์ที่ระบุ ถ้าผู้ใช้กรองตามสี ปี ภูมิภาค หรือคอลัมน์ใดก็ตาม ฟังก์ชันนี้จะส่งค่า TRUE กลับมา ถ้าไม่มีการกรอง จะส่งค่า FALSE ข้อที่สำคัญคือ ISFILTERED เฉพาะตรวจจับการกรองโดยตรง (Direct Filter) เท่านั้น ไม่ใช่การกรองทางอ้อม (Cross Filter) ที่มาจากตารางที่เกี่ยวข้อง
ที่เจ๋งคือ ISFILTERED ใช้สร้าง Dynamic Content ที่เปลี่ยนแปลงตามการกรองของผู้ใช้ ตัวอย่างเช่น ถ้าผู้ใช้เลือกสาขาเดียว แสดงว่ากรองตามสาขา (ISFILTERED = TRUE) แล้ว หากกรอง ให้คำนวณเฉพาะสาขานั้น หากไม่กรอง ให้คำนวณทั้งหมด นี่ช่วยสร้าง Report ที่ชาญฉลาดและ Responsive ต่อการกรองของผู้ใช้ได้ดีมาก
ส่วนตัวผมถือว่า ISFILTERED เป็น “Controller” ของ DAX ที่บอกให้รู้ว่าลูกค้ากำลังกรองอะไรอยู่ด้วยตอนนี้ ถ้าเข้าใจการใช้งาน ISFILTERED กับ IF และ CALCULATE คุณสามารถสร้าง Measures ที่ “ฉลาด” ได้ สามารถปรับตัวเองตามการกรองของผู้ใช้ได้อัตโนมัติ นี่คือความแตกต่างระหว่าง Static Report กับ Dynamic Report ที่ดี
ฟังก์ชันนี้ส่งค่า TRUE เมื่อผู้ใช้เลือกสี เช่น คลิกเลือก "Red" หรือ "Blue" ในตัวกรอง จะส่งค่า FALSE เมื่อไม่มีการเลือก (แสดงทุกสี)
ใช้ IF กับ ISFILTERED เพื่อแสดงข้อความแตกต่างกัน ถ้ากรองตามปี จะบอกปีที่กรอง ถ้าไม่กรอง จะแสดง "All Years" ช่วยให้ผู้ใช้เห็นว่าตัวเองกำลังดูข้อมูลอะไรอยู่
ถ้า Region ถูกกรอง ให้แสดงยอดขายเฉพาะภูมิภาคนั้น ถ้าไม่กรอง ให้แสดงยอดขายทั้งหมด (ใช้ ALL เพื่อลบการกรอง) ตัวอย่างนี้ใช้ VAR เพื่อให้อ่านง่ายขึ้น
ตัวอย่างนี้แสดงว่า ISFILTERED สามารถใช้เพื่อคำนวณค่า (Formula) แตกต่างกันตามการกรอง ช่วยสร้าง Conditional Logic ที่ยืดหยุ่นในหน่วยวัด
ISFILTERED ตรวจสอบว่าคอลัมน์ถูกกรองโดยตรง (Direct Filter) เท่านั้น เช่นผู้ใช้คลิกเลือกค่า ส่วน ISCROSSFILTERED ตรวจสอบทั้งการกรองโดยตรง AND การกรองทางอ้อม (Cross Filter) ที่มาจากตารางที่เกี่ยวข้อง ตัวอย่าง: ถ้าเลือก Category = "Electronics" (Direct) ISFILTERED กับ ISCROSSFILTERED ทั้งคู่ส่งค่า TRUE แต่ถ้า Category ถูกกรองมาจาก Related Table (Cross Filter) เช่น กรองจาก Product Table ผ่าน Relationship ISCROSSFILTERED จะส่งค่า TRUE แต่ ISFILTERED จะส่งค่า FALSE
ได้ แต่ต้องระวัง Calculated Column ทำงานใน Row Context ที่เปลี่ยน Filter Context ไปแล้ว ดังนั้น ISFILTERED ในคอลัมน์ที่คำนวณมักส่งค่า FALSE เสมอ เนื่องจาก Filter Context ยังไม่ได้ถูกกำหนด ถ้าต้องการใช้ ISFILTERED ให้ใช้ใน Measures หรือ Visual Calculation แทน
หมายความว่าไม่มีตัวกรองโดยตรง (Direct Filter) ที่ใช้กับคอลัมน์นั้น แต่อาจมี Cross Filter จากตารางอื่นอยู่ได้ ตัวอย่าง: ถ้าเลือก Region แล้ว Territory Table ถูกกรอง แต่ Product[Color] ไม่ถูกเลือก แล้ว ISFILTERED(Product[Color]) จะส่งค่า FALSE เพราะไม่มีการกรองโดยตรงที่ Product[Color]
ISFILTERED ตรวจสอบ Filter Context ที่มีอยู่ในตอนที่ Measure ถูกคำนวณ ถ้ามี Filter Context ที่ใช้กับคอลัมน์ที่ระบุ ISFILTERED จะส่งค่า TRUE ถ้าไม่มี จะส่งค่า FALSE Context Transition จะเกิดขึ้นเมื่อ Measure ถูกใช้ใน Row Context (เช่นตารางที่มี Row) และจะแปลง Row Context เป็น Filter Context
ได้ ใช้ ISFILTERED เพื่อสร้าง Dynamic Measures ที่ควบคุมการแสดงผล ตัวอย่าง: ถ้า ISFILTERED(Date[Month]) = TRUE แล้ว ให้แสดงรายละเอียดของเดือนนั้น ถ้าไม่กรอง ให้แสดงสรุปรายปี วิธีนี้ช่วยให้ Report เปลี่ยนแปลงตามการกรองของผู้ใช้โดยอัตโนมัติ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ ISFILTERED จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
EVALUATEANDLOG คำนวณนิพจน์และส่งผลลัพธ์ไปยัง log สำหรับการตรวจสอบและดีบัก ทำให้เห็นค่าระหว่างกลางของการคำนวณ DAX โดยไม่ต้องเขียนตารางชั่วคราว
ตรวจว่าคอลัมน์ถูก filter โดยตรงให้เหลือค่าเดียวหรือไม่ เหมาะกับการควบคุมการแสดงผลตามสถานะการเลือกของผู้ใช้
HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้
ALL มีพฤติกรรมแตกต่างกัน 2 แบบ: ใช้เป็น Table Expression จะคืนทุกแถวในตาราง หรือทุกค่าในคอลัมน์ โดยไม่สนใจ Filter ใดๆ เหมาะสำหรับใช้ร่วมกับ FILTER, COUNTROWS, SUMMARIZE หรือใช้เป็น CALCULATE Modifier เพื่อลบ Filter ออกจากตารางหรือคอลัมน์ที่ระบุ ทำให้สามารถคำนวณ Grand 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
FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่ผู้ใช้เลือกจากตัวแบ่งส่วนข้อมูล ต่างจาก ALL/ALLEXCEPT ที่เคลียร์ตัวกรอง FILTERS ช่วยตรวจสอบและจัดการบริบทตัวกรองอย่างชาญฉลาด
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่