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
Hiermee worden de rijen van table1
samengevoegd met de rijen van table2
op basis van een fuzzy vergelijking van de waarden van de sleutelkolommen die zijn geselecteerd door key1
(voor table1
) en key2
(voor table2
).
Fuzzy matching is een vergelijking op basis van gelijkenis van tekst in plaats van gelijkheid van tekst.
Standaard wordt een inner join uitgevoerd, maar een optionele joinKind
kan worden opgenomen om het type join op te geven. Opties zijn onder andere:
- JoinKind.Inner
- JoinKind.LeftOuter -
- JoinKind.RightOuter-
- JoinKind.FullOuter
- JoinKind.LeftAnti
- JoinKind.RightAnti
- JoinKind.LeftSemi
- JoinKind.RightSemi
Een optionele set joinOptions
kan worden opgenomen om te specificeren hoe de sleutelkolommen moeten worden vergeleken. Opties zijn onder andere:
-
ConcurrentRequests
: een getal tussen 1 en 8 dat het aantal parallelle threads aangeeft dat moet worden gebruikt voor fuzzy matching. De standaardwaarde is 1. -
Culture
: hiermee staat u overeenkomende records toe op basis van cultuurspecifieke regels. Dit kan elke geldige cultuurnaam zijn. Een optie Cultuur van bijvoorbeeld 'ja-JP' komt overeen met records op basis van de Japanse cultuur. De standaardwaarde is "", wat overeenkomt met de invariant Engelse cultuur. -
IgnoreCase
: een logische waarde (waar/onwaar) waarmee hoofdletterongevoelige sleutelkoppeling mogelijk is. Bijvoorbeeld, wanneer 'Druiven' waar is, komt 'Druiven' overeen met 'druiven'. De standaardwaarde is waar. -
IgnoreSpace
: een logische waarde (waar/onwaar) waarmee tekstonderdelen kunnen worden gecombineerd om overeenkomsten te vinden. Als het waar is, komt 'Gra pes' overeen met 'Druiven'. De standaardwaarde is waar. -
NumberOfMatches
: Een geheel getal dat het maximum aantal overeenkomende rijen aangeeft dat voor elke invoerrij kan worden geretourneerd. Een waarde van 1 retourneert bijvoorbeeld maximaal één overeenkomende rij voor elke invoerrij. Als deze optie niet is opgegeven, worden alle overeenkomende rijen geretourneerd. -
SimilarityColumnName
: een naam voor de kolom met de overeenkomst tussen een invoerwaarde en de representatieve waarde voor die invoer. De standaardwaarde is null. In dat geval wordt er geen nieuwe kolom voor overeenkomsten toegevoegd. -
Threshold
: een getal tussen 0,00 en 1,00 dat de overeenkomstscore aangeeft waarmee twee waarden worden vergeleken. 'Druiven' en 'Graes' (met de ontbrekende 'p') worden bijvoorbeeld alleen overeenkomend geacht als deze optie is ingesteld op minder dan 0,90. Een drempelwaarde van 1,00 staat alleen exacte overeenkomsten toe. (Houd er rekening mee dat een vage 'exacte overeenkomst' verschillen kan negeren, zoals hoofdletters, woordvolgorde en interpunctie.) De standaardwaarde is 0.80. -
TransformationTable
: een tabel die overeenkomende records toestaat op basis van aangepaste waardetoewijzingen. Deze moet de kolommen Van en Naar bevatten. 'Druiven' komt bijvoorbeeld overeen met 'Rozijnen' als er een transformatietabel beschikbaar is met de kolom 'Van' die 'Druiven' bevat en de kolom 'Aan' die 'Rozijnen' bevat. Houd er rekening mee dat de transformatie wordt toegepast op alle exemplaren van de tekst in de transformatietabel. Met de bovenstaande transformatietabel komt "Druiven zijn zoet" ook overeen met "Rozijnen zijn zoet".
Linker inner fuzzy join van twee tabellen op basis van [FirstName]
Gebruik
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]
)
uitvoer
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
]
})