8 June 2022

The difference between SET and LET in Qlik

Share this message
Do you know the difference between the LET and SET statements in Qlik Sense script?

Every Friday at Bitmetric we’re posting a new Qlik certification practice question to our LinkedIn company page. Last Friday we asked the following Qlik Data Architect certification practice question about the difference between the SET and LET statements in Qlik Sense:

The difference between SET and LET in Qlik Sense and QlikView. What is the value of the variables vLoadStart and vLoadEnd after the script shown in figure 1 executes?

The correct answer is A: vLoadStart contains the date and time that the script started, vLoadEnd contains the value “Now()”

Even without having edited a single letter in the Qlik script there are already SET statements to be found. Always included you will find the Main script page with a row of default settings all starting with SET.

Now concerning last weeks question and answer we can be pretty clear:

SET variablename = string

LET variablename = expression

By using SET Qlik will store the variable as the string provided, using LET will evaluate the string as an expression. Or to put it more simply:

SET vString = 1+1;

Will return vString = 1+1.

LET vString = 1+1;

Will return vString = 2.

Returning to last week’s question:

LET vLoadStart = Now();

Will return vLoadStart = the result of the expression now(), which is the current time of the system clock.

SET vLoadEnd = Now();

Will return the string ‘Now()’.

One of the main things to consider while using this is the end result and how to use it in the front end. Lets have a look at the following example: We would like to have a text object within the app in which the users can see when the load started and when it ended using the following expression:

‘Start Reload: ‘ & vLoadStart & CHR(10) & ‘End Reload: ‘ & vLoadEnd

The end result will look as expected:

The difference when we use LET or SET to assign Now() to a variable.

However, if we change the variable vLoadEnd to use Dollar Sign expansion:

‘Start Reload: ‘ & vLoadStart & CHR(10) & ‘End Reload: ‘ & $(vLoadEnd)

It will evaluate the text within the expansion, being Now(), which results in:

Reaching the correct answer in the wrong way.

While it looks better, it is definitely not correct! It is displaying the time at which Now() is evaluated (which is at the moment of calculating the Text Object) and not the time when LET has evaluated the expression within the script.  

The same goes for if we use the Dollar Sign expansion on vLoadStart. That will make $(vLoadStart) evaluate 08-06-2022 17:06:52, which returns a Null value, because it will start calculating 8 minus 6 minus 2022 and then run into trouble with the space and the colon, since they are not interpreted as correct symbols for calculations by Qlik.

So it is worth remembering that using LET can already perform expressions in the script and using the Dollar Sign expansion might not give the exact results as expected at first hand.

That’s it for this week. See you next Friday?

Want more? Then click the button below for our full archive!

Friday Qlik Test Prep Script Solution

How can we help?

Feel free to contact us if you have any comments or questions.