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

Table.FuzzyJoin

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

Syntax

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

Remarks

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

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

За замовчуванням виконується внутрішнє об’єднання, але тип об’єднання можна вказати, включивши додатковий параметр 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.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]
)

Result:

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

Category

Table.Transformation