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

Two different variables inside a wildmap

Hello,

I am using the following script to creat a wildmap iteration inside a dimension that list description of other lines inside the table:

wildmap:

load *,

rowno() as Label;

LOAD * INLINE [

Key, Label1

];

SET vMapKey=; // Initialize variable

SET vMapLabel=; // Initialize variable

SET comma=; // Initialize variable

SET esc = chr(01); // The character we will use to escape quotes

// Loop through the rows of the wildmatch table to build the expression string,

FOR i = 0 to NoOfRows('wildmap')-1

LET vMapKey = vMapKey & comma & $(esc) & peek('Key', i, 'wildmap') & $(esc);

LET vMapLabel = vMapLabel & comma & $(esc) & peek('Label1', i, 'wildmap') & $(esc);

SET comma = ','; // Next time through the loop, insert a comma

NEXT i

SET i=; // Drop unneeded variable

SET comma=; // Drop unneeded variable

// For this example, I'm going to keep the wildmatch table for illustrative purposes on the Sheet.

//DROP TABLE wildmap;     // Drop the wildmatch table -- don't need it anymore

// Combine the key and label values, replacing the $(esc) char with real quotes, to build the expression

LET vMapExpr = replace('pick(wildMatch($1,$(vMapKey)), $(vMapLabel))', $(esc), chr(39));

SET vMapKey=; // Drop unneeded variable

SET vMapLabel=; // Drop unneeded variable

SET esc=; // Drop unneeded variable

//exit script;

t:

LOAD *,

if(BANCOArrg='ALL',$(vMapExpr(vte.TASKNAME)),BANCOArrg) as BANCONuevo

Resident Horas;

drop Table Horas; rename Table t to Horas;

the problem I have is that I need to make to different wildmaps over the same dimension (the dimension I am evaluation being: vte.TASKNAME), in other words, I need to find: one, the client (BancoNuevo), listed inside the vte.TASKNAME and the product (PRODNuevo) also listed inside the same vte.TASKNAME. My problem is that when I do something like this:

t:

LOAD *,

IF(PRODArrg='ALL',$(vMapExpr(vte.TASKNAME)),PRODArrg) as PRODNuevo,

if(BANCOArrg='ALL',$(vMapExpr(vte.TASKNAME)),BANCOArrg) as BANCONuevo

Resident Horas;

drop Table Horas; rename Table t to Horas;

it apply the wildmap to both the client and product, and I end up with products inside the client list and clients inside the product list. I've also tried to make an if of the two; like evaluate first this and if it is this, then evaluate this other one, but it didn't work...

1 Solution

Accepted Solutions
effinty2112
Master
Master

Hi Jesus,

                    Glad I was able to help. If you're satisfied with my answer please mark it as correct and this will close the thread.

Kind regards

Andrew

View solution in original post

3 Replies
effinty2112
Master
Master

Hi Jesus,

I hope I understand what you're trying to achieve but maybe the Wildmatch and Pick functions are better suited to your  needs.

Pick(WildMatch(TASKNAME,'*BANISTMO*','*BC*','*BOLE*','*BOLP*','*DAVIVIENDA*','*FACTURAN*','*INNOVA*','*LAFISE*','*LOLB*','*LOLBe*','*mtrx*','*PSE*','*SUFI*'),

'BANI','BC','BOLE','BANCAENLINEA','DAV','FACTURANET','FILIALESEXTERIOR','LAFISE','BANCAENLINEA','BOLE','BANCAMOVIL','PSE','SUFI')

will look in TASKNAME and return the element in the second list that corresponds to the position of the first mask that in found in TASKNAME.

i.e if '*BANISTMO*' is not found but'*BC*' is found the expression will return the second element in the second list - 'BC'.


You could write a similar expression to look for products.


Hope this helps.


Good luck


Andrew

Not applicable
Author

This worked out perfectly! Thank you.

effinty2112
Master
Master

Hi Jesus,

                    Glad I was able to help. If you're satisfied with my answer please mark it as correct and this will close the thread.

Kind regards

Andrew