---
title: COUNTX – นับจำนวนแถวจากนิพจน์ที่คำนวณต่อแถว
url: https://www.thepexcel.com/functions/dax/aggregation/countx-dax/
type: function-explainer
program: DAX
syntax: "COUNTX(<table>, <expression>)"
date: 2025-12-13
updated: 2025-12-23
scores:
  popularity: 6
  difficulty: 5
  usefulness: 6
---

# COUNTX – นับจำนวนแถวจากนิพจน์ที่คำนวณต่อแถว

> COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่

## คำอธิบาย

COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ

## Syntax

```excel
COUNTX(&lt;table&gt;, &lt;expression&gt;)
```

**Variant**

```excel
COUNTX(&lt;table&gt;, &lt;expression&gt;)
```

คำนวณ expression ต่อแถว แล้วนับจำนวนผลลัพธ์ที่ไม่ว่าง

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| table | Yes | table |  | ตารางที่ต้องการไล่ประเมินทีละแถว เช่น Sales, Product หรือผลลัพธ์จาก FILTER |
| expression | Yes | scalar |  | นิพจน์ที่ประเมินในแต่ละแถว ต้องได้ผลเป็นค่าสเกลาร์ (ตัวเลข ข้อความ วันที่ ฯลฯ) ส่วน TRUE/FALSE ใช้ COUNTAX แทน |

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

### นับจำนวนแถวที่คำนวณยอดต่อบรรทัดได้

เช่น จำนวนแถวที่ (จำนวน * ราคา) ได้ผลลัพธ์ไม่ว่าง

_เหมาะกับ:_ countx-line-amount

### นับจำนวนค่าที่ได้จากนิพจน์ต่อแถวในตารางที่ถูกกรอง

ใช้กับตารางที่ถูกกรอง/สรุปมาแล้ว เพื่อควบคุมแถวที่ถูกนับ

_เหมาะกับ:_ countx-on-filtered-table

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: นับจำนวนแถวที่มี Line Amount ไม่ว่าง

```excel
Count Items Sold =
COUNTX(
    Sales,
    Sales[Quantity] * Sales[UnitPrice]
)
```

**ผลลัพธ์:** `จำนวนแถวที่มี Line Amount ไม่ว่าง เช่น 450 แถว`

COUNTX ประเมินการคำนวณ Quantity * UnitPrice ในแต่ละแถว แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง สิ่งนี้มีประโยชน์เมื่อคอลัมน์ Line Amount ไม่ได้อยู่ในตารางจริง ๆ

### 2. ตัวอย่างที่ 2: นับจำนวนลูกค้าที่มีอัตราส่วน (with DIVIDE)

```excel
Customers with Valid Ratio =
COUNTX(
    Customer,
    DIVIDE(Customer[TotalPurchase], Customer[AvgOrderValue], 0)
)
```

**ผลลัพธ์:** `จำนวนลูกค้าที่สามารถคำนวณอัตราส่วนได้ (ไม่ BLANK) เช่น 1250 คน`

DIVIDE ส่งคืน 0 เมื่อตัวหารเป็น 0 แต่ถ้าเราใช้ DIVIDE(..., BLANK()) แล้ว COUNTX จะนับแค่แถวที่อัตราส่วนเป็นจริง

### 3. ตัวอย่างที่ 3: นับจำนวนสินค้าในหมวดนั้น ๆ ที่มีราคา

```excel
Active Products in Category =
COUNTX(
    FILTER(Product, Product[Category] = "Electronics"),
    Product[ListPrice]
)
```

**ผลลัพธ์:** `จำนวนสินค้า Electronics ที่มีราคากำหนด เช่น 82 รายการ`

ใช้ FILTER เพื่อกรองตารางให้แสดงเฉพาะ Electronics แล้ว COUNTX นับว่ามีกี่รายการ (ที่มี ListPrice ไม่ว่าง)

### 4. ตัวอย่างที่ 4: นับจำนวนแถวที่มีข้อมูล shipping address ไม่ว่าง

```excel
Orders with Shipping Address =
COUNTX(
    Sales,
    Sales[ShippingAddress]
)
```

**ผลลัพธ์:** `จำนวนออร์เดอร์ที่มีที่อยู่จัดส่ง เช่น 5,340 ออร์เดอร์`

COUNTX นำไปใช้กับข้อความและค่าประเภทอื่น ๆ ได้ ไม่ใช่แค่ตัวเลข นับแค่แถวที่ ShippingAddress ไม่ว่างเท่านั้น

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

- COUNTX เป็น iterator ดังนั้นอาจช้าเมื่อตารางมีแถวเยอะ ลองเช็ค DAX Studio เพื่อดู query time

- ใช้ DIVIDE(..., 0) หรือ DIVIDE(..., BLANK()) เพื่อควบคุมว่า COUNTX นับอะไร ขึ้นกับว่าต้องการผลลัพธ์ไร

- ใช้ VAR เพื่อเก็บผลลัพธ์ของ FILTER ก่อน แล้วส่งให้ COUNTX จะอ่านง่ายขึ้น

- COUNTX ทำงานได้กับคอลัมน์ที่มี blank value ผสมอยู่ เพราะจะนับแค่ไม่ว่าง

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

**Q: COUNTX ต่างจาก COUNT อย่างไร?**

COUNT นับเฉพาะค่าตัวเลขในคอลัมน์ (ไม่นับข้อความหรือวันที่) ส่วน COUNTX ให้นับจากนิพจน์ที่คำนวณต่อแถว ยืดหยุ่นมากขึ้น

**Q: COUNTX ต่างจาก COUNTA อย่างไร?**

COUNTA นับค่าที่ไม่ว่างในคอลัมน์ (ข้อความ ตัวเลข วันที่ ฯลฯ) ส่วน COUNTX นับจากนิพจน์ที่คำนวณ ถ้าแค่นับคอลัมน์ง่าย ๆ ให้ใช้ COUNTA ที่เร็วกว่า

**Q: COUNTX ต่างจาก COUNTAX อย่างไร?**

COUNTX ใช้กับข้อมูลตัวเลข ข้อความ วันที่ ส่วน COUNTAX นำไปใช้กับ Boolean (TRUE/FALSE) ได้ ถ้าคำนวณแล้วได้ TRUE/FALSE ให้ใช้ COUNTAX

**Q: ทำไม COUNTX อาจจะช้ากว่าฟังก์ชันอื่น?**

COUNTX เป็น iterator: มันต้องไล่ประเมินนิพจน์ในแต่ละแถว ถ้าตารางมี 1 ล้านแถว มันประเมิน 1 ล้นครั้ง ถ้าแค่นับคอลัมน์ง่าย ๆ ให้ใช้ COUNT/COUNTA

**Q: ใช้ COUNTX ร่วมกับ FILTER ได้ไหม?**

ได้ เหมาะมาก COUNTX(FILTER(...), expression) ใช้ FILTER เพื่อกรองแถวก่อน แล้วให้ COUNTX นับเฉพาะที่กรองแล้ว

**Q: COUNTX ส่งคืน BLANK ได้ไหม?**

ได้ ถ้าทุกแถวประเมินแล้วได้ BLANK (เช่น DIVIDE ที่ตัวหารเป็น 0 ทั้งหมด) COUNTX ก็ส่งคืน BLANK

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

- [Microsoft Learn: COUNTX](https://learn.microsoft.com/en-us/dax/countx-function-dax) _(official)_
- [DAX Guide: COUNTX](https://dax.guide/countx/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/dax/aggregation/countx-dax/](https://www.thepexcel.com/functions/dax/aggregation/countx-dax/)_
