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
Łączy wiersze z wierszami table2
w oparciu o rozmyte dopasowanie wartości kolumn kluczy wybranych przez key1
(dla table1
) i key2
(dla table2
).table1
Dopasowywanie rozmyte to porównanie oparte na podobieństwie tekstu, a nie równości tekstu.
Domyślnie jest wykonywane sprzężenie wewnętrzne, jednak opcjonalne joinKind
może być dołączone do określenia typu sprzężenia. Dostępne opcje:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
Opcjonalny zestaw joinOptions
może zostać uwzględniony w celu określenia sposobu porównywania kolumn kluczy. Dostępne opcje:
ConcurrentRequests
: liczba z zakresu od 1 do 8 określająca liczbę wątków równoległych do użycia do dopasowywania rozmytego. Domyślna wartość wynosi 1.Culture
: umożliwia dopasowywanie rekordów na podstawie reguł specyficznych dla kultury. Może to być dowolna prawidłowa nazwa kultury. Na przykład opcja Kultura "ja-JP" pasuje do rekordów opartych na kulturze japońskiej. Wartość domyślna to "", która jest zgodna z niezmienną kulturą języka angielskiego.IgnoreCase
: wartość logiczna (prawda/fałsz), która umożliwia dopasowywanie klucza bez uwzględniania wielkości liter. Na przykład w przypadku wartości true wyrażenie "Winogrona" jest dopasowywane do "winogron". Wartość domyślna to true.IgnoreSpace
: wartość logiczna (prawda/fałsz), która umożliwia łączenie części tekstowych w celu znalezienia dopasowań. Na przykład, gdy wartość true, "Gra pes" jest dopasowywana do "Winogrona". Wartość domyślna to true.NumberOfMatches
: Liczba całkowita określająca maksymalną liczbę pasujących wierszy, które mogą być zwracane dla każdego wiersza wejściowego. Na przykład wartość 1 zwróci co najwyżej jeden pasujący wiersz dla każdego wiersza wejściowego. Jeśli ta opcja nie zostanie podana, zwracane są wszystkie pasujące wiersze.SimilarityColumnName
: nazwa kolumny, która pokazuje podobieństwo między wartością wejściową a reprezentatywną wartością dla tych danych wejściowych. Wartość domyślna to null, w tym przypadku nowa kolumna podobieństwa nie zostanie dodana.Threshold
: Liczba z zakresu od 0,00 do 1,00 określająca wynik podobieństwa, przy którym zostaną dopasowane dwie wartości. Na przykład wartości "Winogrona" i "Graes" (brak "p") są dopasowywane tylko wtedy, gdy ta opcja jest ustawiona na mniejszą niż 0,90. Próg 1,00 zezwala tylko na dokładne dopasowania. (Należy pamiętać, że rozmyte "dokładne dopasowanie" może ignorować różnice, takie jak wielkość liter, kolejność wyrazów i interpunkcja). Wartość domyślna to 0,80.TransformationTable
: tabela, która umożliwia dopasowywanie rekordów na podstawie niestandardowych mapowań wartości. Powinna zawierać kolumny "From" i "To". Na przykład wyrażenie "Owoce" jest dopasowywane do wartości "Raisins", jeśli tabela przekształceń jest dostarczana z kolumną "From" zawierającą "Owoce" i kolumnę "Do" zawierającą "Rodzynki". Należy pamiętać, że przekształcenie zostanie zastosowane do wszystkich wystąpień tekstu w tabeli przekształceń. Po powyższej tabeli transformacji "Winogrona są słodkie" będą również dopasowane do "Rodzynki są słodkie".
Lewe wewnętrzne sprzężenie rozmyte dwóch tabel na podstawie [FirstName]
Użycie
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]
)
Wyjście
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
]
})