Table.FuzzyJoin
Table.FuzzyJoin(table1 as table, key1 as any, table2 as table, key2 as any, optional joinKind as nullable number, optional joinOptions as nullable record) as table
Ενώνει τις γραμμές του με τις γραμμές του 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, τα "Σταφύλια" αντιστοιχίζεται στα "σταφύλια". Η προεπιλεγμένη τιμή είναι αληθές.IgnoreSpace
: Μια λογική τιμή (true/false) που επιτρέπει τον συνδυασμό τμημάτων κειμένου προκειμένου να βρεθούν αντιστοιχίσεις. Για παράδειγμα, όταν είναι true, τα "Στα φύλια" αντιστοιχίζεται στα "Σταφύλια". Η προεπιλεγμένη τιμή είναι αληθές.NumberOfMatches
: Ένας ακέραιος αριθμός που καθορίζει τον μέγιστο αριθμό αντιστοιχισμένων γραμμών που μπορούν να επιστραφούν για κάθε γραμμή εισόδου. Για παράδειγμα, η τιμή 1 θα επιστρέψει το πολύ μία αντίστοιχη γραμμή για κάθε γραμμή εισόδου. Εάν δεν παρέχεται αυτή η επιλογή, επιστρέφονται όλες οι αντίστοιχες γραμμές.SimilarityColumnName
: Ένα όνομα για τη στήλη που εμφανίζει την ομοιότητα μεταξύ μιας τιμής εισόδου και της αντιπροσωπευτικής τιμής για αυτή την είσοδο. Η προεπιλεγμένη τιμή είναι null, στην οποία περίπτωση δεν θα προστεθεί μια νέα στήλη για ομοιότητες.Threshold
: Ένας αριθμός μεταξύ 0,00 και 1,00 που καθορίζει τη βαθμολογία ομοιότητας με την οποία θα αντιστοιχιστούν δύο τιμές. Για παράδειγμα, η λέξη "Σταφύλια" και η λέξη "Σταφύλι" (λείπει το "α") αντιστοιχίζονται μόνο εάν αυτή η επιλογή έχει οριστεί σε μικρότερη τιμή από 0,90. Το όριο 1,00 επιτρέπει μόνο ακριβείς αντιστοιχίσεις. (Σημειώστε ότι μια ασαφής "ακριβής αντιστοίχιση" μπορεί να παραβλέψει διαφορές όπως το περίβλημα, η σειρά των λέξεων και τα σημεία στίξης.) Η προεπιλεγμένη τιμή είναι 0,80.TransformationTable
: Ένας πίνακας που επιτρέπει την αντιστοίχιση εγγραφών με βάση αντιστοιχίσεις προσαρμοσμένων τιμών. Θα πρέπει να περιέχει στήλες "Από" και "Προς". Για παράδειγμα, η λέξη "Σταφύλια" αντιστοιχίζεται με τις "Σταφίδες" εάν παρέχεται ένας πίνακας μετασχηματισμού με τη στήλη "Από" που περιέχει "Σταφύλια" και τη στήλη "Προς" που περιέχει "Σταφίδες". Σημειώστε ότι ο μετασχηματισμός θα εφαρμοστεί σε όλες τις εμφανίσεις του κειμένου στον πίνακα μετασχηματισμού. Με τον παραπάνω πίνακα μετασχηματισμού "Τα σταφύλια είναι γλυκά" θα αντιστοιχιστούν επίσης με το "Οι σταφίδες είναι γλυκές".
Αριστερός εσωτερικός ασαφής σύνδεσμος δύο πινάκων με βάση το [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]
)
Έξοδος
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
]
})