---
title: COUNTROWS – นับจำนวนแถวในตารางและเทบิลเสมือน
url: https://www.thepexcel.com/functions/dax/aggregation/countrows-dax/
type: function-explainer
program: DAX
syntax: "COUNTROWS(<table>)"
date: 2025-12-13
updated: 2025-12-21
scores:
  popularity: 9
  difficulty: 2
  usefulness: 9
---

# COUNTROWS – นับจำนวนแถวในตารางและเทบิลเสมือน

> COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดล

## คำอธิบาย

COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ

## Syntax

```excel
COUNTROWS(&lt;table&gt;)
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| table | Yes | table |  | ตารางที่ต้องการนับจำนวนแถว อาจเป็นตารางจริง (Sales, Customers) หรือตารางเสมือนจากฟังก์ชัน (FILTER, VALUES, DISTINCT, GENERATE) |

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

### นับจำนวนแถวหลังกรองด้วยเงื่อนไข

ใช้ COUNTROWS ครอบตารางที่ได้จาก FILTER เพื่อวัดจำนวนรายการที่ผ่านเงื่อนไข

_เหมาะกับ:_ conditional-count

### นับจำนวนค่าที่ไม่ซ้ำ (Distinct Count แบบยืดหยุ่น)

ใช้ COUNTROWS(VALUES(Column)) เพื่อนับจำนวนค่าที่ไม่ซ้ำในบริบทปัจจุบัน โดยสามารถต่อยอดด้วยการกรองตารางก่อนนับได้

_เหมาะกับ:_ distinct-count

## ตัวอย่าง

### 1. นับแถวทั้งหมดในตาราง (ภายใต้ Filter Context)

```excel
Total Orders =
COUNTROWS( Sales )
```

**ผลลัพธ์:** `2,452`

ถ้าตาราง Sales มี 2,452 แถว จะคืนค่า 2,452 ถ้ามีการเลือก 'Region = North' จากหน้าจอ ก็นับเฉพาะแถวใน Sales ที่เป็น Region North เท่านั้น COUNTROWS ศึกษา Filter Context โดยอัตโนมัติ

### 2. นับแถวที่ผ่านเงื่อนไขด้วย FILTER

```excel
Large Orders =
COUNTROWS(
    FILTER(
        Sales,
        Sales[Amount] > 5000
    )
)
```

**ผลลัพธ์:** `185`

FILTER สร้างตารางเสมือนของแถว Sales ที่ Amount > 5,000 จากนั้น COUNTROWS นับจำนวนแถวของตารางเสมือนนั้น ผลลัพธ์คือจำนวน Order ที่มียอดเงินมากกว่า 5,000 บาท

### 3. นับค่าที่ไม่ซ้ำกัน (DISTINCTCOUNT ทางเลือก)

```excel
Unique Customers =
COUNTROWS(
    VALUES( Sales[CustomerID] )
)
```

**ผลลัพธ์:** `528`

VALUES สร้างตารางเสมือนของ CustomerID ที่ไม่ซ้ำ COUNTROWS นับแถวของตารางนั้น ผลลัพธ์คือจำนวนลูกค้าที่ไม่ซ้ำ นี่คือวิธี COUNTROWS + VALUES = DISTINCTCOUNT แต่ยืดหยุ่นมากขึ้น

### 4. นับแถวเสมือนเชิงซ้อนด้วย VAR

```excel
High Value Customer Count =
VAR FilteredOrders = 
    FILTER(
        Sales,
        Sales[Amount] > CALCULATE(AVERAGE(Sales[Amount]), ALL(Sales))
    )
VAR UniqueCustInLargeOrders = 
    COUNTROWS(
        VALUES(
            SELECTCOLUMNS(
                FilteredOrders,
                "CID", Sales[CustomerID]
            )
        )
    )
RETURN
    UniqueCustInLargeOrders
```

**ผลลัพธ์:** `287`

ตัวอย่างที่ซับซ้อนขึ้น: ก่อนอื่นกรอง Sales ให้เหลือเฉพาะแถวที่ Amount มากกว่าค่าเฉลี่ยทั้งหมด จากนั้นใช้ SELECTCOLUMNS เพื่อเลือกเฉพาะคอลัมน์ CustomerID แล้ว VALUES เพื่อให้ได้ค่า Unique ของ CustomerID สุดท้าย COUNTROWS นับจำนวนลูกค้าที่ไม่ซ้ำในกลุ่มคำสั่งขนาดใหญ่ นี่คือการรวมกำลัง Filter + SELECTCOLUMNS + VALUES + COUNTROWS

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

- COUNTROWS แทน COUNT: เร็ว ถูกต้อง และให้ผลลัพธ์ที่คาดหวัง Microsoft แนะนำเสมอ

- COUNTROWS + FILTER + VALUES = ได้ DISTINCTCOUNT แต่ยืดหยุ่นมากขึ้น

- COUNTROWS(ALL(table)) = นับสากล ไม่สนใจตัวกรองจากหน้าจอ

- ระวัง COUNTROWS ส่ง BLANK ไม่ใช่ 0 เมื่อตารางว่างเปล่า

- ใช้ VAR เก็บตารางเสมือนเพื่อ reuse และโค้ดชัดเจน

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

**Q: COUNTROWS ต่างจาก COUNT อย่างไร? ควรใช้ตัวไหน?**

Microsoft Best Practice: ใช้ COUNTROWS แทน COUNT เสมอ COUNTROWS นับแถว (Rows) ทั้งหมด COUNT นับเฉพาะค่าตัวเลขที่ไม่ใช่ BLANK จึงข้ามแถวที่มี BLANK ไป ใช้ COUNT เฉพาะเมื่อต้องการยกเว้น BLANK โดยเฉพาะ หรือต้องการนับค่าตัวเลขในคอลัมน์ COUNTROWS ที่นอกจากเร็วกว่า ยังให้ผลถูกต้องที่สุด

**Q: ทำไมบางครั้ง COUNTROWS(VALUES(Column)) รวมค่า BLANK เข้ามา?**

เพราะว่า VALUES รวมค่า BLANK เข้ามาด้วย ถ้าคอลัมน์มี BLANK จริง ๆ VALUES จะคืนค่า BLANK เป็นแถวหนึ่ง จากนั้น COUNTROWS ก็นับ BLANK แถวนั้นด้วย หากต้องการหลีกเลี่ยงให้กรอง BLANK ออกด้วย FILTER: COUNTROWS(FILTER(VALUES(Column), NOT(ISBLANK(Column))))

**Q: COUNTROWS กับ COUNTA/COUNTAX ต่างกันหรือ?**

COUNTROWS นับแถว COUNTA นับเซลล์ที่ไม่ใช่ BLANK ใน 'คอลัมน์' COUNTAX คือ iterator (วนลูป) นับแล้ว evaluate expression ในแต่ละแถว ส่วนใหญ่ใช้ COUNTROWS เพราะเร็วและชัดเจน COUNTAX ใช้เมื่อต้องนับแบบมีเงื่อนไขเชิงซับซ้อน

**Q: COUNTROWS ส่งค่า 0 หรือ BLANK เมื่อตารางว่างเปล่า?**

ส่ง BLANK (ไม่ใช่ 0) ถ้าตารางไม่มีแถวเลย COUNTROWS(FILTER(Sales, Sales[Amount] > 1000000)) ถ้าไม่มี Order ที่มากกว่า 1 ล้าน ผลลัพธ์คือ BLANK ไม่ใช่ 0 ที่สำคัญ: BLANK ≠ 0 ให้ระวัง

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

- [FILTER – กรองตารางด้วยเงื่อนไขที่ซับซ้อน (Iterator Function)](https://www.thepexcel.com/functions/dax/filter/filter-dax/)
- [VALUES – ดึงค่าที่ไม่ซ้ำจากคอลัมน์ (รวม Blank จากข้อผิดพลาดความสัมพันธ์)](https://www.thepexcel.com/functions/dax/table-manipulation/values-dax/)
- [DISTINCT – ดึงรายการที่ไม่ซ้ำ (Unique Values) พร้อมหลีกหนีค่า Blank Row](https://www.thepexcel.com/functions/dax/table-manipulation/distinct-dax/)
- [DISTINCTCOUNT – นับจำนวนค่าเอกลักษณ์ในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/distinctcount-dax/)
- [COUNT – นับจำนวนแถวที่มีค่าไม่ว่างในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/count-dax/)
- [COUNTA – นับค่าไม่ว่างทุกชนิดในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/counta-dax/)
- [COUNTAX – นับผลลัพธ์ไม่ว่างจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/countax-dax/)
- [SELECTCOLUMNS – ฟังก์ชัน DAX](https://www.thepexcel.com/functions/dax/table-manipulation/selectcolumns-dax/)
- [ALL – ลบ Filter หรือคืนค่าทุกแถว](https://www.thepexcel.com/functions/dax/filter/all-dax/)

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

- [DAX Guide: COUNTROWS](https://dax.guide/countrows/) _(guide)_
- [Microsoft Learn: COUNTROWS Function](https://learn.microsoft.com/en-us/dax/countrows-function-dax) _(official)_
- [Microsoft Best Practices: Use COUNTROWS instead of COUNT](https://learn.microsoft.com/en-us/dax/best-practices/dax-countrows) _(official)_
- [SQLBI: Counting Rows in DAX](https://www.sqlbi.com/articles/row-context-and-filter-context-in-dax/) _(guide)_

---

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