Sdílet prostřednictvím


Table.FuzzyNestedJoin

Syntaxe

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

O nás

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). Výsledky se vrátí v novém sloupci s názvem newColumnName.

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

joinKind Volitelné určuje typ spojení, který se má provést. Ve výchozím nastavení se provede levé vnější spojení, pokud není zadán joinKind. K dispozici jsou následující možnosti:

Volitelná sada joinOptions může být zahrnuta, aby bylo možné určit, jak porovnat klíčové sloupce. K dispozici jsou následující možnosti:

  • 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ý kulturní název. 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. Tato 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]

Využití

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

Výstup

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