COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ
=COUNTROWS(<table>)
=COUNTROWS(<table>)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| table | table | Yes | ตารางที่ต้องการนับจำนวนแถว อาจเป็นตารางจริง (Sales, Customers) หรือตารางเสมือนจากฟังก์ชัน (FILTER, VALUES, DISTINCT, GENERATE) |
ใช้ COUNTROWS ครอบตารางที่ได้จาก FILTER เพื่อวัดจำนวนรายการที่ผ่านเงื่อนไข
ใช้ COUNTROWS(VALUES(Column)) เพื่อนับจำนวนค่าที่ไม่ซ้ำในบริบทปัจจุบัน โดยสามารถต่อยอดด้วยการกรองตารางก่อนนับได้
Total Orders = COUNTROWS( Sales )Total Orders =
COUNTROWS( Sales )
2,452
Large Orders = COUNTROWS( FILTER( Sales, Sales[Amount] > 5000 ) )Large Orders =
COUNTROWS(
FILTER(
Sales,
Sales[Amount] > 5000
)
)
185
Unique Customers = COUNTROWS( VALUES( Sales[CustomerID] ) )Unique Customers =
COUNTROWS(
VALUES( Sales[CustomerID] )
)
528
High Value Customer Count = VAR FilteredOrders = FILTER( Sales, Sales[Amount] > CALCULATE(AVERAGE(Sales[Amount]), ALL(Sales)) ) VAR UniqueCustInLargeOrders = CO…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
Microsoft Best Practice: ใช้ COUNTROWS แทน COUNT เสมอ COUNTROWS นับแถว (Rows) ทั้งหมด COUNT นับเฉพาะค่าตัวเลขที่ไม่ใช่ BLANK จึงข้ามแถวที่มี BLANK ไป ใช้ COUNT เฉพาะเมื่อต้องการยกเว้น BLANK โดยเฉพาะ หรือต้องการนับค่าตัวเลขในคอลัมน์ COUNTROWS ที่นอกจากเร็วกว่า ยังให้ผลถูกต้องที่สุด
เพราะว่า VALUES รวมค่า BLANK เข้ามาด้วย ถ้าคอลัมน์มี BLANK จริง ๆ VALUES จะคืนค่า BLANK เป็นแถวหนึ่ง จากนั้น COUNTROWS ก็นับ BLANK แถวนั้นด้วย หากต้องการหลีกเลี่ยงให้กรอง BLANK ออกด้วย FILTER: COUNTROWS(FILTER(VALUES(Column), NOT(ISBLANK(Column))))
COUNTROWS นับแถว COUNTA นับเซลล์ที่ไม่ใช่ BLANK ใน ‘คอลัมน์’ COUNTAX คือ iterator (วนลูป) นับแล้ว evaluate expression ในแต่ละแถว ส่วนใหญ่ใช้ COUNTROWS เพราะเร็วและชัดเจน COUNTAX ใช้เมื่อต้องนับแบบมีเงื่อนไขเชิงซับซ้อน
ส่ง BLANK (ไม่ใช่ 0) ถ้าตารางไม่มีแถวเลย COUNTROWS(FILTER(Sales, Sales[Amount] > 1000000)) ถ้าไม่มี Order ที่มากกว่า 1 ล้าน ผลลัพธ์คือ BLANK ไม่ใช่ 0 ที่สำคัญ: BLANK ≠ 0 ให้ระวัง
COUNTROWS ใช้นับจำนวนแถวในตาราง โดยไม่สนใจว่าแถวนั้นมีค่าอะไรอยู่ นั่นคือ ‘แถว’ กับ ‘ค่าในแถว’ คนละเรื่องกัน
ที่เจ๋งคือ COUNTROWS ทำงานได้ดีกับทุกสถานการณ์: ตารางจริง (Sales, Customers) หรือตารางเสมือนจากฟังก์ชันทำการ Filter (FILTER, VALUES, DISTINCT) บริบท Filter Context ก็ถูกพิจารณาโดยอัตโนมัติ ถ้ามีการสลักตัวกรองจากหน้าจออยู่ COUNTROWS ก็นับเฉพาะแถวที่ผ่านตัวกรองเหลือเท่านั้น
ส่วนตัวผมว่า COUNTROWS คือ ‘ความจริงใจ’ ของการนับในDAX – มันนับแล้วจบ ไม่มีเล่นเกม ไม่มี BLANK ขาด ขาดก็ขาด 😎