Table.FuzzyJoin
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
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:
- JoinKind.Inner
- JoinKind.LeftOuter
- JoinKind.RightOuter
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
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 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 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" é 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".
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
]
})