Sdílet prostřednictvím


Table.FuzzyJoin

Syntax

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

Asi

Spojí řádky table1 s řádky table2 na základě přibližné shody hodnot klíčových sloupců vybraných key1 (pro table1) a key2 (pro table2).

Přibližné porovnávání je porovnání založené na podobnosti textu místo rovnosti textu.

Ve výchozím nastavení se provádí vnitřní spojení, ale volitelný joinKind může být zahrnut k určení typu spojení. Mezi možnosti patří:

K určení způsobu porovnání klíčových sloupců může být zahrnuta volitelná sada joinOptions. Mezi možnosti patří:

  • ConcurrentRequests: Číslo mezi 1 a 8, které určuje počet paralelních vláken, které se mají použít pro přibližné shody. Výchozí hodnota je 1.
  • Culture: Umožňuje porovnávání záznamů na základě pravidel specifických pro kulturní aspekty. Může to být libovolný platný název kultury. Například možnost Kultura "ja-JP" odpovídající záznamům založeným na japonské kultuře. Výchozí hodnota je "", která se shoduje podle invariantní anglické jazykové verze.
  • IgnoreCase: Logická hodnota (true/false), která umožňuje porovnávání klíčů bez rozlišování malých a velkých písmen. Pokud je například pravda, "Hrozny" se shoduje s "hrozny". Výchozí hodnota je true.
  • IgnoreSpace: Logická hodnota (true/false), která umožňuje kombinování částí textu, aby bylo možné najít shody. Například, když je podmínka splněna, výraz "Gra pes" se shoduje s "Hrozny." Výchozí hodnota je true.
  • NumberOfMatches: Celé číslo, které určuje maximální počet odpovídajících řádků, které lze vrátit pro každý vstupní řádek. Například hodnota 1 vrátí maximálně jeden odpovídající řádek pro každý vstupní řádek. Pokud tato možnost není k dispozici, vrátí se všechny odpovídající řádky.
  • SimilarityColumnName: Název sloupce, který zobrazuje podobnost mezi vstupní hodnotou a reprezentativní hodnotou pro daný vstup. Výchozí hodnota je null, v takovém případě se nepřidá nový sloupec pro podobnosti.
  • Threshold: Číslo mezi 0,00 a 1,00, které určuje skóre podobnosti, při kterém se budou shodovat dvě hodnoty. Například "Grapes" a "Graes" (chybí "p") se shodují pouze v případě, že je tato možnost nastavena na méně než 0,90. Prahová hodnota 1,00 umožňuje pouze přesné shody. (Všimněte si, že přibližná "přesná shoda" může ignorovat rozdíly, jako jsou velikost textu, pořadí slov a interpunkce.) Výchozí hodnota je 0,80.
  • TransformationTable: Tabulka, která umožňuje porovnávání záznamů na základě vlastních mapování hodnot. Měl by obsahovat sloupce Od a Komu. Například "Hrozny" se shoduje s "Rozinky", pokud je transformační tabulka k dispozici se sloupcem "From" obsahujícím "Hrozny" a sloupec "To" obsahující "Rozinky". Všimněte si, že transformace se použije u všech výskytů textu v transformační tabulce. S výše uvedenou transformační tabulkou se také "Hrozny jsou sladké" budou shodovat s "Rozinky jsou sladké".

Příklad 1

Levé vnitřní přibližné spojení dvou tabulek na základě [FirstName]

Použití

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

výstup

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