Table.FuzzyNestedJoin
ไวยากรณ์
Table.FuzzyNestedJoin(table1 as table, key1 as any, table2 as table, key2 as any, newColumnName as text, optional joinKind as nullable number, optional joinOptions as nullable record) as table
เกี่ยวกับ
รวมแถวของ table1
กับแถวของ table2
โดยยึดตามการจับคู่ค่าของคอลัมน์หลักแบบไม่ลับ ซึ่งถูกเลือกโดย key1
(สําหรับ table1
) และ key2
(สําหรับ table2
) ผลลัพธ์จะถูกส่งกลับในคอลัมน์ใหม่ที่ชื่อว่าnewColumnName
การจับคู่แบบไม่ชัดเจนคือการเปรียบเทียบตามความคล้ายคลึงกันของข้อความมากกว่าความเท่าเทียมกันของข้อความ
ที่เลือกได้ joinKind
จะระบุชนิดของการรวมที่จะดําเนินการ ตามค่าเริ่มต้น การรวมภายนอกด้านซ้าย (left outer join) จะดําเนินการหาก joinKind
ไม่ได้ระบุ ตัวเลือกมีดังนี้
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
อาจรวมชุด joinOptions
ที่เลือกได้ เพื่อระบุวิธีการเปรียบเทียบคอลัมน์คีย์ ตัวเลือกมีดังนี้
ConcurrentRequests
: ตัวเลขระหว่าง 1 ถึง 8 ที่ระบุจํานวนเธรดขนานที่จะใช้สําหรับการจับคู่แบบไม่ชัดเจน ค่าเริ่มต้นคือ 1 คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้หากคุณมีความขัดแย้งในพอร์ตCulture
: อนุญาตให้มีเรกคอร์ดที่ตรงกันตามกฎเฉพาะของวัฒนธรรม ซึ่งอาจเป็นชื่อวัฒนธรรมที่ถูกต้อง ตัวอย่างเช่น ตัวเลือกวัฒนธรรมของ "ja-JP" จะจับคู่ระเบียนตามวัฒนธรรมญี่ปุ่น ค่าเริ่มต้นคือ "" ซึ่งจะจับคู่ตามวัฒนธรรมอังกฤษที่ไม่แปรเปลี่ยนIgnoreCase
: ค่าตรรกะ (จริง/เท็จ) ที่อนุญาตให้มีการจับคู่คีย์แบบไม่ตรงตามตัวพิมพ์ใหญ่-เล็ก ตัวอย่างเช่น เมื่อเป็นจริง "Grapes" จะถูกจับคู่กับ "grapes" ค่าเริ่มต้นคือ จริงIgnoreSpace
: ค่าตรรกะ (จริง/เท็จ) ที่อนุญาตให้มีการรวมส่วนของข้อความเพื่อค้นหารายการที่ตรงกัน ตัวอย่างเช่น เมื่อเป็นจริง "Gra pes" จะถูกจับคู่กับ "Grapes" ค่าเริ่มต้นคือ จริงNumberOfMatches
: จํานวนเต็มที่ระบุจํานวนแถวที่ตรงกันสูงสุดที่สามารถแสดงได้สําหรับแถวอินพุตทั้งหมด ตัวอย่างเช่น ค่า 1 จะส่งกลับในแถวที่ตรงกันมากที่สุดสําหรับแต่ละแถวอินพุต ถ้าไม่ได้ระบุตัวเลือกนี้ แถวที่ตรงกันทั้งหมดจะถูกส่งกลับSimilarityColumnName
: ชื่อสําหรับคอลัมน์ที่แสดงความคล้ายคลึงกันระหว่างค่าอินพุตและค่าตัวแทนสําหรับอินพุตนั้น ค่าเริ่มต้นเป็น null ซึ่งในกรณีนี้จะไม่มีการเพิ่มคอลัมน์ใหม่สําหรับความคล้ายคลึงกันThreshold
: ตัวเลขระหว่าง 0.00 และ 1.00 ที่ระบุคะแนนความคล้ายคลึงกันที่จะจับคู่ค่าสองค่า ตัวอย่างเช่น "Grapes" และ "Graes" ("p" หายไป) จะจับคู่ก็ต่อเมื่อตั้งค่าตัวเลือกนี้น้อยกว่า 0.90 ค่าเกณฑ์ 1.00 จะอนุญาตให้จับคู่ตรงกันทั้งหมดเท่านั้น (โปรดทราบว่า "การจับคู่ที่แน่นอน" แบบไม่ชัดเจนอาจละเว้นความแตกต่าง เช่น การกําหนดลําดับคํา และเครื่องหมายวรรคตอน) ค่าเริ่มต้นคือ 0.80TransformationTable
: ตารางที่อนุญาตให้จับคู่ระเบียนโดยยึดตามการแมปค่าแบบกําหนดเอง ซึ่งควรประกอบด้วยคอลัมน์ "From" และ "To" ตัวอย่างเช่น "Grapes" จับคู่กับ "Raisins" ถ้ามีตารางการแปลงที่มีคอลัมน์ "From" ที่มี "Grapes" และคอลัมน์ "To" ที่มี "Raisins" โปรดทราบว่าการแปลงจะนําไปใช้กับข้อความทั้งหมดที่เกิดขึ้นในตารางการแปลง ด้วยตารางการแปลงข้างต้น "Grapes are sweet" จะจับคู่กับ "Raisins are sweet"
ตัวอย่าง 1
การรวมภายในด้านซ้ายแบบไม่เป็นทางการของสองตารางโดยยึดตาม [FirstName]
การใช้งาน
Table.FuzzyNestedJoin(
Table.FromRecords(
{
[CustomerID = 1, FirstName1 = "Bob", Phone = "555-1234"],
[CustomerID = 2, FirstName1 = "Robert", Phone = "555-4567"]
},
type table [CustomerID = nullable number, FirstName1 = nullable text, Phone = nullable text]
),
{"FirstName1"},
Table.FromRecords(
{
[CustomerStateID = 1, FirstName2 = "Bob", State = "TX"],
[CustomerStateID = 2, FirstName2 = "bOB", State = "CA"]
},
type table [CustomerStateID = nullable number, FirstName2 = nullable text, State = nullable text]
),
{"FirstName2"},
"NestedTable",
JoinKind.LeftOuter,
[IgnoreCase = true, IgnoreSpace = false]
)
เอาท์พุท
Table.FromRecords({
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
NestedTable = Table.FromRecords({
[
CustomerStateID = 1,
FirstName2 = "Bob",
State = "TX"
],
[
CustomerStateID = 2,
FirstName2 = "bOB",
State = "CA"
]
})
],
[
CustomerID = 2,
FirstName1 = "Robert",
Phone = "555-4567",
NestedTable = Table.FromRecords({})
]
})