Qlik Community

Qlik Design Blog

All about product and Qlik solutions: scripting, data modeling, visual design, extensions, best practices, etc.

Coming your way, the Qlik Data Revolution Virtual Summit. October 27-29. REGISTER

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 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


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.


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


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.



Contributor II
Contributor II

Kindly explain this.. Will match functions return the corresponding number for the FIRST match in the list of expressions we feed in? For ex, can you tell me what will this return?

match('abc', 'cgf','hjk','abc','abc')

MVP & Luminary
MVP & Luminary

Why don't you test that yourself? Create a textbox with as text the expression =match('abc', 'cgf','hjk','abc','abc')



thanks! Very helpful! I learned something new - I knew about MATCH and a bit about its variations, I had used the ALT() function only once and I didn't know the CLASS() function at all yet.

I wish there was something like an RSS feed available with all the new blogs - most of them are helpful. (Then I could use calibre to make that RSS feed into an .epub, for instance, and read it at my leisure on the train).

Am I the only one around who thinks that creating a WIKI for all the valuable information here in the blogs, in the community and so on, would be a good idea? That would make it a lot easier to do what admins and mods always tell you to do - to search for solutions before posting questions ...

Contributor II
Contributor II

Yeah... I had tested that myself and found it returned me the first match. but I wasnt sure about its consistency... Since match would return only one value wanted to be sure enough it picks the first match only and not some match randomly.. There is no mention anywhere in QV forums that match returns the first match

Contributor III
Contributor III

Thanks, I found the post useful

Bye Adriano

Not applicable

I am new to Qlikview but learnt a lot from Qlikview 11 for Dev and Cookbook. And both these book are good enough to learn most used functions and techniques. Though Pick(Match()) combination is better than if, I learnt by experimenting in pivot table that when you just use numeric values for results, the totals  and subtotals in pivot table are incorrect in a way similar to max function. For ex.

Pick(Match(Country,'Germany, 'Japan','UK','USA'),1,2,3,4)

Now for each dimension of Country which contains cities, the subtotals is just the number that is returned by the above pick match i.e. 1 for germany, 2 for Japan and so on and also the final total is NULL!!!

So i altered the above expression to return correct results like this-

Pick(Match(Country, 'Germany','Japan','UK','USA'),sum(1),sum(2),sum(3),sum(4))

which caused correct subtotals and totals.

Conclusion: use some expression than some direct values like a number in pick(match())