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 na 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 similaridade de texto, em vez de igualdade de texto.
O joinKind
opcional especifica o tipo de junção a ser executada. Por padrão, uma junção externa esquerda será executada se uma joinKind
não for especificada. 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 combinar registros com base em regras específicas da cultura. Pode ser qualquer nome de cultura válido. Por exemplo, a opção de Culture "ja-JP" faz a correspondência com registros com base no idioma japonês. O valor padrão é "", que faz a correspondência com base na cultura inglês invariável.IgnoreCase
: um valor lógico (true/false) que permite fazer a correspondência de chaves sem diferenciar maiúsculas de minúsculas. Por exemplo, quando true, "Grapes" corresponde a "grapes". O valor padrão é true.IgnoreSpace
: um valor lógico (true/false) que permite a combinação de partes de textos a fim de localizar correspondências. Por exemplo, quando true, "Gra pes" corresponde a "Grapes". O valor padrão é true.NumberOfMatches
: um número inteiro que especifica o número máximo de linhas correspondentes que poderão 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 informada, todas as linhas correspondentes serão retornadas.SimilarityColumnName
: um nome para a coluna que mostra a similaridade entre um valor de entrada e o valor representativo dessa entrada. O valor padrão é nulo e, nesse caso, não será adicionada uma nova coluna de similaridades.Threshold
: um número entre 0.0 e 1.0 que especifica a pontuação de similaridade com a qual dois valores serão correspondidos. Por exemplo, "Grapes" e "Graes" (sem o "p") serão correspondentes somente se essa opção estiver configurada 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 maiúsculas, ordem de palavras e pontuação.) O valor padrão é 0,80.TransformationTable
: uma tabela que permite fazer a correspondência de registros com base em mapeamentos de valor personalizados. Deve conter as colunas "From" e "To". Por exemplo, "Grapes" corresponderá a "Raisins" se for fornecida uma tabela de transformação com a coluna "From" contendo "Grapes" e a coluna "To" contendo "Raisins". 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, a frase "Grapes are sweet" também corresponderá à frase "Raisins are sweet".
Exemplo 1
Junção difusa interna esquerda das 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({})
]
})