COUNTAX ประเมินนิพจน์ต่อแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่าง เหมาะกับการนับค่าที่อาจเป็นข้อความ ตรรกะ หรือนิพจน์ที่ซับซ้อน ไม่ใช่แค่ตัวเลข
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| table | table | ตารางที่ต้องการไล่ประเมินทีละแถว อาจเป็น table ทั้งตัว หรือ FILTER ที่คืน table |
| expression | scalar | นิพจน์ที่ประเมินในแต่ละแถว อาจคืนค่าข้อความ ตรรกะ ตัวเลข หรือวันที่ ตราบใดที่ไม่ใช่ table |
COUNTAX เป็นฟังก์ชัน iterator ที่ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนผลลัพธ์ที่ไม่ว่างทุกชนิด ต่างจาก COUNTA ที่นับคอลัมน์โดยตรง COUNTAX ใช้กับผลลัพธ์ของนิพจน์ที่ประเมินต่อแถว ซึ่งอาจเป็นข้อความ ตรรกะ หรือค่าที่คำนวณได้
ที่เจ๋งคือ COUNTAX สามารถนับผลลัพธ์ของนิพจน์ที่ซับซ้อนได้ เช่น IF statement, RELATED column, หรือคำนวณค่าเอง ถ้าผลลัพธ์ไม่ว่าง มันจะนับได้ ดังนั้นเวลาต้องการนับแถวที่เข้าเงื่อนไขหรือมีค่าที่คำนวณได้ COUNTAX คือตัวเลือกที่ดี
ส่วนตัวผม COUNTAX เป็นลูกน้องที่เก่งเมื่อต้องนับผลลัพธ์ของนิพจน์ที่ซับซ้อน ยิ่งกว่า COUNTA ที่นับคอลัมน์เดียวเท่านั้น แถมยังทำงานกับ FILTER ได้สวยเลย
เช่น นับจำนวนแถวที่มีรหัส/สถานะที่ถูกคำนวณและไม่ว่าง
เมื่อนิพจน์อาจคืน BLANK ในบางแถว และคุณต้องการนับเฉพาะแถวที่ไม่ว่าง
ใช้กับคอลัมน์ข้อความ COUNTAX จะนับแถวที่ Code ไม่ว่างเท่านั้น ซึ่งดีกว่า COUNTA ในกรณีที่ต้องการนับเฉพาะแถวที่ expression คืนค่า
ใช้ IF ร่วมกับ COUNTAX เพื่อนับแถวที่เข้าเงื่อนไข ถ้า condition เป็นจริง คืน 1 (non-blank) ถ้าเป็นเท็จ คืน BLANK ดังนั้น COUNTAX จะนับแต่แถวที่เข้าเงื่อนไข
เหมาะกับคอลัมน์ข้อความอักษร เพราะ COUNTAX นับค่าที่ไม่ว่าง และ COUNTA อาจนับอักษรว่างได้ขึ้นอยู่กับโครงสร้าง
ใช้ VAR เก็บ FILTER ผลก่อน แล้วค่อย COUNTAX กับ RELATED column จากอีกตาราง จะ debug ง่ายกว่า
ทั้งคู่เป็น iterator แต่ COUNTAX นับผลลัพธ์ที่ไม่ว่าง (non-blank) ของ expression โดยไม่สนใจประเภทข้อมูล ส่วน COUNTX นับเฉพาะค่าตัวเลขหรือวันที่เท่านั้น ถ้า expression ของคุณอาจคืนข้อความหรือค่าว่าง ใช้ COUNTAX จะเหมาะกว่า
ใช้ COUNTA เมื่อต้องการนับค่าไม่ว่างในคอลัมน์โดยตรง แต่ใช้ COUNTAX เมื่อต้องการนับผลลัพธ์ของนิพจน์ที่ประเมินต่อแถว เช่น IF condition หรือ RELATED column ส่วนตัวผมชอบ COUNTAX เพราะมี row context ให้เล่นได้เยอะกว่า
ได้ครับ COUNTAX ประเมินนิพจน์ในแต่ละแถว ดังนั้น row context จะนำมาคำนวณค่า expression เสมอ หากคุณใช้ร่วมกับ FILTER ที่สร้าง filter context เสียก่อน expression จะประเมินในแถวที่ FILTER คัดเลือกเท่านั้น
เมื่อตาราง (table parameter) ว่าง หรือไม่มีแถวเลย ตัว expression จะไม่ประเมินเลย และ COUNTAX จะ return BLANK ไม่ใช่ 0
ฟังก์ชันที่ผู้เขียนโยงไว้กับ COUNTAX จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
COUNT นับจำนวนแถวที่คอลัมน์มีค่าไม่ว่าง (non-blank) รองรับตัวเลข วันที่ และข้อความ แต่ไม่นับ Boolean ทำงานภายใต้ filter context และเกิด context transition เมื่อใช้ใน row context เหมาะสำหรับนับรายการที่มีข้อมูลในคอลัมน์เฉพาะ แต่ควรใช้ COUNTROWS แทนเมื่อนับแถวทั้งหมด
COUNTA นับจำนวนเซลล์ที่มีค่าไม่ว่าง (non-blank) ในคอลัมน์ โดยรวมตัวเลข ข้อความ วันที่ และค่าตรรกะ ต่างจาก COUNT ที่นับเฉพาะตัวเลขเท่านั้น
COUNTBLANK นับจำนวนค่า BLANK ในคอลัมน์ ช่วยวัดความครบถ้วนของข้อมูลและตรวจสอบคุณภาพข้อมูลภายใต้บริบทตัวกรองปัจจุบัน
COUNTROWS เป็นฟังก์ชันการรวม (Aggregation) ที่นับจำนวนแถวในตารางที่ระบุ ไม่ว่าจะเป็นตารางจริงในโมเดลหรือตารางเสมือน (Virtual Table) จากฟังก์ชันอื่นๆ เช่น FILTER, VALUES, DISTINCT นับเท่าไหร่? ผลลัพธ์ก็คือจำนวนแถวเต็ม ๆ
COUNTX ไล่ประเมินนิพจน์ทีละแถวในตาราง แล้วนับจำนวนแถวที่ได้ผลลัพธ์ไม่ว่าง เหมาะสำหรับการนับจากค่าที่คำนวณต่อแถว ไม่ใช่นับคอลัมน์ตรง ๆ
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 ใช้กรองแถวในตารางตามเงื่อนไขที่ซับซ้อน โดยวนลูปทุกแถวและประเมินเงื่อนไข เหมาะกับการกรองด้วย Measure หรือ Expression ซึ่ง Boolean Expression ทำไม่ได้ แต่ต้องระวังเรื่อง Performance เพราะเป็น Iterator Function ที่ช้ากว่า Boolean Expression ดังนั้นควรใช้เฉพาะเมื่อจำเป็น และอย่าใช้ FILTER กับ RELATED เพื่อกรองข้ามตาราง ให้กรองที่ Dimension Table โดยตรงแทน
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่