Compartilhar via


Table.FuzzyNestedJoin

Sintaxe

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

Sobre

Une 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). Os resultados são retornados em uma nova coluna chamada newColumnName.

Correspondência difusa é uma comparação baseada na similaridade do texto em vez da igualdade de texto.

O opcional joinKind especifica o tipo de junção a ser executada. Por padrão, uma junção externa esquerda será executada se não joinKind for especificado. 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 cultura de "ja-JP" corresponde a registros com base na cultura japonesa. O valor padrão é "", que corresponde com base na cultura inglesa invariável.
  • IgnoreCase: um valor lógico (true/false) que permite correspondência de chave que não diferencia maiúsculas de minúsculas. Por exemplo, quando verdadeiro, "Uvas" é correspondido com "uvas". O valor padrão é true.
  • IgnoreSpace: um valor lógico (true/false) que permite a combinação de partes de texto para localizar 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 dessa entrada. O valor padrão é nulo, 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 similaridade na qual dois valores serão correspondidos. Por exemplo, "Uvas" e "Graes" (sem o "p") serão correspondidos somente se essa opção estiver definida como menor que 0,90. Um limite de 1,00 só permite correspondências exatas. (Observe que uma "correspondência exata" difusa pode ignorar diferenças como maiúsculas, ordem de 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 valor personalizados. Ele deve conter colunas "De" e "Para". Por exemplo, "Uvas" será correspondida com "Raisins" se uma tabela de transformação for fornecida com a coluna "From" contendo "Uvas" e a coluna "Para" que contém "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, "Uvas são doces" também será correspondida com "Passas são doces".

Exemplo 1

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

Usage

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

Saída

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