構文
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
バージョン情報
table1の行を、key1 (table1) とkey2 (table2 の場合) によって選択されたキー列の値のあいまい一致に基づいて、table2の行と結合します。 結果は、 newColumnNameという名前の新しい列で返されます。
あいまい一致は、テキストの等価性ではなく、テキストの類似性に基づく比較です。
省略可能な joinKind は、実行する結合の種類を指定します。 既定では、 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 の場合、"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" 列が含まれている必要があります。 たとえば、変換テーブルに "Grapes" を含む "From" 列、"Raisins" を含む "To" 列が指定されている場合、"Grapes" は "Raisins" と照合されます。 変換は、変換テーブル内のすべてのテキストに適用されることに注意してください。 上記の変換テーブルでは、「ブドウは甘い」も「レーズンは甘い」と一致します。
例 1
[FirstName] に基づく 2 つのテーブルの左内部あいまい結合
使用方法
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]
)
アウトプット
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({})
]
})