COUNT นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (non-blank) รองรับตัวเลข วันที่ และข้อความ แต่ไม่นับ Boolean ทำงานภายใต้ filter context และเกิด context transition เมื่อใช้ใน row context เหมาะสำหรับนับรายการที่มีข้อมูลในคอลัมน์เฉพาะ แต่ควรใช้ COUNTROWS แทนเมื่อนับแถวทั้งหมด
=COUNT(<column>)
=COUNT(<column>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| column | column | Yes | คอลัมน์ที่ต้องการนับจำนวนค่า รองรับประเภทตัวเลข วันที่ และข้อความ ต้องอ้างอิงด้วย Table[Column] syntax เช่น Sales[Amount] หรือ Orders[ShipDate] ไม่รองรับ Boolean และไม่สามารถใช้ expression ที่ซับซ้อนได้ |
นับจำนวนออเดอร์ที่มีการระบุยอดเงินจริง ไม่นับออเดอร์ที่ Amount ยังเป็น BLANK
นับจำนวนวันที่มีการบันทึกข้อมูลจริง ใช้สำหรับ KPI ที่ต้องรู้จำนวนวันที่มีข้อมูล
เปรียบเทียบ COUNT กับ COUNTROWS เพื่อตรวจสอบความสมบูรณ์ของข้อมูล หาแถวที่มีค่าว่าง
ใช้ COUNT ร่วมกับ CALCULATE เพื่อนับจำนวนรายการที่ตรงเงื่อนไขเฉพาะ เช่น High Value Transactions
Sales Record Count = COUNT(Sales[Amount]) // Context: Sales table มี Amount column เก็บยอดเงิน // Result: คืนจำนวนแถวที่ Amount ไม่ว่าง เช่น 1,234Sales Record Count =
COUNT(Sales[Amount])
// Context: Sales table มี Amount column เก็บยอดเงิน
// Result: คืนจำนวนแถวที่ Amount ไม่ว่าง เช่น 1,234
คืนจำนวนแถวที่ Sales[Amount] ไม่ว่าง ตัวอย่าง: 1,234 แถว
High Value Sales Count = CALCULATE( COUNT(Sales[Amount]), Sales[Amount] > 1000 ) // Context: นับเฉพาะ sales ที่มียอดมากกว่า 1,000 // Result: จำนวนรายการที่ Amou…High Value Sales Count =
CALCULATE(
COUNT(Sales[Amount]),
Sales[Amount] > 1000
)
// Context: นับเฉพาะ sales ที่มียอดมากกว่า 1,000
// Result: จำนวนรายการที่ Amount > 1000
คืนจำนวนแถวที่ Sales[Amount] มากกว่า 1,000 ตัวอย่าง: 234 แถว
Sales Count by Category = COUNT(Sales[Amount]) // Context: ใช้ใน visual ที่มี Products[Category] เป็น axis // Sales table มี relationship กับ Products table //…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
Data Completeness % = VAR TotalRows = COUNTROWS(Sales) VAR FilledRows = COUNT(Sales[Amount]) VAR MissingRows = TotalRows - FilledRows VAR CompletenessPercent =…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 แถว)
COUNT และ COUNTA ใน DAX ทำงานเหมือนกันเกือบทุกกรณี ความแตกต่างเดียวคือ COUNTA นับค่า Boolean (TRUE/FALSE) ได้ แต่ COUNT นับไม่ได้
.
ถ้าคอลัมน์เป็น Boolean ต้องใช้ COUNTA แทนนะครับ สำหรับตัวเลข วันที่ และข้อความ ทั้งสองฟังก์ชันนับได้เหมือนกัน
.
นอกจากนี้ทั้งสองฟังก์ชันยังนับ empty string (“”) เป็นค่าที่ไม่ว่างด้วย
ใช้ COUNTROWS เมื่อต้องการนับจำนวนแถวทั้งหมดของตาราง เพราะ performance ดีกว่า ชัดเจนกว่า และไม่ขึ้นกับว่าคอลัมน์ใดมี BLANK
.
ใช้ COUNT เฉพาะเมื่อต้องการนับแถวที่คอลัมน์เฉพาะมีค่า เช่น นับจำนวนออเดอร์ที่มีการระบุยอดเงิน (ไม่นับออเดอร์ที่ Amount ว่าง)
.
Microsoft แนะนำให้ใช้ COUNTROWS แทน COUNT เสมอเมื่อนับแถวทั้งหมดนะครับ 😎
ใช่ครับ COUNT นับ empty string (“”) เป็นค่าที่ไม่ว่าง ถ้าคอลัมน์ข้อความมีค่า “” จะถูกนับใน COUNT
.
นี่ต่างจาก BLANK ที่จะไม่ถูกนับ ความแตกต่างนี้สำคัญเมื่อทำ data cleaning เพราะ empty string และ BLANK ไม่ใช่สิ่งเดียวกันใน DAX เลยนะครับ
ใช้ COUNTBLANK เพื่อนับจำนวน BLANK ในคอลัมน์โดยตรง
.
หรือใช้ COUNTROWS – COUNT เพื่อคำนวณจำนวนแถวที่มีค่าว่าง เช่น Missing Amount = COUNTROWS(Sales) – COUNT(Sales[Amount]) จะบอกจำนวนแถวที่ Amount เป็น BLANK
.
ส่วนตัวผมชอบใช้วิธีที่สองเพราะเห็นภาพชัดกว่าครับ 📊
COUNT ใน Excel นับเฉพาะตัวเลข แต่ COUNT ใน DAX นับทั้งตัวเลข วันที่ และข้อความ (ไม่นับ Boolean)
.
นอกจากนี้ COUNT ใน DAX ทำงานภายใต้ filter context ของ visual ทำให้ผลลัพธ์เปลี่ยนตาม slicer และ filter ต่าง ๆ อัตโนมัติ ส่วน COUNT ใน Excel เป็น worksheet function ที่นับเฉพาะ range ที่ระบุ
.
พอมาใช้ DAX ต้องปรับความคิดใหม่นิดนึงนะครับ 😅
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 เพราะอ่านง่ายกว่าครับ 😎
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 ดีกว่า ชัดเจนกว่า และไม่ขึ้นกับว่าคอลัมน์ใดมีค่าว่างหรือไม่
เคยสงสัยมั้ยครับว่า… ทำไม DAX ถึงมีฟังก์ชันนับตั้ง 3 ตัว? 🤔
.
การเข้าใจความแตกต่างเหล่านี้สำคัญมากเพราะการเลือกใช้ฟังก์ชันที่เหมาะสมจะทำให้ DAX measure ของคุณมี performance ดีขึ้นและอ่านง่ายขึ้น
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 เมื่อต้องการนับเฉพาะแถวที่มีค่าในคอลัมน์เฉพาะเจาะจง
.
เช่น นับจำนวนออเดอร์ที่มีการระบุยอดเงิน (ไม่นับออเดอร์ที่ Amount เป็น BLANK) หรือนับจำนวนธุรกรรมที่มีการระบุวันที่จัดส่ง (ไม่นับแถวที่ ShipDate ว่าง)
.
แต่ถ้าต้องการนับจำนวนแถวทั้งหมดของตารางโดยไม่สนใจว่าคอลัมน์ใดมีค่าหรือไม่ ให้ใช้ COUNTROWS แทนครับ 😎