Compartir a través de


Table.FuzzyNestedJoin

Syntax

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

Acerca de

Combina las filas de table1 con las filas de table2 basadas en una coincidencia aproximada de los valores de las columnas de clave seleccionadas por key1 (para table1) y key2 (para table2). Los resultados se devuelven en una nueva columna denominada newColumnName.

La coincidencia aproximada es una comparación basada en la similitud del texto en lugar de la igualdad de texto.

joinKind Opcional especifica el tipo de combinación que se va a realizar. De forma predeterminada, se realiza una combinación externa izquierda si no se especifica .joinKind Entre las opciones se incluyen:

Se puede incluir un conjunto opcional de para especificar cómo comparar las columnas de joinOptions clave. Entre las opciones se incluyen:

  • ConcurrentRequests: número comprendido entre 1 y 8 que especifica el número de subprocesos paralelos que se van a usar para la coincidencia aproximada. El valor predeterminado es 1.
  • Culture: permite la coincidencia de registros en función de las reglas específicas de la referencia cultural. Puede ser cualquier nombre de referencia cultural válido. Por ejemplo, una opción Culture de "ja-JP" coincide con los registros basados en la referencia cultural japonesa. El valor predeterminado es "", que coincide en función de la referencia cultural de inglés invariable.
  • IgnoreCase: valor lógico (true/false) que permite la coincidencia de claves sin distinción entre mayúsculas y minúsculas. Por ejemplo, cuando es true, "Uvas" coincide con "uvas". El valor predeterminado es true.
  • IgnoreSpace: valor lógico (true/false) que permite combinar elementos de texto con el fin de buscar coincidencias. Por ejemplo, cuando es true, "Gra pes" coincide con "Uvas". El valor predeterminado es true.
  • NumberOfMatches: número entero que especifica el número máximo de filas coincidentes que se pueden devolver para cada fila de entrada. Por ejemplo, un valor de 1 devolverá como máximo una fila coincidente para cada fila de entrada. Si no se proporciona esta opción, se devuelven todas las filas coincidentes.
  • SimilarityColumnName: un nombre para la columna que muestra la similitud entre un valor de entrada y el valor representativo de esa entrada. El valor predeterminado es NULL, en cuyo caso no se agregará una nueva columna para similitudes.
  • Threshold: un número entre 0,00 y 1,00 que especifica la puntuación de similitud con la que se coincidirán dos valores. Por ejemplo, "Uvas" y "Graes" (falta la "p") solo se coinciden si esta opción está establecida en menos de 0,90. Un umbral de 1,00 solo permite coincidencias exactas. (Tenga en cuenta que una "coincidencia exacta" aproximada podría omitir diferencias como mayúsculas y minúsculas, orden de palabras y puntuación). El valor predeterminado es 0,80.
  • TransformationTable: tabla que permite la coincidencia de registros en función de asignaciones de valores personalizadas. Debe contener columnas "From" y "To". Por ejemplo, "Uvas" coincide con "Raisins" si se proporciona una tabla de transformación con la columna "From" que contiene "Uvas" y la columna "To" que contiene "Raisins". Tenga en cuenta que la transformación se aplicará a todas las apariciones del texto de la tabla de transformación. Con la tabla de transformación anterior, "Las uvas son dulces" también coincidirán con "Las pasas son dulces".

Ejemplo 1

Combinación aproximada izquierda de dos tablas basadas en [FirstName]

Uso

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

Salida

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