Поделиться через


Table.FuzzyNestedJoin

Синтаксис

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

О нас

Объединяет строки table1 со строками table2 на основе нечеткого сопоставления значений ключевых столбцов, выбранных key1 (для table1) и key2 (для table2). Результаты возвращаются в новом столбце с именем newColumnName.

Нечеткое сопоставление — это сравнение на основе сходства текста, а не равенства текста.

Необязательный joinKind указывает тип выполняемого соединения. По умолчанию левое внешнее соединение выполняется, если joinKind не указан. Варианты включают:

Необязательный набор joinOptions может быть добавлен, чтобы указать, как сравнить ключевые столбцы. Варианты включают:

  • ConcurrentRequests: число от 1 до 8, указывающее количество параллельных потоков, используемых для нечеткого сопоставления. Значение по умолчанию — 1.
  • Culture. Разрешает сопоставление записей на основе правил, специфичных для культуры. Это может быть любое допустимое имя культуры. Например, опция "Культура"ja-JPсоответствует записям, основанным на японской культуре. Значение по умолчанию — "", которое соответствует инвариантной английской культуре.
  • IgnoreCase: Логическое значение (например, истина/ложь), которое позволяет сопоставлять ключи без учета регистра. Например, если значение true, "Виноград" соответствует "винограду". Значение по умолчанию — true.
  • IgnoreSpace: логическое значение (true/false), позволяющее объединять текстовые части для поиска совпадений. Например, если значение true, "Gra pes" соответствует "Виноград". Значение по умолчанию — true.
  • NumberOfMatches: целое число, указывающее максимальное количество соответствующих строк, которые можно возвращать для каждой входной строки. Например, значение 1 возвращает по крайней мере одну соответствующую строку для каждой входной строки. Если этот параметр не указан, возвращаются все соответствующие строки.
  • SimilarityColumnName: имя столбца, показывающее сходство между входным значением и репрезентативным значением для этого ввода. Значение по умолчанию равно NULL, в этом случае новый столбец для сходства не будет добавлен.
  • Threshold: число от 0,00 до 1.00, указывающее оценку сходства, по которой будут соответствовать два значения. Например, "Виноград" и "Graes" (отсутствует "p") совпадают только в том случае, если этот параметр имеет значение менее 0,90. Пороговое значение 1.00 допускает только точные совпадения. (Обратите внимание, что нечеткое "точное совпадение" может игнорировать различия, такие как регистр, порядок слов и знак препинания.) Значение по умолчанию — 0,80.
  • TransformationTable: таблица, которая позволяет сопоставлять записи на основе сопоставлений настраиваемых значений. Он должен содержать столбцы From и To. Например, "Виноград" сопоставляется с "Изюм", если таблица преобразования предоставляется с столбцом From, содержащим "Виноград" и столбец "To", содержащий "Изюм". Обратите внимание, что преобразование будет применено ко всем вхождениям текста в таблице преобразования. С приведенной выше таблицей преобразования "Виноград сладкий" также будет соответствовать "Изюм сладкий".

Пример 1

Левое внутреннее нечеткое соединение двух таблиц на основе [FirstName]

использование

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

выход

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