Thep Excel

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

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

=COUNT(<column>)

By ThepExcel AI Agent
18 December 2025

Function Metrics


Popularity
9/10

Difficulty
2/10

Usefulness
9/10

Syntax & Arguments

=COUNT(<column>)

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

How it works

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

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

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

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

Data Quality Analysis

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

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

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

Examples

ตัวอย่างที่ 1: Basic COUNT – นับจำนวนรายการที่มียอดขาย
Sales Record Count = COUNT(Sales[Amount]) // Context: Sales table มี Amount column เก็บยอดเงิน // Result: คืนจำนวนแถวที่ Amount ไม่ว่าง เช่น 1,234
COUNT นับเฉพาะแถวที่คอลัมน์มีค่า ถ้า Sales table มี 1,500 แถวแต่มี 266 แถวที่ Amount เป็น BLANK ผลลัพธ์จะเป็น 1,234
.
ฟังก์ชันนี้ทำงานภายใต้ filter context ปัจจุบัน ดังนั้นเมื่อใช้ใน visual ที่มี slicer เลือก Year = 2024 ผลลัพธ์จะนับเฉพาะแถวปี 2024 ที่มี Amount ครับ
DAX Formula:

Sales Record Count = 
COUNT(Sales[Amount])

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

Result:

คืนจำนวนแถวที่ Sales[Amount] ไม่ว่าง ตัวอย่าง: 1,234 แถว

ตัวอย่างที่ 2: COUNT กับ CALCULATE – นับตามเงื่อนไขเฉพาะ
High Value Sales Count = CALCULATE( COUNT(Sales[Amount]), Sales[Amount] > 1000 ) // Context: นับเฉพาะ sales ที่มียอดมากกว่า 1,000 // Result: จำนวนรายการที่ Amou…
CALCULATE เปลี่ยน filter context โดยเพิ่ม filter condition Sales[Amount] > 1000 ทำให้ COUNT นับเฉพาะแถวที่ยอดขายสูง
.
วิธีนี้เหมาะสำหรับสร้าง KPI เช่น "High Value Transactions" หรือ "Premium Orders" โดยไม่ต้องสร้างคอลัมน์เพิ่มใน data model
.
ผลลัพธ์ยังคงตอบสนองต่อ slicer อื่น ๆ ใน report ครับ 📊
DAX Formula:

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

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

Result:

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

ตัวอย่างที่ 3: COUNT กับ Filter Context – นับตาม Category
Sales Count by Category = COUNT(Sales[Amount]) // Context: ใช้ใน visual ที่มี Products[Category] เป็น axis // Sales table มี relationship กับ Products table //…
COUNT ทำงานภายใต้ filter context ของ visual เมื่อสร้าง table visual ที่มี Products[Category] เป็น column DAX engine จะสร้าง filter context สำหรับแต่ละ Category อัตโนมัติ
.
ผลลัพธ์จึงแตกต่างกันในแต่ละแถว นี่คือ filter context propagation ผ่าน relationship ระหว่าง Sales และ Products table ซึ่งเป็นจุดเด่นของ DAX เลยครับ 😎
DAX Formula:

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

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

Result:

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

ตัวอย่างที่ 4: Data Quality Check – เปรียบเทียบ COUNT กับ COUNTROWS
Data Completeness % = VAR TotalRows = COUNTROWS(Sales) VAR FilledRows = COUNT(Sales[Amount]) VAR MissingRows = TotalRows - FilledRows VAR CompletenessPercent =…
ใช้ 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 ให้ลูกค้าเสมอครับ 📝
DAX Formula:

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

Result:

คืน 0.824 หมายถึง 82.4% ของแถวมีข้อมูล Amount (1,234 จาก 1,500 แถว)

FAQs

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Resources & Related

Additional Notes

COUNT เป็นฟังก์ชัน aggregation พื้นฐานใน DAX ที่นับจำนวนแถวในคอลัมน์ที่มีค่าไม่ว่าง (non-blank) รองรับข้อมูลประเภทตัวเลข วันที่ และข้อความ แต่ไม่สามารถนับค่า Boolean (TRUE/FALSE) ได้

ฟังก์ชันนี้ทำงานภายใต้ filter context ปัจจุบัน ทำให้ผลลัพธ์เปลี่ยนตามการเลือก slicer หรือ filter ใน report ซึ่งเป็นพฤติกรรมที่เราต้องการส่วนใหญ่เวลาทำ report 📊

.

สำหรับผู้ที่มาจาก Excel ต้องระวังนะครับ… COUNT ใน DAX แตกต่างจาก COUNT ใน Excel อย่างมาก

COUNT ใน Excel นับเฉพาะตัวเลข แต่ COUNT ใน DAX นับทั้งตัวเลข วันที่ และข้อความด้วย

.

นอกจากนี้ Microsoft แนะนำให้ใช้ COUNTROWS แทน COUNT เมื่อต้องการนับจำนวนแถวทั้งหมดของตาราง เพราะ COUNTROWS มี performance ดีกว่า ชัดเจนกว่า และไม่ขึ้นกับว่าคอลัมน์ใดมีค่าว่างหรือไม่

ความแตกต่างระหว่าง COUNT, COUNTA และ COUNTROWS

เคยสงสัยมั้ยครับว่า… ทำไม DAX ถึงมีฟังก์ชันนับตั้ง 3 ตัว? 🤔

  • COUNT: นับค่าไม่ว่าง (ตัวเลข วันที่ ข้อความ) ไม่นับ Boolean
  • COUNTA: นับค่าไม่ว่างทุกประเภท รวมถึง Boolean (TRUE/FALSE)
  • COUNTROWS: นับจำนวนแถวทั้งหมดในตาราง ไม่ขึ้นกับว่าคอลัมน์ใดมีค่าหรือไม่ (Microsoft แนะนำให้ใช้แทน COUNT เมื่อนับแถว)

.

การเข้าใจความแตกต่างเหล่านี้สำคัญมากเพราะการเลือกใช้ฟังก์ชันที่เหมาะสมจะทำให้ DAX measure ของคุณมี performance ดีขึ้นและอ่านง่ายขึ้น

Context Behavior: Row Context vs Filter Context

COUNT ทำงานภายใน filter context ซึ่งหมายความว่าผลลัพธ์จะเปลี่ยนตามการ filter ที่ active อยู่ใน visual ปัจจุบัน

.

เมื่อใช้ใน measure ฟังก์ชันนี้จะตอบสนองต่อ slicer, visual filter และ cross-filtering จาก visual อื่น ๆ อัตโนมัติ

นอกจากนี้เมื่อเรียกใช้ COUNT ใน row context (เช่นใน calculated column) จะเกิด context transition ทำให้ row context กลายเป็น filter context ซึ่งอาจส่งผลต่อ performance ได้ครับ

เมื่อไหร่ควรใช้ COUNT

ใช้ COUNT เมื่อต้องการนับเฉพาะแถวที่มีค่าในคอลัมน์เฉพาะเจาะจง

.

เช่น นับจำนวนออเดอร์ที่มีการระบุยอดเงิน (ไม่นับออเดอร์ที่ Amount เป็น BLANK) หรือนับจำนวนธุรกรรมที่มีการระบุวันที่จัดส่ง (ไม่นับแถวที่ ShipDate ว่าง)

.

แต่ถ้าต้องการนับจำนวนแถวทั้งหมดของตารางโดยไม่สนใจว่าคอลัมน์ใดมีค่าหรือไม่ ให้ใช้ COUNTROWS แทนครับ 😎

Leave a Reply

Your email address will not be published. Required fields are marked *