---
title: COUNT – นับจำนวนแถวที่มีค่าไม่ว่างในคอลัมน์
url: https://www.thepexcel.com/functions/dax/aggregation/count-dax/
type: function-explainer
program: DAX
syntax: "COUNT(<column>)"
date: 2025-12-18
scores:
  popularity: 9
  difficulty: 2
  usefulness: 9
---

# COUNT – นับจำนวนแถวที่มีค่าไม่ว่างในคอลัมน์

> นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (ตัวเลข วันที่ ข้อความ)

## คำอธิบาย

COUNT นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (non-blank) รองรับตัวเลข วันที่ และข้อความ แต่ไม่นับ Boolean ทำงานภายใต้ filter context และเกิด context transition เมื่อใช้ใน row context เหมาะสำหรับนับรายการที่มีข้อมูลในคอลัมน์เฉพาะ แต่ควรใช้ COUNTROWS แทนเมื่อนับแถวทั้งหมด

## Syntax

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

**Variant**

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

นับจำนวนค่าที่ไม่ว่างในคอลัมน์ที่ระบุ

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| column | Yes | column |  | คอลัมน์ที่ต้องการนับจำนวนค่า รองรับประเภทตัวเลข วันที่ และข้อความ ต้องอ้างอิงด้วย Table[Column] syntax เช่น Sales[Amount] หรือ Orders[ShipDate] ไม่รองรับ Boolean และไม่สามารถใช้ expression ที่ซับซ้อนได้ |

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

### นับจำนวนรายการที่มียอดขาย

นับจำนวนออเดอร์ที่มีการระบุยอดเงินจริง ไม่นับออเดอร์ที่ Amount ยังเป็น BLANK

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

### นับจำนวนวันที่มีธุรกรรม

นับจำนวนวันที่มีการบันทึกข้อมูลจริง ใช้สำหรับ KPI ที่ต้องรู้จำนวนวันที่มีข้อมูล

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

### Data Quality Analysis

เปรียบเทียบ COUNT กับ COUNTROWS เพื่อตรวจสอบความสมบูรณ์ของข้อมูล หาแถวที่มีค่าว่าง

_เหมาะกับ:_ data-completeness-check

### นับรายการตามเงื่อนไขด้วย CALCULATE

ใช้ COUNT ร่วมกับ CALCULATE เพื่อนับจำนวนรายการที่ตรงเงื่อนไขเฉพาะ เช่น High Value Transactions

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

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: Basic COUNT - นับจำนวนรายการที่มียอดขาย

```excel
Sales Record Count = 
COUNT(Sales[Amount])

// Context: Sales table มี Amount column เก็บยอดเงิน
// Result: คืนจำนวนแถวที่ Amount ไม่ว่าง เช่น 1,234
```

**ผลลัพธ์:** `คืนจำนวนแถวที่ Sales[Amount] ไม่ว่าง ตัวอย่าง: 1,234 แถว`

COUNT นับเฉพาะแถวที่คอลัมน์มีค่า ถ้า Sales table มี 1,500 แถวแต่มี 266 แถวที่ Amount เป็น BLANK ผลลัพธ์จะเป็น 1,234
.
ฟังก์ชันนี้ทำงานภายใต้ filter context ปัจจุบัน ดังนั้นเมื่อใช้ใน visual ที่มี slicer เลือก Year = 2024 ผลลัพธ์จะนับเฉพาะแถวปี 2024 ที่มี Amount ครับ

### 2. ตัวอย่างที่ 2: COUNT กับ CALCULATE - นับตามเงื่อนไขเฉพาะ

```excel
High Value Sales Count =
CALCULATE(
    COUNT(Sales[Amount]),
    Sales[Amount] > 1000
)

// Context: นับเฉพาะ sales ที่มียอดมากกว่า 1,000
// Result: จำนวนรายการที่ Amount > 1000
```

**ผลลัพธ์:** `คืนจำนวนแถวที่ Sales[Amount] มากกว่า 1,000 ตัวอย่าง: 234 แถว`

CALCULATE เปลี่ยน filter context โดยเพิ่ม filter condition Sales[Amount] > 1000 ทำให้ COUNT นับเฉพาะแถวที่ยอดขายสูง
.
วิธีนี้เหมาะสำหรับสร้าง KPI เช่น "High Value Transactions" หรือ "Premium Orders" โดยไม่ต้องสร้างคอลัมน์เพิ่มใน data model
.
ผลลัพธ์ยังคงตอบสนองต่อ slicer อื่น ๆ ใน report ครับ 📊

### 3. ตัวอย่างที่ 3: COUNT กับ Filter Context - นับตาม Category

```excel
Sales Count by Category =
COUNT(Sales[Amount])

// Context: ใช้ใน visual ที่มี Products[Category] เป็น axis
// Sales table มี relationship กับ Products table
// Result: ผลลัพธ์แยกตาม Category (Electronics: 456, Furniture: 312)
```

**ผลลัพธ์:** `ผลลัพธ์เปลี่ยนตาม filter context: Electronics = 456, Furniture = 312, Clothing = 466`

COUNT ทำงานภายใต้ filter context ของ visual เมื่อสร้าง table visual ที่มี Products[Category] เป็น column DAX engine จะสร้าง filter context สำหรับแต่ละ Category อัตโนมัติ
.
ผลลัพธ์จึงแตกต่างกันในแต่ละแถว นี่คือ filter context propagation ผ่าน relationship ระหว่าง Sales และ Products table ซึ่งเป็นจุดเด่นของ DAX เลยครับ 😎

### 4. ตัวอย่างที่ 4: Data Quality Check - เปรียบเทียบ COUNT กับ COUNTROWS

```excel
Data Completeness % =
VAR TotalRows = COUNTROWS(Sales)
VAR FilledRows = COUNT(Sales[Amount])
VAR MissingRows = TotalRows - FilledRows
VAR CompletenessPercent = DIVIDE(FilledRows, TotalRows, 0)
RETURN
    CompletenessPercent

// Context: คำนวณเปอร์เซ็นต์ความสมบูรณ์ของข้อมูล
// Result: 0.824 หมายถึง 82.4% ของแถวมี Amount
```

**ผลลัพธ์:** `คืน 0.824 หมายถึง 82.4% ของแถวมีข้อมูล Amount (1,234 จาก 1,500 แถว)`

ใช้ VAR เก็บ intermediate result เพื่อให้ formula อ่านง่าย COUNTROWS นับแถวทั้งหมด (1,500) COUNT นับแถวที่มี Amount (1,234) ส่วนต่าง 266 แถวคือแถวที่ Amount เป็น BLANK
.
DIVIDE คำนวณเปอร์เซ็นต์และป้องกัน division by zero ด้วย argument ที่ 3 = 0
.
วิธีนี้เหมาะสำหรับ data quality monitoring ก่อนสร้าง production report ส่วนตัวผมใช้เทคนิคนี้ตรวจสอบข้อมูลก่อนส่ง report ให้ลูกค้าเสมอครับ 📝

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

💡 **Tip**: Microsoft แนะนำให้ใช้ COUNTROWS แทน COUNT เมื่อต้องการนับจำนวนแถวของตาราง เพราะ COUNTROWS มี performance ดีกว่าและไม่ขึ้นกับว่าคอลัมน์ที่เลือกมี BLANK หรือไม่
.
COUNT มีประโยชน์เมื่อต้องการนับเฉพาะแถวที่คอลัมน์เฉพาะมีค่า เช่น นับ sales ที่มี Amount (ไม่นับ BLANK)
.
นอกจากนี้ COUNT จะเกิด context transition เมื่อใช้ใน row context (เช่นใน calculated column) ทำให้ row context กลายเป็น filter context ซึ่งอาจส่งผลต่อ performance ได้
.
ส่วนตัวผมแนะนำให้ใช้ COUNTROWS เป็นตัวเลือกแรกเสมอ แล้วค่อยมาใช้ COUNT เฉพาะเมื่อต้องการตรวจสอบ BLANK ครับ 😎

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

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

COUNT และ COUNTA ใน DAX ทำงานเหมือนกันเกือบทุกกรณี ความแตกต่างเดียวคือ COUNTA นับค่า Boolean (TRUE/FALSE) ได้ แต่ COUNT นับไม่ได้
.
ถ้าคอลัมน์เป็น Boolean ต้องใช้ COUNTA แทนนะครับ สำหรับตัวเลข วันที่ และข้อความ ทั้งสองฟังก์ชันนับได้เหมือนกัน
.
นอกจากนี้ทั้งสองฟังก์ชันยังนับ empty string ("") เป็นค่าที่ไม่ว่างด้วย

**Q: เมื่อไหร่ควรใช้ COUNT และเมื่อไหร่ควรใช้ COUNTROWS?**

ใช้ COUNTROWS เมื่อต้องการนับจำนวนแถวทั้งหมดของตาราง เพราะ performance ดีกว่า ชัดเจนกว่า และไม่ขึ้นกับว่าคอลัมน์ใดมี BLANK
.
ใช้ COUNT เฉพาะเมื่อต้องการนับแถวที่คอลัมน์เฉพาะมีค่า เช่น นับจำนวนออเดอร์ที่มีการระบุยอดเงิน (ไม่นับออเดอร์ที่ Amount ว่าง)
.
Microsoft แนะนำให้ใช้ COUNTROWS แทน COUNT เสมอเมื่อนับแถวทั้งหมดนะครับ 😎

**Q: COUNT นับ empty string ("") หรือไม่?**

ใช่ครับ COUNT นับ empty string ("") เป็นค่าที่ไม่ว่าง ถ้าคอลัมน์ข้อความมีค่า "" จะถูกนับใน COUNT
.
นี่ต่างจาก BLANK ที่จะไม่ถูกนับ ความแตกต่างนี้สำคัญเมื่อทำ data cleaning เพราะ empty string และ BLANK ไม่ใช่สิ่งเดียวกันใน DAX เลยนะครับ

**Q: ถ้าต้องการนับจำนวนค่าว่าง (BLANK) ควรใช้ฟังก์ชันไหน?**

ใช้ COUNTBLANK เพื่อนับจำนวน BLANK ในคอลัมน์โดยตรง
.
หรือใช้ COUNTROWS - COUNT เพื่อคำนวณจำนวนแถวที่มีค่าว่าง เช่น Missing Amount = COUNTROWS(Sales) - COUNT(Sales[Amount]) จะบอกจำนวนแถวที่ Amount เป็น BLANK
.
ส่วนตัวผมชอบใช้วิธีที่สองเพราะเห็นภาพชัดกว่าครับ 📊

**Q: COUNT ใน DAX ต่างจาก COUNT ใน Excel อย่างไร?**

COUNT ใน Excel นับเฉพาะตัวเลข แต่ COUNT ใน DAX นับทั้งตัวเลข วันที่ และข้อความ (ไม่นับ Boolean)
.
นอกจากนี้ COUNT ใน DAX ทำงานภายใต้ filter context ของ visual ทำให้ผลลัพธ์เปลี่ยนตาม slicer และ filter ต่าง ๆ อัตโนมัติ ส่วน COUNT ใน Excel เป็น worksheet function ที่นับเฉพาะ range ที่ระบุ
.
พอมาใช้ DAX ต้องปรับความคิดใหม่นิดนึงนะครับ 😅

**Q: ทำไม COUNT บางครั้งคืนค่า BLANK แทนที่จะเป็น 0?**

COUNT คืนค่า BLANK เมื่อไม่มีแถวใดที่ตรงเงื่อนไข filter context ปัจจุบัน
.
นี่ช่วยแยก "ไม่มีข้อมูล" (BLANK) ออกจาก "มีข้อมูลแต่นับได้ 0 แถว" ซึ่งเป็นสิ่งที่แตกต่างกัน
.
ถ้าต้องการแปลง BLANK เป็น 0 ใช้ COUNT(Sales[Amount]) + 0 หรือ IF(ISBLANK(COUNT(Sales[Amount])), 0, COUNT(Sales[Amount])) ครับ

**Q: ถ้าต้องการนับตามเงื่อนไขที่ซับซ้อน ควรใช้ฟังก์ชันไหน?**

ใช้ COUNTX หรือ COUNTAX เพื่อนับโดยใช้ expression ที่คำนวณต่อแต่ละแถว หรือใช้ CALCULATE(COUNT(...), filter conditions) เพื่อนับภายใต้เงื่อนไขที่กำหนด
.
COUNTX เหมาะสำหรับ expression ที่ซับซ้อน เช่น COUNTX(Sales, IF(Sales[Quantity] * Sales[Price] > 1000, 1))
.
ส่วน CALCULATE เหมาะสำหรับ filter condition ที่ชัดเจน ส่วนตัวผมชอบใช้ CALCULATE เพราะอ่านง่ายกว่าครับ 😎

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

- [COUNTROWS – นับจำนวนแถวในตารางและเทบิลเสมือน](https://www.thepexcel.com/functions/dax/aggregation/countrows-dax/)
- [COUNTA – นับค่าไม่ว่างทุกชนิดในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/counta-dax/)
- [COUNTX – นับจำนวนแถวจากนิพจน์ที่คำนวณต่อแถว](https://www.thepexcel.com/functions/dax/aggregation/countx-dax/)
- [COUNTAX – นับผลลัพธ์ไม่ว่างจากนิพจน์แบบไล่ทีละแถว](https://www.thepexcel.com/functions/dax/aggregation/countax-dax/)
- [COUNTBLANK – นับจำนวนค่าว่าง (BLANK) ในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/countblank-dax/)
- [DISTINCTCOUNT – นับจำนวนค่าเอกลักษณ์ในคอลัมน์](https://www.thepexcel.com/functions/dax/aggregation/distinctcount-dax/)
- [CALCULATE – ฟังก์ชันหลักของ DAX ที่ควบคุม Filter Context](https://www.thepexcel.com/functions/dax/filter/calculate-dax/)

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

- [COUNT function - DAX | Microsoft Learn](https://learn.microsoft.com/en-us/dax/count-function-dax) _(documentation)_
- [Use COUNTROWS instead of COUNT - Best Practices](https://learn.microsoft.com/en-us/dax/best-practices/dax-countrows) _(documentation)_
- [COUNT - DAX Guide](https://dax.guide/count/) _(documentation)_
- [COUNTROWS - DAX Guide](https://dax.guide/countrows/) _(documentation)_

---

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