Перейти до основного вмісту

Table.FuzzyNestedJoin

Виконує розмите об’єднання зазначених стовпців між таблицями та створює результат об’єднання в новому стовпці.

Syntax

Table.FuzzyNestedJoin(
table1 as table,
key1 as any,
table2 as table,
key2 as any,
newColumnName as text,
optional joinKind as JoinKind.Type,
optional joinOptions as record
) as table

Remarks

Об’єднує рядки таблиць "table1" і "table2" на основі розмитої відповідності значень стовпців ключів, вибраних за ключем "key1" (для таблиці "table1") і "key2" (для "table2"). Результати повертаються в новому стовпці з іменем "newColumnName".

Розмита відповідність – це порівняння на основі подібності, а не тотожності тексту.

Додатковий параметр joinKind указує вид з’єднання, яке слід виконати. Якщо значення параметра joinKind не вказано, за замовчуванням виконується ліве зовнішнє з’єднання. Доступні такі варіанти:

  • JoinKind.Inner
  • JoinKind.LeftOuter
  • JoinKind.RightOuter
  • JoinKind.FullOuter
  • JoinKind.LeftAnti
  • JoinKind.RightAnti
  • JoinKind.LeftSemi
  • JoinKind.RightSemi

Можна включити додатковий набір параметрів joinOptions, щоб указати, як порівнювати стовпці ключів. Доступні такі варіанти:

  • ConcurrentRequests : Число від 1 до 8, яке визначає кількість паралельних потоків, які потрібно використовувати для розмитої відповідності. Стандартне значення – 1.
  • Culture : Дає змогу зіставити записи на основі правил культури. Це може бути будь-яке припустиме ім’я культури. Наприклад, параметр Culture зі значенням ja-JP зіставляє записи на основі японської культури. Стандартне значення – "", яке згруповано на основі еталонної англійської культури.
  • IgnoreCase : Логічне значення (true/false), яке дає змогу зіставити ключі без урахування регістра. Наприклад, якщо встановлено значення true, рядок "Виноград" буде зіставлено з рядком "виноград". Стандартне значення – true.
  • IgnoreSpace : Логічне значення (true/false), яке дає змогу об’єднувати частини тексту, щоб знайти збіги. Наприклад, якщо встановлено значення true, рядок "Вино град" буде зіставлено з рядком "Виноград". Стандартне значення – true.
  • NumberOfMatches : Ціле число, яке означає максимальну кількість збігів, які можна повернути для кожного вхідного рядка. Наприклад, якщо вказано значення 1, повернеться щонайбільше один збіг для кожного вхідного рядка. Якщо цей параметр не вказано, повертатимуться всі збіги.
  • SimilarityColumnName : Ім’я стовпця, який показує схожість між вхідним і репрезентативним значенням введених даних. Стандартне значення – NULL. Якщо використовується це значення, новий стовпець для схожих значень не буде додано.
  • Threshold : Число від 0,00 до 1,00 визначає оцінку подібності, на основі якої зіставлятимуться два значення. Наприклад, "Виноград" і "Винорад" (без "г") буде зіставлено, лише якщо значення цього параметра менше 0,90. З граничним значенням 1,00 дозволяються лише точні збіги. (Зверніть увагу, що в розмитому "точному збігу" можуть ігноруватися такі відмінності, як регістр, порядок слів і знаки пунктуації.) Стандартне значення – 0,80.
  • TransformationTable : Таблиця, яка дає змогу зіставити записи на основі зіставлення настроюваних значень. Вона має містити стовпці "Звідки" та "Куди". Наприклад, рядок "Виноград" буде зіставлено з рядком "Родзинки", якщо є таблиця трансформації, де стовпець "Звідки" містить значення "Виноград", а стовпець "Куди" – значення "Родзинки". Зверніть увагу, що трансформацію буде застосовано до всього тексту в таблиці трансформації. У наведеній вище таблиці трансформації рядок "Виноград солодкий" буде також зіставлено з рядком "Родзинки солодкі".

Examples

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

Result:

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

Category

Table.Transformation