Udostępnij za pośrednictwem


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

Informacje

Łączy wiersze z wierszami table2 w oparciu o rozmyte dopasowanie wartości kolumn kluczy wybranych przez key1 (dla table1) i key2 (dla table2).table1 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.

Opcjonalnie joinKind określa rodzaj sprzężenia do wykonania. Domyślnie lewe sprzężenia zewnętrzne jest wykonywane, jeśli nie określono elementu joinKind . Dostępne opcje:

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".

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({})
    ]
})