Table.FuzzyJoin
Składnia
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
Około
Łączy wiersze table1
z wierszami table2
na podstawie rozmytego dopasowania wartości kolumn kluczy wybranych przez key1
(dla table1
) i key2
(dla table2
).
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 opcjonalny joinKind
może zostać uwzględniony w celu określenia typu sprzężenia. Dostępne są następujące opcje:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
Opcjonalny zestaw joinOptions
może być uwzględniony w celu określenia sposobu porównywania kolumn kluczowych. Dostępne są następujące opcje:
-
ConcurrentRequests
: liczba z zakresu od 1 do 8, która określa, ile wątków równoległych można użyć do dopasowywania rozmytego. Wartość domyślna to 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 kluczy 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, w którym zostaną dopasowane dwie wartości. Na przykład "Winogrona" i "Graes" (brakuje "p") są dopasowywane tylko wtedy, gdy opcja jest ustawiona na wartość 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 umożliwiająca dopasowywanie rekordów na podstawie mapowań wartości niestandardowych. Powinna zawierać kolumny "From" i "To". Na przykład "Winogrona" jest dopasowywane do "Rodzynki", jeśli tabela przekształceń jest dostarczona z kolumną "From" zawierającą "Winogrona" i kolumną "To" zawierającą "Rodzynki". Należy pamiętać, że przekształcenie zostanie zastosowane do wszystkich wystąpień tekstu w tabeli przekształceń. Za pomocą powyższej tabeli transformacji "Winogrona są słodkie" zostaną również dopasowane do "Rodzynki są słodkie".
Przykład 1
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
]
})