英語で読む

次の方法で共有


Table.FuzzyJoin

構文

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

バージョン情報

key1 (table1) および key2 (table2) によって選択されたキー列の値のあいまい一致に基づいて、table1 の行が table2 の行と結合されます。

あいまい一致は、テキストの等価性ではなく、テキストの類似性に基づく比較です。

既定では、内部結合が実行されますが、結合の種類を指定するために、省略可能な joinKind を含めることもできます。 次のオプションがあります。

キー列の比較方法を指定するために、省略可能な joinOptions のセットを含めることができます。 次のオプションがあります。

  • ConcurrentRequests:あいまい一致に使用するパラレル スレッドの数に指定できる、1 から 8 の数値。 既定値は 1 です。
  • Culture:カルチャ固有のルールに基づいて、レコードを一致させることができます。 有効な任意のカルチャ名を指定できます。 たとえば、"ja-JP" というカルチャ オプションでは、日本語カルチャに基づいてレコードを一致させます。 既定値は "" であり、インバリアント (英語) カルチャに基づいて一致させます。
  • IgnoreCase:大文字と小文字が区別されないキーの一致ができる論理 (true/false) 値。 たとえば、true の場合、"Grapes" は "grapes" に一致します。 既定値は true です。
  • IgnoreSpace:一致を見つけるためにテキスト部分を結合できる論理 (true/false) 値。 たとえば、true の場合、"Gra pes" は "Grapes" に一致します。 既定値は true です。
  • NumberOfMatches:各入力行に対し返すことができる、一致する行の最大数を指定する整数。 たとえば、値 1 を指定すると、入力行ごとに一致する行が 1 つだけ返されます。 このオプションが指定されていない場合は、一致するすべての行が返されます。
  • SimilarityColumnName:入力値とその入力の代表値の類似性を示す列の名前です。 既定値は null です。この場合、類似性を示す新しい列は追加されません。
  • Threshold:2 つの値が一致される類似性スコアに指定できる、0.00 から 1.00 の数値。 たとえば、"Grapes" と "Graes" ("p" がない) が一致するのは、このオプションが 0.90 未満に設定されている場合のみです。 しきい値が 1.00 の場合は、完全一致のみが許可されます。 (あいまいな "完全一致" では、大文字と小文字の区別、語順、句読点などの違いが無視される場合があることに注意してください)。既定値は 0.80 です。
  • TransformationTable:カスタム値のマッピングに基づいて、レコードを一致させることができるテーブル。 "From" 列と "To" 列が含まれている必要があります。 たとえば、"From" 列に "Grapes" が含まれ、"To" 列に "Raisins" が含まれる変換テーブルが指定されている場合、"Grapes" は "Raisins" と一致します。 変換は、変換テーブル内のすべてのテキストに適用されることに注意してください。 上記の変換テーブルでは、"Grapes are sweet" は "Raisins are sweet" とも一致します。

例 1

[FirstName] に基づく 2 つのテーブルの左内部あいまい結合

使用方法

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

出力

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