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
Verknüpft die Zeilen von table1
mit den Zeilen von table2
. Grundlage hierfür bildet eine Fuzzyübereinstimmung der Werte der Schlüsselspalten, die durch key1
(für table1
) und key2
(für table2
) ausgewählt wurden.
Eine Fuzzyübereinstimmung ist ein Vergleich, der eher auf Ähnlichkeit als auf genauer Übereinstimmung des Texts beruht.
Standardmäßig wird ein innerer Join durchgeführt, es kann aber optional joinKind
hinzugefügt werden, um den Typ des Joins festzulegen. Beispiele für Optionen:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
Optional können joinOptions
einbezogen werden, um anzugeben, wie die Schlüsselspalten verglichen werden sollen. Beispiele für Optionen:
ConcurrentRequests
: Eine Zahl zwischen 1 und 8, die die Anzahl von parallelen Threads angibt, die für Fuzzyübereinstimmungen verwendet werden sollen. Der Standardwert ist 1.Culture
: Ermöglicht den Abgleich von Datensätzen basierend auf kulturspezifischen Regeln. Dabei kann es sich um einen beliebigen Kulturnamen handeln. Beispielsweise werden bei Festlegung der Option „Culture“ auf „ja-JP“ Datensätze ermittelt, die auf der japanischen Kultur basieren. Der Standardwert ist "", wodurch die Zuordnung auf der Grundlage der englischbasierten Kultur erfolgt.IgnoreCase
: Dies ist ein logischer Wert (true/false), der die Zuordnung von Schlüsseln ermöglicht, bei denen die Groß- und Kleinschreibung beachtet wird. Bei „true“ wird „Trauben“ beispielsweise „trauben“ zugeordnet. Der Standardwert ist true.IgnoreSpace
: Dies ist ein logischer Wert (true/false), der das Kombinieren von Textteilen ermöglicht, um Übereinstimmungen zu suchen. Bei TRUE wird „Gra pes“ beispielsweise „Grapes“ zugeordnet. Der Standardwert ist true.NumberOfMatches
: Eine ganze Zahl, die die maximale Anzahl an übereinstimmenden Zeilen angibt, die für jede Eingabezeile zurückgegeben werden können. Beispielsweise gibt der Wert 1 höchstens eine übereinstimmende Zeile für jede Eingabezeile zurück. Wenn diese Option nicht angegeben wird, werden alle übereinstimmenden Zeilen zurückgegeben.SimilarityColumnName
: Dies ist ein Name für die Spalte, die die Ähnlichkeit zwischen einem Eingabewert und dem repräsentativen Wert für diese Eingabe anzeigt. Der Standardwert ist NULL. In Diesem Fall wird keine neue Spalte für Ähnlichkeiten hinzugefügt.Threshold
: Dies ist eine Zahl zwischen 0,00 und 1,00, die den Ähnlichkeitswert angibt, bei dem zwei Werte zugeordnet werden. Beispiel: „Trauben“ und „Trauen“ (fehlendes „b“) werden nur dann zugeordnet, wenn diese Option auf weniger als 0,90 festgelegt ist. Ein Schwellenwert von 1,00 erlaubt nur exakte Übereinstimmungen. (Beachten Sie, dass Unterschiede in der Groß- und Kleinschreibung, Wortreihenfolge und Interpunktion bei ungenauen „exakten Übereinstimmungen“ ignoriert werden können.) Der Standardwert ist 0,80.TransformationTable
: Dies ist eine Tabelle, die das Zuordnen von Datensätzen basierend auf benutzerdefinierten Wertzuordnungen ermöglicht. Dabei sollten die Spalten „From“ und „To“ enthalten sein. Beispiel: „Trauben“ stimmt mit „Rosinen“ überein, wenn eine Transformationstabelle bereitgestellt wird, in der die Spalte „From“ den Wert „Trauben“ und die Spalte „To“ den Wert „Rosinen“ enthält. Beachten Sie, dass die Transformation auf alle Vorkommen des Texts in der Transformationstabelle angewendet wird. Bei der Transformationstabelle oben wird „Trauben sind süß“ auch „Rosinen sind süß“ zugeordnet.
Linker innerer Fuzzyjoin zweier Tabellen basierend auf [FirstName]
Verwendung
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]
)
Ausgabe
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
]
})