Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Creating a matching database when scripting for later use

Hello everybody,

I have the following problem, in which you can help me maybe.

I have a database that looks like this:

Keyword...
nike
nike shoes
nike air max
adidas
adidas shoes
...


And a second database, which looks like this:

Search Query
...
*nike*
*nike*shoe*
*adidas*
...

To maintain a link between the two databases I need a matching database, which should look like this:

Search QueryKeyword
*nike*nike
*nike*nike shoes
*nike*nike air max
*nike*shoe*nike shoes
*adidas*adidas
*adidas*adidas shoes
...


Now I tried the following attempts in QlikView script:

Table B:

Load [Search Query]

from

(OOXML, embedded labels, table is Table 2);

Table A:

Load Keyword

FROM

(OOXML, embedded labels, table is Table 1);

LET vZeilenanzahl = NoOfRows ( 'TableB');

FOR i = 0 to $ (vZeilenanzahl) -1

LET search_value = peek ( '[Search Query]', $ (i), 'TableB');

Data:

LOAD

Keyword

Resident TableA

where the Keyword like '$ (search_value)';

Next

And so I get at least a database "data", which provides me the right part, the Keywords, of the matching database correctly. Unfortunately I do not get the Search queries in the Table.

Do you know a solution for this?

Possibly is my whole approach incorrect and / or there is a much easier way 🙂

Thank you for your help and best regards,

Hagen

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

try to store the search value in your table Data as well

LET vZeilenanzahl = NoOfRows ( 'TableB');

FOR i = 0 to $ (vZeilenanzahl) -1

LET search_value = peek ( '[Search Query]', $ (i), 'TableB');

Data:

LOAD

'$ (search_value)' as Search_Value,

Keyword

Resident TableA

where the Keyword like '$ (search_value)';

Next

View solution in original post

5 Replies
Anonymous
Not applicable
Author

try to store the search value in your table Data as well

LET vZeilenanzahl = NoOfRows ( 'TableB');

FOR i = 0 to $ (vZeilenanzahl) -1

LET search_value = peek ( '[Search Query]', $ (i), 'TableB');

Data:

LOAD

'$ (search_value)' as Search_Value,

Keyword

Resident TableA

where the Keyword like '$ (search_value)';

Next

Peter_Cammaert
Partner - Champion III
Partner - Champion III

A way uglier solution than Rudolf's (depending on your source tables, it may require quite a lot of RAM), but it avoids using FOR loops. I don't use them if iI don't need to. They're slow.

TempTable:

Load [Search Query]

from

(OOXML, embedded labels, table is Table 2);

JOIN

Load Keyword

FROM

(OOXML, embedded labels, table is Table 1);


FinalTable:

LOAD *

RESIDENT TempTable

WHERE WildMatch(Keyword, [Search Query]);


DROP Table TempTable;

cwolf
Creator III
Creator III

Or simply:

[Table A]:

Load Keyword

FROM

(OOXML, embedded labels, table is Table 1);

Outer Join([Table A])

Load [Search Query]

from

(OOXML, embedded labels, table is Table 2);

Data:

NoConcatenate

Load

*

Resident [Table A]

Where WildMatch(Keyword,[Search Query])>0;

Drop Table [Table A];

maxgro
MVP
MVP

another option could be (PFA)

K:

LOAD Keyword as K, rowno() as IdK

FROM

[https://community.qlik.com/thread/231603]

(html, codepage is 1252, embedded labels, table is @1);

S:

LOAD [Search Query] as S, rowno() as IdS

FROM

[https://community.qlik.com/thread/231603]

(html, codepage is 1252, embedded labels, table is @2);

T:

NoConcatenate LOAD K as K Resident K;

join (T) LOAD S Resident S;

M:

NoConcatenate load

  *

  //K like '*' & S & '*' as M1,

  //wildmatch(K, '*' & S & '*') as M2

Resident T

Where wildmatch(K, '*' & S & '*');

DROP Table T;

Not applicable
Author

Thanks to all for the quick and very qualified replies 🙂

Now my script works perfectly!