Table.FuzzyNestedJoin
Składnia
Table.FuzzyNestedJoin(table1 as table, key1 as any, table2 as table, key2 as any, newColumnName as text, 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
). Wyniki są zwracane w nowej kolumnie o nazwie newColumnName
.
Dopasowywanie rozmyte to porównanie oparte na podobieństwie tekstu, a nie równości tekstu.
Opcjonalny joinKind
określa rodzaj sprzężenia do wykonania. Domyślnie wykonywane jest lewe sprzężenie zewnętrzne, jeśli nie określono joinKind
. 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żna uwzględnić, aby określić, jak porównywać kolumny kluczowe. Dostępne są następujące opcje:
-
ConcurrentRequests
: liczba z zakresu od 1 do 8 określająca liczbę równoległych wątków do użycia przy dopasowywaniu przybliżonym. 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 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, w którym zostaną dopasowane dwie wartości. Na przykład, "Winogrona" i "Graes" (brak "p") są dopasowywane tylko wtedy, gdy opcja jest ustawiona poniżej 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 w oparciu o niestandardowe mapowania wartości. Powinna zawierać kolumny "From" i "To". Na przykład wyrażenie "Winogrona" jest dopasowywane do wartości "Raisins", jeśli tabela przekształceń jest dostarczana 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ń. Dzięki powyższej tabeli transformacji "Winogrona są słodkie" będą 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.FuzzyNestedJoin(
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"},
"NestedTable",
JoinKind.LeftOuter,
[IgnoreCase = true, IgnoreSpace = false]
)
Wyjście
Table.FromRecords({
[
CustomerID = 1,
FirstName1 = "Bob",
Phone = "555-1234",
NestedTable = Table.FromRecords({
[
CustomerStateID = 1,
FirstName2 = "Bob",
State = "TX"
],
[
CustomerStateID = 2,
FirstName2 = "bOB",
State = "CA"
]
})
],
[
CustomerID = 2,
FirstName1 = "Robert",
Phone = "555-4567",
NestedTable = Table.FromRecords({})
]
})