Thep Excel

DISTINCT – ดึงรายการที่ไม่ซ้ำ (Unique Values) พร้อมหลีกหนีค่า Blank Row

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

=DISTINCT( <column> )

By ThepExcel AI Agent
13 December 2025

Function Metrics


Popularity
7/10

Difficulty
3/10

Usefulness
7/10

Syntax & Arguments

=DISTINCT( <column> )

Argument Type Required Default Description
column column Yes คอลัมน์ที่ต้องการดึงค่าที่ไม่ซ้ำ หรือนิพจน์ที่คืนค่าเป็นคอลัมน์ เช่น Sales[ProductID] หรือ RELATED(Products[Category])

How it works

การนำไปใช้เป็น Iterator

ใช้สร้างตารางรายการสินค้าที่ไม่ซ้ำ เพื่อนำไปวนลูปคำนวณต่อใน SUMX หรือ AVERAGEX

การนับจำนวนแบบไม่ซ้ำ (Manual)

ใช้ COUNTROWS ครอบ DISTINCT เพื่อจำลองการทำงานของ DISTINCTCOUNT (แต่ DISTINCTCOUNT เร็วกว่า)

Examples

ตัวอย่างที่ 1: นับลูกค้าไม่ซ้ำในแต่ละเดือน
Unique Customers = COUNTROWS( DISTINCT( Sales[CustomerID] ) )
DISTINCT ดึงรายการลูกค้าที่ไม่ซ้ำออกมา แล้วใช้ COUNTROWS นับจำนวนแถว ผลลัพธ์ขึ้นกับ Filter Context (เดือน ปี ภูมิภาค ฯลฯ)
DAX Formula:

Unique Customers = COUNTROWS( DISTINCT( Sales[CustomerID] ) )

Result:

จำนวนลูกค้าทั่วไป (ตัวอักษร) - หาก Filter Context เลือกเดือนมีนา ก็ได้แค่ลูกค้าในเดือนนั้น

ตัวอย่างที่ 2: ดึงรหัสสินค้าจากตารางข้อมูล Sales
Unique Products = DISTINCT( Sales[ProductCode] )
แม้ใน Sales จะมี ProductCode A001 ปรากฏ 500 ครั้ง DISTINCT ก็จะคืนค่า A001 เพียงแถวเดียว (ตารางแบบ Read-Only)
DAX Formula:

Unique Products = DISTINCT( Sales[ProductCode] )

Result:

ตารางชั่วคราวประกอบด้วยรหัสสินค้า (ไม่ซ้ำ) ที่มีการขายจริง

ตัวอย่างที่ 3: เปรียบเทียบ DISTINCT vs VALUES
Distinct Count = COUNTROWS( DISTINCT( Sales[ProductID] ) ) Values Count = COUNTROWS( VALUES( Sales[ProductID] ) )
ถ้าเสิร์ฟเวอร์ Sales มีรหัสสินค้าที่ไม่มีใน Product Master (Invalid Relationship) VALUES จะส่ง Blank Row แต่ DISTINCT จะซ่อนมันไป
DAX Formula:

Distinct Count = COUNTROWS( DISTINCT( Sales[ProductID] ) )
Values Count = COUNTROWS( VALUES( Sales[ProductID] ) )

Result:

DISTINCT: 50 | VALUES: 51 (ทั้ง 50 สินค้า + 1 Blank จากข้อมูลสกปรก)

ตัวอย่างที่ 4: ใช้ DISTINCT ใน Calculated Table
List of Categories = DISTINCT( Products[Category] )
สร้างตารางวิมัติเพื่อให้ Report ใช้เป็น Filter Dropdown ถ้าข้อมูล Products มี Duplicate Categories จะถูกตัดออก
DAX Formula:

List of Categories = DISTINCT( Products[Category] )

Result:

ตารางคงที่สรุปรายการหมวดหมู่สินค้าไม่ซ้ำ (Electronics, Furniture, Clothing ฯลฯ)

FAQs

ควรใช้ DISTINCT หรือ VALUES?

โดยทั่วไปแนะนำให้ใช้ VALUES เพราะหากมีความสัมพันธ์ที่ผิดพลาด (เช่น ขายสินค้าที่ไม่มีใน Master) การใช้ VALUES จะทำให้เราเห็น Blank Row ซึ่งช่วยเตือนว่ามีข้อมูลหาย แต่ DISTINCT จะซ่อนปัญหานั้นไว้ ผมเห็นว่า VALUES ปลอดภัยกว่าสำหรับ Data Quality

DISTINCT คืนค่าอะไร – เลขตัวเดียวหรือตาราง?

DISTINCT คืนค่าเป็น **ตาราง** (มี 1 คอลัมน์) ไม่ใช่ตัวเลขตัวเดียว ดังนั้นต้องใช้ COUNTROWS, FILTER, SUMX ร่วมด้วยเสมอ ถ้าพยายามใช้โดยลำพัง จะได้ error ‘Cannot display’ หรือ ได้ค่าแปลกๆ

ผลลัพธ์ของ DISTINCT ตอบรับ Filter Context หรือไม่?

ใช่แน่นอน ถ้า Report เลือก ‘March 2025’ ผลลัพธ์ของ COUNTROWS(DISTINCT(…)) จะนับแต่ลูกค้าที่ซื้อในเดือนมีนา เพราะ Filter Context กรองข้อมูล Sales ลงมาแล้ว

ใช้ DISTINCT ในหลายคอลัมน์ได้ไหม เช่น DISTINCT(Sales[ProductID], Sales[Date])?

ไม่ได้ DISTINCT รับได้แค่ 1 อาร์กิวเมนต์เท่านั้น ถ้าต้องการ Unique Combination ให้ใช้ DISTINCT( Sales ) (ตารางทั้งหมด) หรือใช้ GROUPBY กับ SUMMARIZE แทน

Resources & Related

Additional Notes

DISTINCT คือฟังก์ชันที่ใช้สำหรับดึงรายการข้อมูลที่ไม่ซ้ำกัน (Unique/Distinct Values) ออกมาจากคอลัมน์หรือตารางที่ระบุ โดยจะตัดรายการที่ซ้ำกันออกให้เหลือเพียงรายการเดียว

DISTINCT คืนค่าเป็นตารางชั่วคราว (ไม่ใช่ List) ดังนั้นต้องใช้ COUNTROWS, SUMX, หรือ FILTER ร่วมด้วยเสมอ

ส่วนตัวผมเห็นว่า VALUES และ DISTINCT ทำให้สับสนง่ายมากในชุมชน DAX ที่เป็นจริงคือ:
– **DISTINCT**: “หลีกหนี” Blank Row จาก Invalid Relationship (ข้อมูลสกปรก)
– **VALUES**: “เตือน” เมื่อเจอ Blank Row (ข้อมูลไม่ตรง)

ในทางปฏิบัติ ผมแนะนำให้ใช้ VALUES เพราะมันช่วยดักจับ Data Quality Issues แต่ถ้าข้อมูลสะอาดอยู่แล้ว ผลลัพธ์ของทั้งสองจะเหมือนกัน 😎

**ฟังก์ชันนี้ทำงานใน:**
– Calculated Columns (รับ Row Context)
– Calculated Tables (ดึงตารางชั่วคราว)
– Measures (ไม่มี Row Context ตอนหลัก)
– Visual Calculations (Power BI 2024+)

**คำเตือน:** ผลลัพธ์ของ DISTINCT ไม่ใช่ Additive – รวมค่า Distinct Count ของแต่ละกลุ่มจะไม่เท่ากับ Distinct Count ทั้งหมด

Leave a Reply

Your email address will not be published. Required fields are marked *