ISFILTERED ตรวจสอบว่าคอลัมน์ที่ระบุมีตัวกรองโดยตรงหรือไม่ ใช้เพื่อสร้าง Dynamic Measures ที่เปลี่ยนพฤติกรรมตามการกรองของผู้ใช้
=ISFILTERED(<ColumnName>)
=ISFILTERED(<ColumnName>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| ColumnName | column reference | Yes | ไม่มี – จำเป็นต้องระบุ | คอลัมน์ที่ต้องการตรวจสอบว่ามีตัวกรองโดยตรง เช่น Product[Color], Date[Year], Territory[Region] |
ISFILTERED(Product[Color])=ISFILTERED(Product[Color])
TRUE (ถ้าผู้ใช้เลือกสีใดสีหนึ่ง) หรือ FALSE (ไม่มีการกรองตามสี)
IF(ISFILTERED(Date[Year]), "Year: " & MAX(Date[Year]), "All Years")=IF(ISFILTERED(Date[Year]),
"Year: " & MAX(Date[Year]),
"All Years")
"Year: 2024" (ถ้ากรองตามปี) หรือ "All Years" (ถ้าไม่กรอง)
VAR RegionFiltered = ISFILTERED(Territory[Region]) VAR RegionSales = [Sales] VAR AllRegionSales = CALCULATE([Sales], ALL(Territory[Region])) RETURN IF(RegionFil…VAR RegionFiltered = ISFILTERED(Territory[Region])
VAR RegionSales = [Sales]
VAR AllRegionSales = CALCULATE([Sales], ALL(Territory[Region]))
RETURN
IF(RegionFiltered, RegionSales, AllRegionSales)
ยอดขายของภูมิภาคที่กรอง (ถ้ากรอง) หรือยอดขายทั้งหมด (ถ้าไม่กรอง)
VAR FilterStatus = ISFILTERED(Product[Category]) RETURN IF(FilterStatus, SUM(Sales[Amount]), SUM(Sales[Amount]) + 100)VAR FilterStatus = ISFILTERED(Product[Category])
RETURN
IF(FilterStatus,
SUM(Sales[Amount]),
SUM(Sales[Amount]) + 100)
ยอดขายตามการกรอง หรือยอดขายบวก 100 เมื่อไม่มีการกรอง
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 คือฟังก์ชันสำคัญสำหรับตรวจจับการกรองโดยตรง (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 ที่ดี