Thep Excel

DISTINCTCOUNTนับจำนวนค่าเอกลักษณ์ในคอลัมน์

DISTINCTCOUNT นับจำนวนค่าที่แตกต่างกันทั้งหมดในคอลัมน์ รวมถึง BLANK values ถ้าไม่มีแถวข้อมูล จะคืนค่า BLANK

fx
=DISTINCTCOUNT(<column>)

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
column Column คอลัมน์ที่ต้องการนับค่าเอกลักษณ์ (สามารถใช้ได้กับ data type ใดก็ได้ – number, text, date, etc.)

Additional Notes

DISTINCTCOUNT เป็นฟังก์ชันสำหรับนับค่าเอกลักษณ์ (unique values) ในคอลัมน์ โดยนับทั้ง BLANK values ด้วย

ที่เจ๋งคือ DISTINCTCOUNT นับเฉพาะว่ามีกี่ค่าที่แตกต่างกัน ไม่ใช่นับจำนวนแถว เช่น ถ้า Products[SubCategory] มี “Electronics” 5 แถว, “Furniture” 3 แถว, BLANK 2 แถว ผลลัพธ์จะเป็น 3 (สามค่าเอกลักษณ์) ไม่ใช่ 10

ส่วนตัวผมคิดว่า DISTINCTCOUNT มีประโยชน์มากในการวิเคราะห์ Cardinality เช่น “มีกี่ลูกค้าที่ซื้อสินค้า” ซึ่ง COUNT หรือ COUNTA ทำไม่ได้ 😎

ข้อเตือน: ถ้า BLANK หลายแถวในข้อมูล DISTINCTCOUNT จะนับ BLANK ว่าเป็น 1 ค่า ถ้าต้องการไม่นับ BLANK ให้ใช้ DISTINCTCOUNTNOBLANK แทน

How it works

นับจำนวนลูกค้าที่มาใช้บริการ

นับจาก CustomerID ในตาราง Sales เพื่อดูว่ามีลูกค้าไม่ซ้ำกี่คน

นับจำนวน SKU ที่ขายได้

ดูความหลากหลายของสินค้าที่ขายออกไป

Examples

นับ customer ที่ซื้อสินค้าTotal Customers = DISTINCTCOUNT(Sales[CustomerID])

ถ้า Sales table มี 100 แถว แต่ customer ที่ต่างกันมี 15 คน DISTINCTCOUNT จะคืน 15 ไม่ใช่ 100

fx
Total Customers = DISTINCTCOUNT(Sales[CustomerID])

ผลลัพธ์15
นับค่าเอกลักษณ์รวมถึง BLANKUnique Categories = DISTINCTCOUNT(Products[SubCategory])

นับค่าเอกลักษณ์: "Electronics" (1), "Furniture" (1), BLANK (1) = รวม 3 ค่า (แม้ว่ามี BLANK 2 แถว แต่นับเป็น 1 ค่าเท่านั้น)

fx
Unique Categories = DISTINCTCOUNT(Products[SubCategory])

ผลลัพธ์3
ใช้กับ FILTER เพื่อนับเฉพาะบาง categoryElectronics Customers = VAR ElectronicsOrders = FILTER(Sales, Sales[Category] = "Electronics") RETURN DISTINCTCOUNT(ElectronicsOrders[CustomerID])

FILTER ตรวจเลือกเฉพาะแถว Electronics (3 แถว: C001, C002, C004) แล้ว DISTINCTCOUNT นับ customer ที่แตกต่าง = 3

fx
Electronics Customers =
VAR ElectronicsOrders = FILTER(Sales, Sales[Category] = "Electronics")
RETURN
DISTINCTCOUNT(ElectronicsOrders[CustomerID])

ผลลัพธ์3
เปรียบเทียบ DISTINCTCOUNT vs DISTINCTCOUNTNOBLANKWith Blanks = DISTINCTCOUNT(Orders[Status]) → 4 (Completed, Pending, BLANK, Cancelled) Without Blanks = DISTINCTCOUNTNOBLANK(Orders[Status]) → 3 (Completed, Pen…

DISTINCTCOUNT นับ BLANK เป็นค่า 1 ค่า แต่ DISTINCTCOUNTNOBLANK ไม่นับ BLANK เลย ใช้ DISTINCTCOUNTNOBLANK เมื่อต้องการไม่สนใจค่าว่าง

fx
With Blanks = DISTINCTCOUNT(Orders[Status]) → 4 (Completed, Pending, BLANK, Cancelled)

Without Blanks = DISTINCTCOUNTNOBLANK(Orders[Status]) → 3 (Completed, Pending, Cancelled)

ผลลัพธ์ด้วย BLANK = 4, ไม่มี BLANK = 3

FAQs

ทำไม DISTINCTCOUNT นับ BLANK ด้วย+

DISTINCTCOUNT นับ BLANK ว่าเป็นค่า 1 ค่า เพราะ ใน DAX ค่าว่างถือเป็นค่าเอกลักษณ์หนึ่ง ถ้าต้องการไม่นับ BLANK ให้ใช้ DISTINCTCOUNTNOBLANK แทน

DISTINCTCOUNT กับ COUNT ต่างกันอย่างไร+

COUNT นับจำนวนแถว (non-blank) แต่ DISTINCTCOUNT นับจำนวนค่าที่แตกต่าง เช่น Customer C001 มี 5 order COUNT = 5, DISTINCTCOUNT = 1

DISTINCTCOUNT เทียบเท่ากับ COUNTROWS(DISTINCT()) หรือไม่+

ใช่ DISTINCTCOUNT(table[column]) เทียบเท่ากับ COUNTROWS(DISTINCT(table[column])) แต่ DISTINCTCOUNT ง่ายและเร็วกว่า

ใช้ DISTINCTCOUNT ได้หรือไม่เมื่อคำนวณใน Pivot Table+

ได้ แต่ระวังเรื่อง Totals ที่ double-count ได้ เช่น ถ้า Customer C001 ปรากฏในหลาย Product Category แล้วหาผลรวม total อาจไม่เท่ากับของจริง

Resources & Related

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

ฟังก์ชันนี้DISTINCTCOUNTAggregation
Aggregation (6)
APPROXIMATEDISTINCTCOUNT

APPROXIMATEDISTINCTCOUNT คืนจำนวนค่าไม่ซ้ำแบบประมาณเพื่อความเร็ว เหมาะกับข้อมูลขนาดใหญ่และงาน DirectQuery ในแหล่งข้อมูลที่รองรับ เมื่อความแม่นยำ 100% ไม่จำเป็น

COUNT

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

COUNTA

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

COUNTROWS

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

DISTINCTCOUNTNOBLANK

DISTINCTCOUNTNOBLANK นับจำนวนค่าที่ไม่ซ้ำในคอลัมน์ โดยไม่รวมค่า BLANK จึงเหมาะกับการนับรายการที่ต้องการตัดค่าว่างออกไป เช่น นับจำนวนลูกค้าที่ไม่ซ้ำโดยไม่ให้ BLANK ถูกนับ

SUM

SUM รวมค่าตัวเลขทั้งหมดจากคอลัมน์เดียวภายใต้ filter context ปัจจุบัน ข้ามค่า BLANK และข้อความ แต่รวมค่า 0 หากต้องรวมจาก expression ให้ใช้ SUMX แทน

Table manipulation (1)
DISTINCT

DISTINCT คืนค่าตารางที่มีคอลัมน์เดียว ซึ่งประกอบด้วยค่าที่ไม่ซ้ำกันจากคอลัมน์ที่ระบุ โดยไม่รวม Blank Row ที่เกิดจาก Invalid Relationship ความแตกต่างหลักจาก VALUES คือ DISTINCT จะซ่อน Data Quality Issues ในขณะที่ VALUES จะเตือนให้เห็น

Information (1)
HASONEVALUE

HASONEVALUE ตรวจสอบว่า Column ที่ผ่านการ Filter มีเพียงค่าเดียวเท่านั้น Return TRUE หากตรงตามเงื่อนไข FALSE หากไม่ใช่ ใช้หลักเพื่อสร้าง Measure ที่ "ฉลาด" ตามการเลือก Filter ของผู้ใช้

Comments

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