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

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Equivalent to a switch case or match with numeric comparison

Hello Community,

I have been searching for hours a solution to an old reququest :

https://community.qlik.com/ideas/2563

In fact, I try to write a code which evaluates my variable only once (because it consumes a lot of time), in order to avoid to evaluates it for time in each IF statement.

My code is the following :

=IF(RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))>=0.9,ARGB(255,193,238,149),

  IF(RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))>=0.75,ARGB(255,255,255,153),

  IF(RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))>=0.5,ARGB(255,255,197,138),ARGB(255,255,119,122))))

I thought of different solutions, without success. I would like to write a code like this (one evaluation of the variable).

Switch(RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD)))

     Case (>=0.9) :

          // code

     Case(>=0.75) :

          // code

     Case(>=0.50) :

          // code

     // etc.

End

Or something like a match with numeric comparison( greater than, less than etc.) in it likes :

match(RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD)), >=0.9, >=0.75, >=0.5) // etc. and pick the right color

Thanks a lot !!

1 Solution

Accepted Solutions
rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

If you don't need to evaluate in a chart, you can define it and evaluate it once in a variable with "=". for example, create a variable named vMyExpr and define the contents as:

=RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))


This effectively makes references to vMyExpr a constant.


Then your button color expression will be:

if(vMyExpr>0.5, .....


-Rob

http://masterssummit.com

http://qlikviewcookbook.com



View solution in original post

5 Replies
rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

Switch/Case is available only in script, not chart expressions. There are several solutions to the multi evaluation problem in a chart, depending on context.  I take it this is a background color expression in a chart?

If the expression:

RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))

is already being calculated in the chart, then refer to the expression label or the column() in your expression. For example, if this expression is in a column named "Sales" make your background color expression like:


if(Sales>0.9, etc...


If the expression is not already being calculated in the chart, add it is as hidden column in the chart and again refer to the label in the color expression.


-Rob

http://masterssummit.com

http://qlikviewcookbook.com

Anonymous
Not applicable
Author

Hello ! Thanks for yours answers guys.

Vishwarath, I need to use a "switch like" statement in my expression, not in my load script, but thanks

Rob, my expression is evaluated on the fly (not in a chart) and a lot of these expression are evaluated too. Something like 15 expressions are evaluated on the fly, in order to color buttons. These colors represent a level of risk in the app.

Because of the number of buttons, I can't create a hidden field for each, it's seems dirty to me and not very maintainable.

It's to bad that switch/case aren't available in chart expressions.

rwunderlich
Partner Ambassador/MVP
Partner Ambassador/MVP

If you don't need to evaluate in a chart, you can define it and evaluate it once in a variable with "=". for example, create a variable named vMyExpr and define the contents as:

=RangeMin($(vCouleurBAAA),$(vCouleurBABB),$(vCouleurBABD))


This effectively makes references to vMyExpr a constant.


Then your button color expression will be:

if(vMyExpr>0.5, .....


-Rob

http://masterssummit.com

http://qlikviewcookbook.com



Anonymous
Not applicable
Author

Hi Rob !

Like I said before, I have a lot of variable with a RangeMin(...) in it (like different variable). So I have to double my number of variable (with expression in it). I think it's not an optimal way beacause the qlikview app will be harder to maintain, but I have no other solution for now.

Thanks for your expertise