Table.FuzzyNestedJoin
Syntaxis
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
Over
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
). De resultaten worden geretourneerd in een nieuwe kolom met de naam newColumnName
.
Fuzzy matching is een vergelijking op basis van gelijkenis van tekst in plaats van gelijkheid van tekst.
De optionele joinKind
geeft het type join op dat moet worden uitgevoerd. Standaard wordt een left outer join uitgevoerd als er geen joinKind
is opgegeven. 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 op te geven hoe de sleutelkolommen vergeleken moeten worden. 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 '', die overeenkomt met de Invariant Engelse cultuur. -
IgnoreCase
: een logische waarde (waar/onwaar) waarmee hoofdletterongevoelige sleutelkoppeling mogelijk is. Als 'Druiven' bijvoorbeeld waar is, wordt 'Druiven' vergeleken met 'druiven'. De standaardwaarde is waar. -
IgnoreSpace
: een logische waarde (waar/onwaar) waarmee tekstonderdelen kunnen worden gecombineerd om overeenkomsten te vinden. Als 'Gra pes' overeenkomt met 'Grapes', wordt dit als waar beschouwd. 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' (ontbrekende 'p') komen bijvoorbeeld alleen overeen 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 fuzzy 'exact match' 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' wordt bijvoorbeeld gekoppeld aan 'Rozijnen' als er een transformatietabel wordt geleverd met de 'Van'-kolom die 'Druiven' bevat en de 'Aan'-kolom 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".
Voorbeeld 1
Linker inner fuzzy join van twee tabellen op basis van [FirstName]
Gebruik
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]
)
uitvoer
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({})
]
})