Partilhar via


Table.FuzzyJoin

Sintaxe

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

Sobre nós

Junta as linhas de table1 com as linhas de table2 com base em uma correspondência difusa dos valores das colunas de chave selecionadas por key1 (para table1) e key2 (para table2).

A correspondência difusa é uma comparação baseada na semelhança do texto e não na igualdade do texto.

Por padrão, uma junção interna é executada, no entanto, uma joinKind opcional pode ser incluída para especificar o tipo de associação. As opções incluem:

Um conjunto opcional de joinOptions pode ser incluído para especificar como comparar as colunas de chave. As opções incluem:

  • ConcurrentRequests: Um número entre 1 e 8 que especifica o número de threads paralelos a serem usados para correspondência difusa. O valor padrão é 1.
  • Culture: Permite a correspondência de registros com base em regras específicas da cultura. Pode ser qualquer nome de cultura válido. Por exemplo, uma opção de Cultura de "ja-JP" corresponde a registros relacionados à cultura japonesa. O valor padrão é "", que corresponde com base na cultura inglesa invariante.
  • IgnoreCase: Um valor lógico (verdadeiro/falso) que permite a correspondência de chaves independentemente de maiúsculas e minúsculas. Por exemplo, quando é verdade, "Uvas" correspondem a "uvas". O valor padrão é true.
  • IgnoreSpace: Um valor lógico (verdadeiro/falso) que permite a combinação de partes de texto para encontrar correspondências. Por exemplo, quando verdadeiro, "Gra pes" é correspondido com "Uvas". O valor padrão é true.
  • NumberOfMatches: Um número inteiro que especifica o número máximo de linhas correspondentes que podem ser retornadas para cada linha de entrada. Por exemplo, um valor de 1 retornará no máximo uma linha correspondente para cada linha de entrada. Se essa opção não for fornecida, todas as linhas correspondentes serão retornadas.
  • SimilarityColumnName: Um nome para a coluna que mostra a semelhança entre um valor de entrada e o valor representativo para essa entrada. O valor padrão é null, caso em que uma nova coluna para semelhanças não será adicionada.
  • Threshold: Um número entre 0,00 e 1,00 que especifica a pontuação de semelhança na qual dois valores serão correspondidos. Por exemplo, "Uvas" e "Graes" (faltando o "p") correspondem apenas se esta opção for definida como inferior a 0,90. Um limite de 1,00 só permite correspondências exatas. (Observe que uma "correspondência exata" difusa pode ignorar diferenças como capitalização, ordem das palavras e pontuação.) O valor padrão é 0,80.
  • TransformationTable: Uma tabela que permite a correspondência de registros com base em mapeamentos de valores personalizados. Deve conter as colunas "De" e "Para". Por exemplo, "Uvas" é associada a "Passas" se for fornecida uma tabela de transformação com a coluna "De" contendo "Uvas" e a coluna "Para" contendo "Passas". Observe que a transformação será aplicada a todas as ocorrências do texto na tabela de transformação. Com a tabela de transformação acima, "As uvas são doces" também será correspondido com "As passas são doces".

Exemplo 1

Junção difusa interna esquerda de duas tabelas baseadas em [FirstName]

Utilização

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]
)

Saída

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