---
title: FILTERS – คืนค่าตารางของค่าที่ถูกกรองโดยตรง
url: https://www.thepexcel.com/functions/dax/table-manipulation/filters-dax/
type: function-explainer
program: DAX
syntax: "FILTERS(<column>)"
date: 2025-12-13
updated: 2025-12-24
scores:
  popularity: 5
  difficulty: 5
  usefulness: 5
---

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

> FILTERS คืนค่าเป็นตาราง (table) ของค่าที่ถูกกรองโดยตรง (direct filters) บนคอลัมน์ที่ระบุ เช่น ค่าที่

## คำอธิบาย

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

## Syntax

```excel
FILTERS(&lt;column&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| column | Yes | column |  | คอลัมน์ที่ต้องการดึง 'รายการค่าที่ถูกกรองโดยตรง' ออกมาเป็นตาราง จะคืนค่าเฉพาะค่าที่ระบุชัดเจนในตัวกรอง ไม่ใช่ค่าที่ถูกกรองผ่านความสัมพันธ์ (cross-filter) |

## เคสการใช้งาน

### ตรวจสอบว่าคอลัมน์ถูกกรองอยู่หรือไม่

นับจำนวนค่าที่ถูกกรองโดยตรงบนคอลัมน์ เพื่อแยกกรณี filtered vs not filtered

_เหมาะกับ:_ debug-filter-context

### ใช้เป็นส่วนหนึ่งของ Measure ที่ตอบสนองต่อการเลือกของผู้ใช้

นำ FILTERS ไปใช้ใน CALCULATE เพื่อให้ Measure เคารพเฉพาะค่าที่ผู้ใช้เลือกโดยตรงในคอลัมน์นั้น

_เหมาะกับ:_ interactive-measure

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: นับจำนวนค่าที่ถูกกรองโดยตรง

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

**ผลลัพธ์:** `จำนวนค่า (0, 1, 2, 3, ...) ที่ถูกเลือกโดยตรงบน Category`

ถ้าผู้ใช้ไม่ได้กรองคอลัมน์นี้โดยตรง ผลลัพธ์เป็น 0 แต่ถ้าเลือกจากตัวแบ่งส่วนข้อมูล (Slicer) จะได้จำนวนค่าที่เลือก เช่น 1 (เลือก 'Electronics') หรือ 2 (เลือก 'Electronics' และ 'Clothing')

### 2. ตัวอย่างที่ 2: สร้างสถานะว่าใช้ตัวกรองโดยตรงหรือไม่

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

**ผลลัพธ์:** `"มีการเลือก Category" หรือ "ไม่มีการเลือก Category"`

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

### 3. ตัวอย่างที่ 3: ใช้ FILTERS เป็นตัวกรองใน CALCULATE

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

**ผลลัพธ์:** `ยอดขายที่คงตัวกรองเฉพาะค่าที่ถูกกรองโดยตรงบน Category`

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

### 4. ตัวอย่างที่ 4: ตรวจสอบเงื่อนไขตัวกรองที่ซับซ้อน

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

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

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

## หมายเหตุเพิ่มเติม

- ใช้ FILTERS เพื่อ 'อ่าน' ตัวกรองโดยตรงปัจจุบัน แล้วจึงทำสิ่งอื่นต่อจากนั้น (ไม่ใช่เพื่อ 'ลบ' ตัวกรอง)

- หากต้อง 'คงตัวกรอง' ในมูลค่า CALCULATE ใช้ FILTERS() เป็นอาร์กิวเมนต์ตัวกรองแทนเพื่อรักษาตัวกรองโดยตรง

- ใช้ COUNTROWS(FILTERS(...)) เพื่อนับจำนวนค่าที่ถูกกรองโดยตรง ประโยชน์เมื่อต้องการพฤติกรรม Measure ต่างกันตามจำนวนตัวกรอง

- ในบริบท Filter Context: FILTERS ดึง 'ค่าที่ผู้ใช้เลือก' ส่วน Row Context: ใช้ยาก เพราะ Row Context ไม่มี 'ตัวกรอง' ให้ดึง

## คำถามที่พบบ่อย

**Q: FILTERS คืนค่าเป็นตารางหรือค่าเดียว?**

FILTERS คืนค่าเป็น 'ตาราง' เสมอ (เป็นรายการค่าที่ถูกกรองโดยตรง) ดังนั้นถ้าต้องการใช้เป็นเงื่อนไขหรือนับ มักใช้ COUNTROWS ครอบเพื่อแปลงเป็นตัวเลข

**Q: FILTERS กับ ALL/ALLEXCEPT ต่างกันยังไง?**

ALL/ALLEXCEPT 'เคลียร์' ตัวกรอง ส่วน FILTERS 'อ่านและคืนค่า' ตัวกรองที่มีอยู่ ดังนั้น FILTERS ใช้เมื่อต้อง 'เก็บรักษา' ตัวกรองโดยตรง ไม่ใช่เมื่อต้อง 'ลบ' มัน

**Q: FILTERS เหมาะกับงานแบบไหนมากที่สุด?**

เหมาะกับงาน: (1) ตรวจสอบบริบทตัวกรอง เช่น Debug measure, (2) สร้าง Tooltip/ข้อความไดนามิก, (3) สร้างตรรกะที่ต้องรู้ 'ผู้ใช้กรองอะไรไป' (4) ส่งตัวกรองโดยตรงเข้า CALCULATE เพื่อรักษาเงื่อนไขกรอง

**Q: FILTERS vs CALCULATE(... , Product[Category] = 'Electronics') ต่างกันไหม?**

ต่างกันสำคัญ: FILTERS('Product'[Category]) 'อ่าน' ว่าผู้ใช้เลือกหมวดหมู่อะไร แล้วคืนค่า ส่วน CALCULATE(..., 'Product'[Category]='Electronics') 'กำหนด' ตัวกรองใหม่โดยไม่สนใจการเลือกปัจจุบัน

**Q: FILTERS ใช้ได้กับคอลัมน์จากตาราง Related หรือไม่?**

ใช่ได้ แต่ต้องระวัง ถ้ากรองผ่านความสัมพันธ์ (cross-filter) FILTERS อาจไม่ได้ผลตามคาด เพราะจะคืนค่าเฉพาะ 'กรองโดยตรง' บนคอลัมน์นั้น ไม่ใช่ค่าจากการ cross-filter จากตาราง อื่น

## ฟังก์ชันที่เกี่ยวข้อง

- calculate
- all
- countrows

## แหล่งข้อมูลเพิ่มเติม

- [DAX.Guide: FILTERS](https://dax.guide/filters/) _(guide)_
- [DAX Function Reference](https://learn.microsoft.com/en-us/dax/function-reference) _(official)_
- [Filter Context vs Row Context](https://dax.guide/articles/context-transition/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/table-manipulation/filters-dax/](https://www.thepexcel.com/functions/dax/table-manipulation/filters-dax/)_
