Thep Excel

Table.Distinctลบแถวที่ซ้ำกันออกจากตาราง

Table.Distinct ลบแถวที่ซ้ำกันออกจากตารางตามคอลัมน์ที่กำหนด หรือทั้งตารางถ้าไม่ระบุคอลัมน์

fx
=Table.Distinct(table, [equationCriteria]) as table

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table Table ตารางที่ต้องการลบแถวซ้ำกัน
[equationCriteria]ไม่บังคับ Text or List ทั้งแถว คอลัมน์ที่ต้องการใช้ในการเช็คการซ้ำกัน (ถ้าไม่ระบุจะเช็คทั้งแถว)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

Table.Distinct ใช้สำหรับลบแถวที่ซ้ำกันออกจากตารางตามเงื่อนไขที่คุณกำหนด ถ้าไม่ระบุคอลัมน์ก็จะหาแถวที่ซ้ำกันทั้งแถวแบบเดียวกันหมด

ที่เจ๋งคือ Table.Distinct ทำให้เราได้แถวที่ไม่ซ้ำกันง่ายๆ ไม่ต้องมานั่งสร้างสูตรซับซ้อน

ส่วนตัวผม มักใช้ Table.Distinct เวลามีข้อมูลจากหลายแหล่งที่มีการซ้ำกันเยอะ เช่น ดึงข้อมูลลูกค้าจากระบบต่างๆ แล้วมันซ้ำกันเพราะลูกค้าปรากฏในหลายระบบ ใช้ Table.Distinct แล้วปัญหาหมดไป 😎

Examples

ตัวอย่างพื้นฐาน – ลบแถวซ้ำทั้งหมดlet Sales = Table.FromRecords({ [ProductID = 1, Product = "Laptop", Price = 999], [ProductID = 2, Product = "Mouse", Price = 25], [ProductID = 1, Product = "Lap…

ตั้งแต่ไม่ระบุ equationCriteria ก็จะเช็คแถวทั้งหมด ถ้าข้อมูลทั้ง 3 คอลัมน์เหมือนกันแบบเดียวกันจะถือว่าซ้ำกัน

fx
let
Sales = Table.FromRecords({
[ProductID = 1, Product = "Laptop", Price = 999],
[ProductID = 2, Product = "Mouse", Price = 25],
[ProductID = 1, Product = "Laptop", Price = 999]
}),
Unique = Table.Distinct(Sales)
in
Unique

ผลลัพธ์ตารางมี 2 แถว (แถวที่ 3 ซ้ำกับแถวที่ 1 ถูกลบออก)
ลบแถวซ้ำตามคอลัมน์เดียวlet Customers = Table.FromRecords({ [CustomerID = "C001", Name = "John", City = "Bangkok"], [CustomerID = "C002", Name = "Jane", City = "Bangkok"], [CustomerID…

ระบุให้ดูเฉพาะคอลัมน์ CustomerID ถ้า CustomerID ซ้ำจะลบแถวที่ 3 ออก แม้ว่า City ต่างกันก็ตาม

fx
let
Customers = Table.FromRecords({
[CustomerID = "C001", Name = "John", City = "Bangkok"],
[CustomerID = "C002", Name = "Jane", City = "Bangkok"],
[CustomerID = "C001", Name = "John", City = "Chiang Mai"]
}),
UniqueByID = Table.Distinct(Customers, "CustomerID")
in
UniqueByID

ผลลัพธ์ตารางมี 2 แถว (เก็บแถวแรกของแต่ละ CustomerID)
ลบแถวซ้ำตามหลายคอลัมน์let Orders = Table.FromRecords({ [OrderID = 1, CustomerID = "C001", Amount = 500], [OrderID = 2, CustomerID = "C002", Amount = 300], [OrderID = 3, CustomerID =…

ใช้ list {"CustomerID", "Amount"} เพื่อเช็คความซ้ำกันตามสองคอลัมน์พร้อมกัน

fx
let
Orders = Table.FromRecords({
[OrderID = 1, CustomerID = "C001", Amount = 500],
[OrderID = 2, CustomerID = "C002", Amount = 300],
[OrderID = 3, CustomerID = "C001", Amount = 500]
}),
UniqueByIDAmount = Table.Distinct(Orders, {"CustomerID", "Amount"})
in
UniqueByIDAmount

ผลลัพธ์ตารางมี 2 แถว (ลบแถวที่ซ้ำกันในทั้ง CustomerID และ Amount)
ประยุกต์ใช้ – ข้อมูลอีเมลจากหลายแหล่งlet ImportedEmails = Table.FromRecords({ [Email = "john@example.com", Source = "LinkedIn"], [Email = "jane@example.com", Source = "Facebook"], [Email = "john@ex…

ดึงข้อมูลอีเมลจากหลายแหล่ง Table.Distinct ลบที่ซ้ำกัน เก็บเฉพาะแถวแรกของแต่ละอีเมล

fx
let
ImportedEmails = Table.FromRecords({
[Email = "john@example.com", Source = "LinkedIn"],
[Email = "jane@example.com", Source = "Facebook"],
[Email = "john@example.com", Source = "Gmail"],
[Email = "bob@example.com", Source = "LinkedIn"]
}),
UniqueEmails = Table.Distinct(ImportedEmails, "Email"),
Result = Table.SelectColumns(UniqueEmails, {"Email"})
in
Result

ผลลัพธ์ตารางมี 3 แถว (john@example.com, jane@example.com, bob@example.com)

FAQs

Table.Distinct กับ Table.SelectRows ต่างกันอย่างไร?+

Table.Distinct ลบแถวที่ซ้ำกัน ส่วน Table.SelectRows กรองแถวตามเงื่อนไข ทั้งสองใช้คนละวัตถุประสงค์

ถ้าข้อมูลมีเยอะ Table.Distinct จะช้าไหม?+

ตัว Power Query จะทำให้เร็วที่สุดตามที่เป็นไปได้ ถ้ากังวลใจให้ใช้ Table.Buffer() ก่อน Table.Distinct เพื่อให้มั่นใจในการทำงาน

ข้อมูลซ้ำไป แถวไหนถูกเก็บไว้?+

ไม่มีการรับประกัน Power Query จะทำการเลือกแบบที่มันเห็นสมควร ถ้าต้องการความแน่นอน (เช่น ต้องเก็บแถวแรก) ให้เรียง Table.Sort() ก่อน

สามารถลบแถวซ้ำตามคอลัมน์ที่คำนวณได้ไหม?+

ได้ สร้างคอลัมน์ใหม่ที่มีค่าที่ต้องการก่อน แล้วใช้ Table.Distinct ตามคอลัมน์นั้น

Resources & Related

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

ฟังก์ชันนี้Table.DistinctTable functions
Table functions (3)
Table.AddFuzzyClusterColumn

Table.AddFuzzyClusterColumn เพิ่มคอลัมน์ใหม่ที่มีค่าตัวแทนสำหรับแต่ละกลุ่ม โดยจับคู่ข้อมูลที่คล้ายกัน แม้จะมีข้อความที่ต่างกัน เช่น การสะกด ตัวอักษรพิมพ์ใหญ่-เล็ก หรือช่องว่าง

Table.Group

Table.Group จัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนดและสรุปผลในแต่ละกลุ่มด้วย aggregation functions เช่น List.Sum, List.Count, List.Average คล้ายกับ GROUP BY ใน SQL แต่ทรงพลังกว่าเพราะสามารถจัดกลุ่มหลายคอลัมน์พร้อมกันและสร้างคอลัมน์สรุปผลหลายคอลัมน์ในคำสั่งเดียว รองรับ GroupKind.Local เพื่อเพิ่มประสิทธิภาพเมื่อข้อมูลเรียงลำดับแล้ว

Table.SelectRows

Table.SelectRows เป็นฟังก์ชันสำหรับกรองตาราง (filter table) ใน Power Query โดยใช้ฟังก์ชันเงื่อนไข (condition function) เพื่อตรวจสอบแต่ละแถว ถ้าเงื่อนไขคืนค่า true จะเก็บแถวนั้นไว้ ถ้าเป็น false จะตัดทิ้ง สามารถใช้ keyword 'each' ร่วมกับการอ้างอิงคอลัมน์ด้วย [ColumnName] เพื่อเขียนเงื่อนไขได้สะดวก รองรับการกรองตามตัวเลข ข้อความ วันที่ การตรวจสอบค่า null และเงื่อนไขที่ซับซ้อนด้วย and/or operators ฟังก์ชันนี้รองรับ Query Folding ซึ่งช่วยเพิ่มประสิทธิภาพเมื่อทำงานกับ data source ขนาดใหญ่

enumerations (1)
GroupKind.Type

ระบุประเภทการจัดกลุ่มใน Table.Group ว่าจะใช้ Local (จัดกลุ่มแถวติดต่อกัน) หรือ Global (รวบรวมแถวทั้งหมดที่มี key เดียวกัน) ใช้เพื่อปรับประสิทธิภาพและควบคุมวิธีการจัดกลุ่มข้อมูล

List functions (1)
List.Distinct

List.Distinct จะคืน List ใหม่ที่ไม่มีค่าซ้ำกัน โดยเก็บสมาชิกตัวแรกที่พบไว้ และทิ้งตัวที่ซ้ำกันทิ้งไป สามารถกำหนด Comparer เพื่อใช้ Logic การเปรียบเทียบที่แตกต่างกันได้ เช่น ไม่สนใจตัวพิมพ์เล็ก/ใหญ่

Comments

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