Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
Jennell_McIntire
Employee
Employee

What does Class, Alt, Pick, If, Match, Mixmatch and Wildmatch all have in common?  They are all conditional functions that can be used in the QlikView script or in the user interface.  Personally, I have only used two of them – Class and If which is why I thought it would be interesting to learn a little more about them and their capabilities.  These functions return a value based on a comparison or a condition.  Let’s take a quick look at each of these.

Class

Class allows you to create buckets/groupings of data.  For example, assume you have a data model with order data and there is a field with the number of days an order is late.  Using class, the number of days can be grouped based on an interval we select.  The expression below will create buckets with 30 day intervals:

Class script.png

The buckets will look like the image below.

Class buckets.png

Alt

The Alt function will return the first parameter that has a valid number representation (including dates).  So in the script below, I can use Alt to check the format of the dates in the TempDate field.  If the format matches one of the parameters, then it is returned otherwise the last parameter in the Alt function is returned.  The order of the parameters indicates the priority order so that can be used to determine how the dates should be interpreted.  For example, should 7/4/2014 be interpreted as the 4th of July in the US or the 7th of April in the UK?

Alt script.png

Here are the results:

Alt table.png

The TempDate is the original date and the ValidatedDate is the value returned by the Alt function.

Pick

The Pick function will return the expression/value corresponding to the expression that matches the first parameter.  For example, Pick(2, ‘A’, ‘B’, ‘C”) will return B because B is the second expression and Pick(Number, Sum(1+1), Sum(2+2), Sum(3+3), Sum(4+4), Sum(5+5)) will return 6 if Number = 3.  This function is excellent when you want to generate a random field value, e.g.

Pick script.png


If

Everyone has used an If statement at some point whether in QlikView or some other programming language.

If(condition, then , else)

The If statement check a condition (the first parameter) and if the condition is true, it returns the “then” parameter otherwise it returns the “else” parameter.

For example, if(1+1=2, ‘Woo hoo, I can add’, ‘Need more practice’).

Match, Mixmatch & Wildmatch

These functions are very similar in that they all perform a comparison.

  • The Match function does a case sensitive comparison between the first parameter and the expressions

          match( str, expr1 [ , expr2,...exprN ] )

          Match(X, ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’)

          If X=Jan, 1 is returned

          If X=’Feb’, 2 is returned

  • The Mixmatch function does a case insensitive comparison between the first parameter and the expressions

          mixmatch( str, expr1 [ , expr2,...exprN ] )

          Mixmatch(X, ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’)

          If X=Jan, 1 is returned

          If X=’feb’, 2 is returned

  • The Wildmatch function also does a case insensitive comparison between the first parameter and the expressions and allows the use of wildcards

          wildmatch( str, expr1 [ , expr2,...exprN ] )

          Wildmatch(X, ‘Ja*’, ‘F?b’, ‘mar’, ‘Apr’)

          If X=jan, 1 is returned

          If X=Feb, 2 is returned

          If X=Mar, 3 is returned

Now that I know a little more about some of the other conditional functions available in QlikView maybe I will find the need to use them in my apps when I need to compare data or check a condition.  There are numerous ways these functions can be used besides what I discussed here so I am sure they will be useful in many of my future apps.  For more details and an example QVW of these conditional functions in action, check out my technical brief.

Thanks,

Jennell

31 Comments
JonasValleskog
Partner - Creator
Partner - Creator

If you like that one, you'll probably appreciate this one too...

How to custom sort a dimension in chart without relying on scripted sort orders


Two examples based on sorting of a dimension called Customer:

1. Priority sort matched results, then allow for standard sort options for the rest of the data:

replace(match(Customer,'Shoe Expert','Bobby Socks'),0,10000)

2. Priority sort matched results, then sort the rest of the data in descending order by Expression:

pick(1+match(Customer,'Shoe Expert','Bobby Socks'),

rank(sum(Value)),

0

)

I've uploaded a small example here:


Custom sort order.qvw

Best

Jonas

0 Likes
3,498 Views
sudeepkm
Specialist III
Specialist III

thanx for the post.

0 Likes
3,498 Views
ThornOfCrowns
Specialist II
Specialist II

Thanks, very useful indeed!

0 Likes
3,416 Views
Anonymous
Not applicable

All great examples.

I have been using Pick in place of IF whenever I can but can Pick() be used against 2 values? 

something like:

Pick(Match(MyField1 and MyField2, 'Val1', 'Val2', 'Val3')

Thanks

0 Likes
3,416 Views
JonasValleskog
Partner - Creator
Partner - Creator

Hi Darrin,

No, match does a string comparison between the resultant text in the first parameter against the text tags in parameter 2, 3, 4... I would satisfy your above logic requirement with something along the lines of:

if(MyField1 = MyField2,

     pick(match(MyField1,'Val1','Val2','Val3')

          'Match1',

          'Match2',

          'Match3'

     )

)

Best

Jonas

0 Likes
3,416 Views
philip_doyne
Partner - Creator II
Partner - Creator II

Absolutely Jonas I use this a lot it is very clear and substitutes for the lack of a case statement. Do also look up WILDMATCH and MIXMATCH to use as alternatives to MATCH for even greater finesse!

Philip

Philip Doyne

Technical Director, QlickiT Ltd

Mob: 07930 401440

Century Business Centre, Rotherham

South Yorkshire, S63 5DA.

0 Likes
3,416 Views
rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

pick(match) has some great applications, but I think "if()" is frequently clearer and easier to maintain. Pick/Match requires two parallel arrays that have to be kept in sync, which grows more difficult as the list gets longer.

Pick(1 + Match( myField, 'Val1', 'Val2', 'Val3'), 'Default', 'Ans1', 'Ans2', 'Ans3');

The if() construct keeps the test and result together, so it does not get any more difficult with length. Some people fear the "nested" nature of If(), but you don't need to write it with indentation. It can be written as a simple list style.

if(myField='Val1', 'Ans1'

,if(myField='Val2', 'Ans2'

,if(myField='Val3', 'Ans3'

,'Default'

)))

0 Likes
3,416 Views
JonasValleskog
Partner - Creator
Partner - Creator

Hi Rob,

Thanks for elaborating. To mitigate maintenance issues with pick(match()) I tend to apply a bit of commentary and indentation to simplify tracking of pick match, similar to how CASE statements are written in SQL.

Pick(1 + Match( myField,

// Cond1:

'Val1',

// Cond2:

'Val2',

// Cond3:

'Val3'

),

// Default

'Default',

// 1:

'Ans1',

// 2:

'Ans2',

// 3:

'Ans3'

);

I guess it all comes down to personal preference of syntax pattern application as we’re typically not doing anything computationally intensive in the conditionals in scenarios where pick(match(…)) is an option.

Regards

Jonas

Jonas Valleskog

Senior Consultant

Mob: +44 (0)7446 144 572

Tel: +44 (0) 208 100 6515

www.contextbi.com

Context Business Intelligence Ltd

Parkshot House, 5, Kew Road, Richmond, Surrey, United Kingdom, TW9 2PR

3,416 Views
philip_doyne
Partner - Creator II
Partner - Creator II

Touche! Rob ☺

Its all in the tabbing and layout of your script – another “bee in my bonnet”

I think in my experience badly formatted IF statements have it for maximum UNunderstandability. I appreciate that does not apply to your beautifully formed examples but all to many examples I see are not. Sadly too many developers do not have your (or my) determination to make script understandable at first glance.

I don’t think I would use PICK/MATCH for more than putting a name to 2 or 3 status codes that are unintelligible for instance.

Philip

3,423 Views
Anonymous
Not applicable

Thank you! This is helpful for me.

0 Likes
3,423 Views