<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Fuzzy Matching/Joining in QlikView</title>
    <link>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/1639077#M673267</link>
    <description>&lt;P&gt;I am running a document with this function and getting errors. I am attaching the document.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 23 Oct 2019 15:37:20 GMT</pubDate>
    <dc:creator>amweiner</dc:creator>
    <dc:date>2019-10-23T15:37:20Z</dc:date>
    <item>
      <title>Fuzzy Matching/Joining</title>
      <link>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/730050#M673265</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;there's been a thread yesterday about joining&amp;nbsp; two tables with similar text fields that do not exactly match.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This thread was deleted, so I post an example here, maybe someone still cares.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I tried to calculate the levenshtein distance of those two text fields to be able to select corresponding records:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="QlikCommunity_Thread_130371_Pic1.JPG.jpg" class="jive-image" src="https://community.qlik.com/legacyfs/online/65019_QlikCommunity_Thread_130371_Pic1.JPG.jpg" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="QlikCommunity_Thread_130371_Pic2.JPG.jpg" class="jive-image" src="https://community.qlik.com/legacyfs/online/65020_QlikCommunity_Thread_130371_Pic2.JPG.jpg" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14087169792217809" jivemacro_uid="_14087169792217809"&gt;
&lt;P&gt;QUALIFY *;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Table1:&lt;/P&gt;
&lt;P&gt;LOAD *, RecNo() as RecNo INLINE [&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MARK1, MARK2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: WV2ZZZ7HZ9H119390, ENGINE NO: AXB179634&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: WV2ZZZ7HZ9H119548, ENGINE NO: AXB179429&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHASSIS NO:SHSRE77508U101822, ENG NO:K2424-1019151&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: KL1PM5E51AK528096, ENG: F18D4009613KA&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: WV2ZZZ7HZ9H100620, ENG NO: AXB178969&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E406009706, ENG: 1NR0178419&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E206008912, ENG: 1NR0162953&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E606008833, ENG: 1NR0162819&lt;/P&gt;
&lt;P&gt;];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Table2:&lt;/P&gt;
&lt;P&gt;LOAD *, RecNo() as RecNo INLINE [&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MARK1, MARK2&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHASS# WV2ZZZ7HZ9H119390, E# AXB179634&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; C# WV2ZZZ7HZ9H119548, ENG NO: AXB179429&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E206008912, ENG: 1NR0162953&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: KL1PM5E51AK528096, ENG: F18D4009613KA&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHS# WV2ZZZ7HZ9H100620, ENG#: AXB178969&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E406009706, ENG: 1NR0178419&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VIN NO:SHSRE77508U101822, ENG:K2424-1019151&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CH: AHTLT58E606008833, ENG: 1NR0162819&lt;/P&gt;
&lt;P&gt;];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;UNQUALIFY *;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;NoConcatenate&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;tabLinks:&lt;/P&gt;
&lt;P&gt;LOAD * Resident Table1;&lt;/P&gt;
&lt;P&gt;Join (tabLinks)&lt;/P&gt;
&lt;P&gt;LOAD * Resident Table2;&lt;/P&gt;
&lt;P&gt;Left Join (tabLinks)&lt;/P&gt;
&lt;P&gt;LOAD Table1.RecNo,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Table2.RecNo,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; levenshtein(Table1.MARK1,Table2.MARK1) as LevDistMARK1,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; levenshtein(Table1.MARK2,Table2.MARK2) as LevDistMARK2&lt;/P&gt;
&lt;P&gt;Resident tabLinks;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;DROP Fields Table1.MARK1, Table2.MARK1, Table1.MARK2, Table2.MARK2 From tabLinks;&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;using this module / vbs-function:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_14087170391786596 jive_text_macro jive_macro_code" jivemacro_uid="_14087170391786596"&gt;
&lt;P&gt;'********************************************************************************************************&lt;/P&gt;
&lt;P&gt;'*&lt;/P&gt;
&lt;P&gt;'*&amp;nbsp; VBScript function implementing Levenshtein-Distance-algorithm&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;'*&amp;nbsp; source: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#VBScript"&gt;http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#VBScript&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;'*&lt;/P&gt;
&lt;P&gt;'********************************************************************************************************&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Function levenshtein( a, b )&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Dim i,j,cost,d,min1,min2,min3&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; ' Avoid calculations where there there are empty words&lt;/P&gt;
&lt;P&gt;&amp;nbsp; If Len( a ) = 0 Then levenshtein = Len( b &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt; Exit Function&lt;/P&gt;
&lt;P&gt;&amp;nbsp; If Len( b ) = 0 Then levenshtein = Len( a &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt; Exit Function&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; ' Array initialization&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ReDim d( Len( a ), Len( b ) )&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; For i = 0 To Len( a &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt; d( i, 0 ) = i: Next&lt;/P&gt;
&lt;P&gt;&amp;nbsp; For j = 0 To Len( b &lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt; d( 0, j ) = j: Next&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt; ' Actual calculation&lt;/P&gt;
&lt;P&gt;&amp;nbsp; For i = 1 To Len( a )&lt;/P&gt;
&lt;P&gt;&amp;nbsp; For j = 1 To Len( b )&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Mid(a, i, 1) = Mid(b, j, 1) Then cost = 0 Else cost = 1 End If&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ' Since min() function is not a part of VBScript, we'll "emulate" it below&lt;/P&gt;
&lt;P&gt;&amp;nbsp; min1 = ( d( i - 1, j ) + 1 )&lt;/P&gt;
&lt;P&gt;&amp;nbsp; min2 = ( d( i, j - 1 ) + 1 )&lt;/P&gt;
&lt;P&gt;&amp;nbsp; min3 = ( d( i - 1, j - 1 ) + cost )&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; If min1 &amp;lt;= min2 And min1 &amp;lt;= min3 Then&lt;/P&gt;
&lt;P&gt;&amp;nbsp; d( i, j ) = min1&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ElseIf min2 &amp;lt;= min1 And min2 &amp;lt;= min3 Then&lt;/P&gt;
&lt;P&gt;&amp;nbsp; d( i, j ) = min2&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Else&lt;/P&gt;
&lt;P&gt;&amp;nbsp; d( i, j ) = min3&lt;/P&gt;
&lt;P&gt;&amp;nbsp; End If&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Next&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Next&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; levenshtein = d( Len( a ), Len( b ) )&lt;/P&gt;
&lt;P&gt;End Function&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;hope this helps&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Marco&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Aug 2014 14:17:39 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/730050#M673265</guid>
      <dc:creator>MarcoWedel</dc:creator>
      <dc:date>2014-08-22T14:17:39Z</dc:date>
    </item>
    <item>
      <title>Re: Fuzzy Matching/Joining</title>
      <link>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/730051#M673266</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 12 Jun 2015 15:21:23 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/730051#M673266</guid>
      <dc:creator />
      <dc:date>2015-06-12T15:21:23Z</dc:date>
    </item>
    <item>
      <title>Re: Fuzzy Matching/Joining</title>
      <link>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/1639077#M673267</link>
      <description>&lt;P&gt;I am running a document with this function and getting errors. I am attaching the document.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Oct 2019 15:37:20 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/1639077#M673267</guid>
      <dc:creator>amweiner</dc:creator>
      <dc:date>2019-10-23T15:37:20Z</dc:date>
    </item>
    <item>
      <title>Re: Fuzzy Matching/Joining</title>
      <link>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/1911754#M1218169</link>
      <description>&lt;P&gt;Ganz großes Kino Marco, danke Dir! &lt;span class="lia-unicode-emoji" title=":flexed_biceps:"&gt;💪&lt;/span&gt;&amp;nbsp; &lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/675"&gt;@MarcoWedel&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Btw: In the meantime there is a native function in Qlik: levenshteindist(). Makes it a lot more easier now.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Mar 2022 09:26:15 GMT</pubDate>
      <guid>https://community.qlik.com/t5/QlikView/Fuzzy-Matching-Joining/m-p/1911754#M1218169</guid>
      <dc:creator>ManuelRühl</dc:creator>
      <dc:date>2022-03-30T09:26:15Z</dc:date>
    </item>
  </channel>
</rss>

