COUNT นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (non-blank) รองรับตัวเลข วันที่ และข้อความ แต่ไม่นับ Boolean ทำงานภายใต้ filter context และเกิด context transition เมื่อใช้ใน row context เหมาะสำหรับนับรายการที่มีข้อมูลในคอลัมน์เฉพาะ แต่ควรใช้ COUNTROWS แทนเมื่อนับแถวทั้งหมด
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| column | column | คอลัมน์ที่ต้องการนับจำนวนค่า รองรับประเภทตัวเลข วันที่ และข้อความ ต้องอ้างอิงด้วย Table[Column] syntax เช่น Sales[Amount] หรือ Orders[ShipDate] ไม่รองรับ Boolean และไม่สามารถใช้ expression ที่ซับซ้อนได้ |
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 แทนครับ 😎
นับจำนวนออเดอร์ที่มีการระบุยอดเงินจริง ไม่นับออเดอร์ที่ Amount ยังเป็น BLANK
นับจำนวนวันที่มีการบันทึกข้อมูลจริง ใช้สำหรับ KPI ที่ต้องรู้จำนวนวันที่มีข้อมูล
เปรียบเทียบ COUNT กับ COUNTROWS เพื่อตรวจสอบความสมบูรณ์ของข้อมูล หาแถวที่มีค่าว่าง
ใช้ COUNT ร่วมกับ CALCULATE เพื่อนับจำนวนรายการที่ตรงเงื่อนไขเฉพาะ เช่น High Value Transactions
COUNT นับเฉพาะแถวที่คอลัมน์มีค่า ถ้า Sales table มี 1,500 แถวแต่มี 266 แถวที่ Amount เป็น BLANK ผลลัพธ์จะเป็น 1,234
ฟังก์ชันนี้ทำงานภายใต้ filter context ปัจจุบัน ดังนั้นเมื่อใช้ใน visual ที่มี slicer เลือก Year = 2024 ผลลัพธ์จะนับเฉพาะแถวปี 2024 ที่มี Amount ครับ
CALCULATE เปลี่ยน filter context โดยเพิ่ม filter condition Sales[Amount] > 1000 ทำให้ COUNT นับเฉพาะแถวที่ยอดขายสูง
วิธีนี้เหมาะสำหรับสร้าง KPI เช่น "High Value Transactions" หรือ "Premium Orders" โดยไม่ต้องสร้างคอลัมน์เพิ่มใน data model
ผลลัพธ์ยังคงตอบสนองต่อ slicer อื่น ๆ ใน report ครับ 📊
COUNT ทำงานภายใต้ filter context ของ visual เมื่อสร้าง table visual ที่มี Products[Category] เป็น column DAX engine จะสร้าง filter context สำหรับแต่ละ Category อัตโนมัติ
ผลลัพธ์จึงแตกต่างกันในแต่ละแถว นี่คือ filter context propagation ผ่าน relationship ระหว่าง Sales และ Products table ซึ่งเป็นจุดเด่นของ DAX เลยครับ 😎
ใช้ 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 ให้ลูกค้าเสมอครับ 📝
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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
AVERAGE คำนวณค่าเฉลี่ยเลขคณิตของตัวเลขทั้งหมดในคอลัมน์ โดยข้าม blank cells และข้อความ แต่นับค่า 0 เข้าในการคำนวณ ซึ่งทำให้ค่าเฉลี่ยอาจต่ำลงถ้ามีค่า 0 จำนวนมาก ทำงานภายใต้ filter context ปัจจุบันและทำ context transition ใน calculated column ทำให้สามารถอ้างอิงคอลัมน์จากตารางอื่นผ่าน relationship ได้
COUNTA นับจำนวนเซลล์ที่มีค่าไม่ว่าง (non-blank) ในคอลัมน์ โดยรวมตัวเลข ข้อความ วันที่ และค่าตรรกะ ต่างจาก COUNT ที่นับเฉพาะตัวเลขเท่านั้น
COUNTAX ประเมินนิพจน์ต่อแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่าง เหมาะกับการนับค่าที่อาจเป็นข้อความ ตรรกะ หรือนิพจน์ที่ซับซ้อน ไม่ใช่แค่ตัวเลข
COUNTBLANK นับจำนวนค่า BLANK ในคอลัมน์ ช่วยวัดความครบถ้วนของข้อมูลและตรวจสอบคุณภาพข้อมูลภายใต้บริบทตัวกรองปัจจุบัน
COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ
COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ
DISTINCTCOUNT นับจำนวนค่าที่แตกต่างกันทั้งหมดในคอลัมน์ รวมถึง BLANK values ถ้าไม่มีแถวข้อมูล จะคืนค่า BLANK
CALCULATE เป็นฟังก์ชันหลักที่สำคัญที่สุดใน DAX ใช้สำหรับ evaluate expression ภายใต้ filter context ที่ถูกปรับเปลี่ยน สามารถเพิ่มตัวกรองใหม่ ลบตัวกรองเดิม หรือแทนที่ filter ที่มีอยู่ได้ รองรับทั้ง Boolean expression และ table expression เป็น filter arguments พร้อม filter modifier functions เช่น REMOVEFILTERS, ALL, ALLEXCEPT, KEEPFILTERS เพื่อควบคุมการกรองอย่างละเอียด มีพฤติกรรมพิเศษคือ context transition ที่เปลี่ยน row context เป็น filter context โดยอัตโนมัติ ทำให้เป็นเครื่องมือหลักในการสร้าง measure ที่ซับซ้อนและ calculated column ที่ต้องใช้ aggregation
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่