Thep Excel

COUNTAXนับผลลัพธ์ไม่ว่างจากนิพจน์แบบไล่ทีละแถว

COUNTAX ประเมินนิพจน์ต่อแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่าง เหมาะกับการนับค่าที่อาจเป็นข้อความ ตรรกะ หรือนิพจน์ที่ซับซ้อน ไม่ใช่แค่ตัวเลข

fx
=COUNTAX(<table>, <expression>)

ความนิยม5/10
ความยาก5/10
ประโยชน์5/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการไล่ประเมินทีละแถว อาจเป็น table ทั้งตัว หรือ FILTER ที่คืน table
expression scalar นิพจน์ที่ประเมินในแต่ละแถว อาจคืนค่าข้อความ ตรรกะ ตัวเลข หรือวันที่ ตราบใดที่ไม่ใช่ table

Additional Notes

COUNTAX เป็นฟังก์ชัน iterator ที่ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่างทุกชนิด ต่างจาก COUNTA ที่นับคอลัมน์โดยตรง COUNTAX ใช้กับผลลัพธ์ของนิพจน์ที่ประเมินต่อแถว ซึ่งอาจเป็นข้อความ ตรรกะ หรือค่าที่คำนวณได้

ที่เจ๋งคือ COUNTAX สามารถนับผลลัพธ์ของนิพจน์ที่ซับซ้อนได้ เช่น IF statement, RELATED column, หรือคำนวณค่าเอง ถ้าผลลัพธ์ไม่ว่าง มันจะนับได้ ดังนั้นเวลาต้องการนับแถวที่เข้าเงื่อนไขหรือมีค่าที่คำนวณได้ COUNTAX คือตัวเลือกที่ดี

ส่วนตัวผม COUNTAX เป็นลูกน้องที่เก่งเมื่อต้องนับผลลัพธ์ของนิพจน์ที่ซับซ้อน ยิ่งกว่า COUNTA ที่นับคอลัมน์เดียวเท่านั้น แถมยังทำงานกับ FILTER ได้สวยเลย

How it works

นับจำนวนแถวที่นิพจน์คืนค่าข้อความไม่ว่าง

เช่น นับจำนวนแถวที่มีรหัส/สถานะที่ถูกคำนวณและไม่ว่าง

นับจำนวนแถวที่มีผลลัพธ์จริงจากเงื่อนไข

เมื่อนิพจน์อาจคืน BLANK ในบางแถว และคุณต้องการนับเฉพาะแถวที่ไม่ว่าง

Examples

นับจำนวนแถว Code ที่ไม่ว่างProduct Count = COUNTAX(Products, Products[Code])

ใช้กับคอลัมน์ข้อความ COUNTAX จะนับแถวที่ Code ไม่ว่างเท่านั้น ซึ่งดีกว่า COUNTA ในกรณีที่ต้องการนับเฉพาะแถวที่ expression คืนค่า

fx
Product Count =
COUNTAX(Products, Products[Code])

ผลลัพธ์นับแถวที่ Products[Code] มีค่า
นับจำนวนแถวที่นิพจน์คำนวณได้ผลลัพธ์ที่ไม่ว่างValid Sales Count = COUNTAX( Sales, IF(Sales[Quantity] > 0 && Sales[Amount] > 0, 1, BLANK()) )

ใช้ IF ร่วมกับ COUNTAX เพื่อนับแถวที่เข้าเงื่อนไข ถ้า condition เป็นจริง คืน 1 (non-blank) ถ้าเป็นเท็จ คืน BLANK ดังนั้น COUNTAX จะนับแต่แถวที่เข้าเงื่อนไข

fx
Valid Sales Count =
COUNTAX(
Sales,
IF(Sales[Quantity] > 0 && Sales[Amount] > 0, 1, BLANK())
)

ผลลัพธ์นับแถวที่ Quantity และ Amount ต่างก็มากกว่า 0
นับจำนวนแถว Notes ที่มีข้อมูลNotes Count = COUNTAX(Orders, Orders[Notes])

เหมาะกับคอลัมน์ข้อความอักษร เพราะ COUNTAX นับค่าที่ไม่ว่าง และ COUNTA อาจนับอักษรว่างได้ขึ้นอยู่กับโครงสร้าง

fx
Notes Count =
COUNTAX(Orders, Orders[Notes])

ผลลัพธ์นับแถวที่มี Notes ไม่เป็นค่าว่าง
นับ Sales ที่มี Related ProductRelated Product Count = VAR FilteredSales = FILTER(Sales, NOT(ISBLANK(RELATED(Products[ProductID])))) RETURN COUNTAX(FilteredSales, RELATED(Products[ProductName…

ใช้ VAR เก็บ FILTER ผลก่อน แล้วค่อย COUNTAX กับ RELATED column จากอีกตาราง จะ debug ง่ายกว่า

fx
Related Product Count =
VAR FilteredSales = FILTER(Sales, NOT(ISBLANK(RELATED(Products[ProductID]))))
RETURN
COUNTAX(FilteredSales, RELATED(Products[ProductName]))

ผลลัพธ์นับแถว Sales ที่มี Product ที่ relate ได้

FAQs

COUNTAX ต่างจาก COUNTX อย่างไร?+

ทั้งคู่เป็น iterator แต่ COUNTAX นับผลลัพธ์ที่ไม่ว่าง (non-blank) ของ expression โดยไม่สนใจประเภทข้อมูล ส่วน COUNTX นับเฉพาะค่าตัวเลขหรือวันที่เท่านั้น ถ้า expression ของคุณอาจคืนข้อความหรือค่าว่าง ใช้ COUNTAX จะเหมาะกว่า

ควรใช้ COUNTA หรือ COUNTAX?+

ใช้ COUNTA เมื่อต้องการนับค่าไม่ว่างในคอลัมน์โดยตรง แต่ใช้ COUNTAX เมื่อต้องการนับผลลัพธ์ของนิพจน์ที่ประเมินต่อแถว เช่น IF condition หรือ RELATED column ส่วนตัวผมชอบ COUNTAX เพราะมี row context ให้เล่นได้เยอะกว่า

COUNTAX ใช้กับ filter context ได้หรือ?+

ได้ครับ COUNTAX ประเมินนิพจน์ในแต่ละแถว ดังนั้น row context จะนำมาคำนวณค่า expression เสมอ หากคุณใช้ร่วมกับ FILTER ที่สร้าง filter context เสียก่อน expression จะประเมินในแถวที่ FILTER คัดเลือกเท่านั้น

COUNTAX return BLANK ตรงไหน?+

เมื่อตาราง (table parameter) ว่าง หรือไม่มีแถวเลย ตัว expression จะไม่ประเมินเลย และ COUNTAX จะ return BLANK ไม่ใช่ 0

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ COUNTAX จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้COUNTAXAggregation
Aggregation (6)
COUNT

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

COUNTA

COUNTA นับจำนวนเซลล์ที่มีค่าไม่ว่าง (non-blank) ในคอลัมน์ โดยรวมตัวเลข ข้อความ วันที่ และค่าตรรกะ ต่างจาก COUNT ที่นับเฉพาะตัวเลขเท่านั้น

COUNTBLANK

COUNTBLANK นับจำนวนค่า BLANK ในคอลัมน์ ช่วยวัดความครบถ้วนของข้อมูลและตรวจสอบคุณภาพข้อมูลภายใต้บริบทตัวกรองปัจจุบัน

COUNTROWS

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

COUNTX

COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ

SUMX

SUMX เป็น iterator function ที่ทรงพลังใน DAX ออกแบบมาเพื่อวนลูปทีละแถวในตารางที่กำหนด แล้วคำนวณ expression ที่ซับซ้อนสำหรับแต่ละแถวก่อนนำผลลัพธ์ทั้งหมดมารวมกัน ต่างจาก SUM ที่รวมเฉพาะค่าใน column เดียว SUMX สร้าง row context สำหรับแต่ละแถว ทำให้สามารถคำนวณ expression อย่าง Quantity × Price หรือใช้ RELATED ดึงข้อมูลข้ามตารางได้ มีกลไก context transition อัตโนมัติเมื่อเจอ measure ในนั้น เหมาะสำหรับการคำนวณซับซ้อนระดับแถวข้อมูล ประหยัดพื้นที่ model เพราะไม่ต้องสร้าง calculated column แต่ช้ากว่า SUM และไม่รองรับ DirectQuery mode ใน calculated columns หรือ RLS rules

Filter (1)
FILTER

FILTER ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่