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

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

O joinKind opcional especifica o tipo de junção a ser executada. Por padrão, uma junção externa esquerda é executada se uma joinKind não for especificada. 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 baseados na 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 sem distinção entre maiúsculas e minúsculas. Por exemplo, quando verdadeiro, "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" é combinado 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 estiver 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 invólucro, 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" é associado a "Passas" se forem fornecidas 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.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({})
    ]
})