Несколько (нечетких) объединений в одном запросе? - PullRequest
0 голосов
/ 12 марта 2020

Я экспериментирую с возможностью нечеткого соединения в PQ (64-разрядная версия Excel для O365)

Одно соединение с использованием Table.FuzzyNestedJoin () работает, как и ожидалось. Однако поведение «настраиваемых» параметров нечеткого объединения, таких как качество соответствия и таблица преобразования, не всегда легко предсказать.

Я хотел бы выполнить одно и то же объединение несколько раз с различными параметры, и увидеть результаты рядом. Для исходных данных, таких как -

Table A                           Table B
=======                           =======
First     Last                    First     Last
-----     ----                    -----     ----
Jane      Johnson                 Jane      Johnson 
John      Johnson                 Joan      Johansen
Jim       Johnson                 James     johnson
Jimbo     Janssen                 Janey     Jamieson
...                               ...

Я хотел бы создать таблицу результатов, например -

                      (80% match)        (90% match)
First     Last        First80 Last80    First90 Last90
-----     ----        ------- -------   ------- ------
Jane      Johnson     Jane    Johnson   Jane    Johnson
John      Johnson     Jane    Johnson 
Jim       Johnson     James   Johnson   James   Johnson
Jimbo     Janssen     Jim     Johnson
...                   ...               ...

Однако, если вы просто добавите несколько нечетких шагов слияния в запрос с использованием пользовательского интерфейса, каждый результат нечеткого объединения заменяет последний, поэтому существует только один новый столбец результатов (содержащий вложенную таблицу результатов совпадений)

Хотя в документации к Table.FuzzyNestedJoin говорится, что для результата создается новый столбец, просто переименование выходного столбца в последующих объединениях не мешает каждому удалить предыдущий.

Итак, есть ли способ достичь нескольких нечетких объединений в одном запросе или это единственный вариант для создания цепочки таблиц вдоль линий -

Join/Merge Tables A, B to produce Table AB
  Join AB to C to produce ABC
    Join ABC to D to produce final result ABCD

1 Ответ

0 голосов
/ 20 апреля 2020

В конце концов сработало, опубликовав ответ на тот случай, если он кому-то поможет. Вы можете сделать это повторное нечеткое объединение, если вы используете расширенный редактор в Excel. В приведенном ниже примере выполняется трехуровневое сравнение в простой жестко заданной последовательности:

// 3 Pass Fuzzy Match
let
    p80 = Table.ExpandTableColumn(
        Table.FuzzyNestedJoin(
            ListA, {"Term"}, ListB, {"Term"}, "_80%", JoinKind.LeftOuter,
            [IgnoreCase=true, IgnoreSpace=true, Threshold=0.8]
            ),
        "_80%", {"Id", "Term"}, {"_80%.Id", "_80%.Term"}
        ),

    p60 = Table.ExpandTableColumn(
        Table.FuzzyNestedJoin(
            p80, {"Term"}, ListB, {"Term"}, "_60%", JoinKind.LeftOuter,
            [IgnoreCase=true, IgnoreSpace=true, Threshold=0.6]
            ),
        "_60%", {"Id", "Term"}, {"_60%.Id", "_60%.Term"}
        ),

    p40 = Table.ExpandTableColumn(
        Table.FuzzyNestedJoin(
            p60, {"Term"}, ListB, {"Term"}, "_40%", JoinKind.LeftOuter,
            [IgnoreCase=true, IgnoreSpace=true, Threshold=0.4]
            ),
        "_40%", {"Id", "Term"}, {"_40%.Id", "_40%.Term"}
        ),

    deDupe = Table.Distinct(p40),
    )
in
    deDupe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...