Skip to main content

Table.FuzzyJoin

Ενώνει τις γραμμές των δύο πινάκων ασαφούς συμφωνίας με βάση τα δεδομένα κλειδιά.

Syntax

Table.FuzzyJoin(
table1 as table,
key1 as any,
table2 as table,
key2 as any,
optional joinKind as JoinKind.Type,
optional joinOptions as record
) as table

Remarks

Συνδέει τις γραμμές του table1 με τις γραμμές του table2 με βάση τη σύγκριση ασαφούς συμφωνίας των τιμών των στηλών κλειδιού που επιλέγονται κατά key1 (για το table1) και κατά key2 (για το table2).

Η ασαφής συμφωνία είναι μια σύγκριση με βάση τη ομοιότητα του κειμένου αντί για την ισότητα του κειμένου.

Από προεπιλογή, εκτελείται εσωτερικός σύνδεσμος, ωστόσο μπορεί να συμπεριληφθεί μια προαιρετική επιλογή 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 : Μια λογική τιμή (true/false) που επιτρέπει την αντιστοίχιση κλειδιών χωρίς διάκριση πεζών-κεφαλαίων. Για παράδειγμα, όταν είναι true, η λέξη "Σταφύλια" αντιστοιχίζεται με τη λέξη "σταφύλια". Η προεπιλεγμένη τιμή είναι true.
  • IgnoreSpace : Μια λογική τιμή (true/false) που επιτρέπει τον συνδυασμό τμημάτων κειμένου με σκοπό την εύρεση αντιστοιχιών. Για παράδειγμα, όταν είναι true, οι λέξεις "Στα φύλια" αντιστοιχίζονται με τη λέξη "Σταφύλια". Η προεπιλεγμένη τιμή είναι true.
  • NumberOfMatches : Ένας ακέραιος αριθμός που καθορίζει τον μέγιστο αριθμό αντιστοιχισμένων γραμμών που μπορούν να επιστραφούν για κάθε γραμμή εισόδου. Για παράδειγμα, η τιμή 1 θα επιστρέψει έως μία αντιστοιχισμένη γραμμή για κάθε γραμμή εισόδου. Αν δεν παρασχεθεί αυτή η επιλογή, επιστρέφονται όλες οι αντιστοιχισμένες γραμμές.
  • SimilarityColumnName : Ένα όνομα για τη στήλη που εμφανίζει την ομοιότητα μεταξύ μιας τιμής εισόδου και της αντιπροσωπευτικής τιμής για αυτή την είσοδο. Η προεπιλεγμένη τιμή είναι null, στην οποία περίπτωση δεν θα προστεθεί νέα στήλη για ομοιότητες.
  • Threshold : Ένας αριθμός μεταξύ 0,00 και 1,00 που καθορίζει τη βαθμολογία ομοιότητας με την οποία θα αντιστοιχιστούν δύο τιμές. Για παράδειγμα, το "Grapes" και το "Graes" (λείπει το "p") συμφωνούν μόνο αν αυτή η επιλογή έχει οριστεί σε λιγότερο από 0,90. Ένα όριο 1,00 επιτρέπει μόνο ακριβείς αντιστοιχίσεις. (Σημειώστε ότι ένα ασαφές "ακριβές ταίριασμα" μπορεί να αγνοήσει διαφορές όπως το περίβλημα, η σειρά λέξεων και τα σημεία στίξης.) Η προεπιλεγμένη τιμή είναι 0,80.
  • TransformationTable : Ένας πίνακας που επιτρέπει την αντιστοίχιση εγγραφών βάσει προσαρμοσμένων αντιστοιχίσεων τιμών. Θα πρέπει να περιέχει στήλες "από" και "προς". Για παράδειγμα, Η λέξη "Σταφύλια" αντιστοιχίζεται με τη λέξη "Σταφίδες" αν έχει παρασχεθεί πίνακας μετασχηματισμού με τη λέξη "Σταφύλια" στη στήλη "από" και τη λέξη "Σταφίδες" στη στήλη "προς". Λάβετε υπόψη ότι ο μετασχηματισμός θα εφαρμοστεί σε όλες τις εμφανίσεις του κειμένου στον πίνακα μετασχηματισμού. Με τον παραπάνω πίνακα μετασχηματισμού, η φράση "θέλω σταφύλια" θα αντιστοιχιστεί επίσης με τη φράση "θέλω σταφίδες".

Examples

Example #1

Αριστερός εσωτερικός ασαφής σύνδεσμος δύο πινάκων με βάση το [FirstName]

Table.FuzzyJoin(
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"},
JoinKind.LeftOuter,
[IgnoreCase = true, IgnoreSpace = false]
)

Result:

Table.FromRecords({
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
CustomerStateID = 1,
FirstName2 = "Bob",
State = "TX"
],
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
CustomerStateID = 2,
FirstName2 = "bOB",
State = "CA"
],
[
CustomerID = 2,
FirstName1 = "Robert",
Phone = "555-4567",
CustomerStateID = null,
FirstName2 = null,
State = null
]
})

Category

Table.Transformation