Thep Excel

Table.AddFuzzyClusterColumnจัดกลุ่มข้อมูลที่คล้ายกัน

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

fx
= Table.AddFuzzyClusterColumn(table, columnName, newColumnName, [options]) as table

ความนิยม5/10
ความยาก4/10
ประโยชน์6/10

อัปเดต 6 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table Table ตารางที่ต้องการเพิ่มคอลัมน์เคลสเตอร์
columnName Text ชื่อคอลัมน์ที่มีข้อมูลที่ต้องการจับคู่แบบ Fuzzy
newColumnName Text ชื่อคอลัมน์ใหม่ที่จะเก็บค่าตัวแทนของแต่ละกลุ่ม
[options]ไม่บังคับ Record [IgnoreCase = true, IgnoreSpace = true, Threshold = 0.80] ระเบียนตัวเลือกสำหรับปรับแต่งการทำงาน เช่น Threshold, IgnoreCase, IgnoreSpace, Culture

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

Additional Notes

Table.AddFuzzyClusterColumn เป็นฟังก์ชันที่ช่วยทำความสะอาดข้อมูล (data cleaning) แบบฉลาดๆ ด้วยการจับคู่ข้อความที่คล้ายกันแม้มีการเขียนไม่สม่ำเสมอ มันจะจัดกลุ่มค่าต่างๆ เข้าด้วยกัน แล้วให้ค่าตัวแทน 1 ค่าสำหรับทั้งกลุ่ม

ที่เจ๋งคือ ฟังก์ชันนี้ใช้ Fuzzy Matching ซึ่งไม่ได้ตามเนื้อตามตัวแบบ 100% แต่มองหาความคล้ายคลึง เช่น ‘Seattle’, ‘seattl’, ‘Seatle’ มันจะรู้ว่าเหล่านี้ต้องการเขียนเป็นอย่างเดียว ช่วยแก้ปัญหา Typos, ตัวพิมพ์ใหญ่-เล็ก, ช่องว่างได้ครบถ้วน

ส่วนตัวผม เคยจัดการข้อมูลลูกค้า 10,000 รายที่ชื่อเหมือนๆ กันแต่เขียนไม่เท่า (บางคนพิมพ์ ‘microsoft corp’, บางคนพิมพ์ ‘Microsoft Corporation’) ตัวนี้ช่วยได้เยอะ เดี๋ยว 5 นาที ได้ผลลัพธ์ที่ใช้ได้เลย ข้อดี: ตั้งค่า Threshold ได้หลากหลาย ข้อจำกัด: ต้องรู้ว่า 0.80 กับ 0.95 นั้นต่างกันยังไง

How it works

ทำ Data Standardization

ทำ Data Standardization

แก้ปัญหาข้อมูลซ้ำซ้อน (De-duplication)

แก้ปัญหาข้อมูลซ้ำซ้อน (De-duplication)

เตรียมข้อมูล Master Data

เตรียมข้อมูล Master Data

Examples

ตัวอย่างพื้นฐาน – ทำความสะอาดสถานที่Table.AddFuzzyClusterColumn( Table.FromRecords( { [EmployeeID = 1, Location = "Seattle"], [EmployeeID = 2, Location = "seattl"], [EmployeeID = 3, Location = "Va…

ฟังก์ชันจับคู่ 'Seattle', 'seattl', 'Seatle' เป็นกลุ่มเดียว (คล้ายกัน >80%) และใช้ 'Seattle' เป็นค่าตัวแทน

fx
= Table.AddFuzzyClusterColumn(
Table.FromRecords(
{
[EmployeeID = 1, Location = "Seattle"],
[EmployeeID = 2, Location = "seattl"],
[EmployeeID = 3, Location = "Vancouver"],
[EmployeeID = 4, Location = "Seatle"]
},
type table [EmployeeID = nullable number, Location = nullable text]
),
"Location",
"Location_Cleaned",
[IgnoreCase = true, IgnoreSpace = true]
)

ผลลัพธ์ตารางใหม่มี 5 คอลัมน์: EmployeeID, Location, Location_Cleaned
Location_Cleaned จะมีค่า:
– 'Seattle' สำหรับ rows 1, 2, 4
– 'Vancouver' สำหรับ row 3
ตัวอย่างพื้นฐาน – ทำความสะอาดชื่อบริษัทTable.AddFuzzyClusterColumn( Table.FromRecords( { [CompanyID = 1, CompanyName = "Microsoft Corporation"], [CompanyID = 2, CompanyName = "microsft corporation"],…

ไม่ต้องกำหนด options ให้ใช้ค่าเริ่มต้น IgnoreCase=true ทำให้จับคู่ได้แม้มีตัวเล็ก-ใหญ่ต่าง

fx
= Table.AddFuzzyClusterColumn(
Table.FromRecords(
{
[CompanyID = 1, CompanyName = "Microsoft Corporation"],
[CompanyID = 2, CompanyName = "microsft corporation"],
[CompanyID = 3, CompanyName = "Google Inc"],
[CompanyID = 4, CompanyName = "google INC"]
},
type table [CompanyID = nullable number, CompanyName = nullable text]
),
"CompanyName",
"CompanyName_Standard"
)

ผลลัพธ์ตารางใหม่มี CompanyName_Standard:
– 'Microsoft Corporation' สำหรับ rows 1, 2
– 'Google Inc' สำหรับ rows 3, 4
ตัวอย่างขั้นสูง – ใช้ Threshold สูงสำหรับความแม่นยำTable.AddFuzzyClusterColumn( Source, "Product", "Product_Category", [Threshold = 0.95, IgnoreCase = true, IgnoreSpace = false] )

Threshold สูง = การจับคู่เข้มงวด ใช้เมื่อต้องการความแม่นยำสูง IgnoreSpace=false หมายความว่า 'Apple Pie' ≠ 'ApplePie'

fx
= Table.AddFuzzyClusterColumn(
Source,
"Product",
"Product_Category",
[Threshold = 0.95, IgnoreCase = true, IgnoreSpace = false]
)

ผลลัพธ์จัดกลุ่มเฉพาะสินค้าที่คล้ายกันมากกว่า 95% เท่านั้น ไม่ละเว้นช่องว่าง
ตัวอย่างขั้นสูง – เก็บคะแนนความคล้ายคลึงTable.AddFuzzyClusterColumn( Source, "CustomerName", "CustomerName_Cleaned", [ Threshold = 0.80, SimilarityColumnName = "MatchScore" ] )

SimilarityColumnName ช่วยให้คุณเห็นว่าการจับคู่มีความมั่นใจเพียงไร ค่า 1.0 = ตรงกันทุกตัว, 0.80-0.99 = ยอมรับได้

fx
= Table.AddFuzzyClusterColumn(
Source,
"CustomerName",
"CustomerName_Cleaned",
[
Threshold = 0.80,
SimilarityColumnName = "MatchScore"
]
)

ผลลัพธ์ตารางมี 2 คอลัมน์ใหม่:
– CustomerName_Cleaned (ค่าตัวแทน)
– MatchScore (คะแนน 0-1 ว่าค่าดั้งเดิมคล้ายกับตัวแทนเพียงไร)

FAQs

Table.AddFuzzyClusterColumn ต่างจาก Table.Distinct หรือ Table.Group อย่างไร?+

ง่ายๆ ก็คือ Table.Distinct มันแค่ลบแถวที่ซ้ำกันทุกตัว (ต้องตรงเป๊ะ) ส่วน Table.Group มันเพียงแค่จัดกลุ่มข้อมูลอย่างโง่ๆ (1+1 กับ 1.0 มันไม่เท่ากัน) แต่ Table.AddFuzzyClusterColumn มันชาญฉลาด มันจับคู่ที่คล้ายกันแล้วให้ค่าตัวแทน 1 ค่า ถ้าข้อมูลของคุณมี typo หรือเขียนไม่สม่ำเสมอ ตัวนี้เป็นทางออก

Threshold ควรตั้งค่าเท่าไหร่?+

ขึ้นอยู่กับว่าคุณต้องการความแม่นยำแค่ไหน: 0.70-0.80 = หลวมๆ (ยอมรับความผิดได้) | 0.80-0.90 = ตัวกลาง (ส่วนใหญ่ใช้อันนี้) | 0.90-0.99 = เข้มงวด (กลัวจัดกลุ่มผิด) ส่วนตัวผมชอบเริ่มที่ 0.80 แล้วทดสอบดู

ใช้กับ Power Query เวอร์ชันไหนได้?+

ได้ใน Microsoft 365 Excel, Power BI Desktop, Power Query Online, และ SQL Server 2019 ขึ้นไป ถ้าใช้ Excel เก่าๆ อาจต้องอัปเดต

เมื่อไรควรใช้ TransformationTable?+

เมื่อคุณมีรายการแมปที่รู้ล่วงหน้า เช่น 'USA' มีไว้แล้ว = 'United States', 'NYC' = 'New York' มันจะเร็วกว่า fuzzy matching เหมาะสำหรับข้อมูลที่ซ้ำๆ

ฟังก์ชันนี้จัดการกับภาษาต่างๆ ได้หรือ?+

ได้ใช้ Culture parameter: 'ja-JP' สำหรับญี่ปุ่น, 'th-TH' สำหรับไทย, 'de-DE' สำหรับเยอรมัน เป็นต้น ค่าว่าง = Invariant English (ไม่มีข้อความพิเศษ)

แต่ถ้าจัดกลุ่มข้อมูล 1 ล้านแถวนี่ใช้เวลาเท่าไร?+

มันขึ้นอยู่กับ Threshold และความซับซ้อนของข้อมูล โดยทั่วไป fuzzy matching เร็วกว่าการ filter-group-replace แบบ manual ส่วนตัวผมเจอข้อมูล 500,000 แถว ใช้เวลาประมาณ 1-2 นาทีเท่านั้น

Resources & Related

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

ฟังก์ชันนี้Table.AddFuzzyClusterColumnTable functions
Table functions (4)
Table.Distinct

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

Table.FuzzyJoin

Table.FuzzyJoin ใช้สำหรับเชื่อม 2 ตารางเข้าด้วยกันโดยใช้คีย์ที่มีความคล้ายคลึงกัน (Fuzzy Matching) แทนที่จะต้องเหมือนกันทุกตัวอักษร สามารถกำหนดระดับความเหมือน (Threshold) และตัวเลือกอื่นๆ ได้

Table.Group

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

Table.ReplaceValue

Table.ReplaceValue ใช้สำหรับค้นหาและแทนที่ค่าในตารางได้หลายวิธี ตั้งแต่แทนที่ค่าทั้งหมดไปจนถึงแทนที่แบบมีเงื่อนไข

Text functions (2)
Text.Proper

แปลงอักษรตัวแรกของทุกคำเป็นตัวพิมพ์ใหญ่ (Title Case) และส่วนที่เหลือเป็นตัวพิมพ์เล็ก

Text.Trim

Text.Trim ลบอักขระที่ระบุออกจากต้นและท้ายของข้อความ ค่าเริ่มต้นจะลบแค่ช่องว่าง

Comments

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