Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
sunny_talwar

Variables in the Script

Hi Team -

I am going to confess that I am not an expert on LET and SET statements and find it amazingly difficult to understand what will work and what won't. I know the basic difference between the two that LET evaluates, whereas SET will just assign a value to a variable. But when I have to do some letting or setting, I always end up with a trial and error method of getting it right rather then knowing what is right.

My question today isn't related to LET and SET specifically, but I have a feeling that we are going to drive this discussion toward the use of LET vs. SET. Here is the script I am working with:

//Works

LET vVar2 = Chr(39) & 'ABC' & Chr(39);

LET vVar3 = Chr(39) & If($(vVar2) = 'ABC', 'DEF', '') & Chr(39);

// Doesn't Work

LET vVar1 = 'ABC';

LET vVar4 = Chr(39) & If(Chr(39) & $(vVar1) & Chr(39) = 'ABC', 'DEF', '') & Chr(39);

For sum reason, vVar3 seems to work as I would expect, but vVar4 won't. Is there a reason why one would work and the other one won't?

Thanks for your expert advice on the topic.

Best,

Sunny

Message was edited by: Sunny T Added the sample application

1 Solution

Accepted Solutions
petter
Partner - Champion III
Partner - Champion III

I agree this is often confusing and can create a lot of headaches....

If you look at the critical part in line 9:

    Chr(39) & $(vVar1) & Chr(39)


    $-sign expansion is always done before QlikView try to interpret anything else.


    So this will become:


    Chr(39) & ABC & Chr(39)


    The QlikView tries to interpret and would then think that ABC is a variable.


    It can't find a variable named ABC so it evaluates to an empty string...


    And then QlikView will finally end up with '' as the result.



If you change line 09 to this:

LET vVar4 = Chr(39) & If( vVar1 = 'ABC', 'DEF', '') & Chr(39); 


This will work as you intend. Why would we want to make it more complicated by not accessing the variable value directly? Using $-sign expansion should only be used when it is absolutely necessary as it often complicates things.


So my advice is to use direct variable references without $-sign expansion whenever you can and only use $-sign expansion when you have to. It is necessary to use $-sign expansion sometimes because QlikView can't understand that we want the contents of a variable to be used inside for instance a string or a Set Expression. But you always have to remember that $-sign expansion is performed first before QlikView even tries to understand what the text in the load script or an expression in the UI really means.


$-sign expansion works as if we really did the substitution ourselves and only after that the normal QlikView interpretation will begin.




View solution in original post

4 Replies
swuehl
MVP
MVP

Having issues with SET / LET / variable expansions etc. it's helpful to run the script in debug mode.

The line with variable vVar4 will expand to

LET vVar4 = Chr(39) & If(Chr(39) & ABC & Chr(39) = 'ABC', 'DEF', '') & Chr(39)

Can you already pinpoint the cause of the issue? Examine the replaced variable: Is it a valid literal string or something else?

sunny_talwar
Author

So I guess what can I replace vVar1 in order for vVar4 to work? I tried SET vVar1 = 'ABC';, but that did not work as well. Is the only way is to do this by LET vVar2 = Chr(39) & 'ABC' & Chr(39);?

petter
Partner - Champion III
Partner - Champion III

I agree this is often confusing and can create a lot of headaches....

If you look at the critical part in line 9:

    Chr(39) & $(vVar1) & Chr(39)


    $-sign expansion is always done before QlikView try to interpret anything else.


    So this will become:


    Chr(39) & ABC & Chr(39)


    The QlikView tries to interpret and would then think that ABC is a variable.


    It can't find a variable named ABC so it evaluates to an empty string...


    And then QlikView will finally end up with '' as the result.



If you change line 09 to this:

LET vVar4 = Chr(39) & If( vVar1 = 'ABC', 'DEF', '') & Chr(39); 


This will work as you intend. Why would we want to make it more complicated by not accessing the variable value directly? Using $-sign expansion should only be used when it is absolutely necessary as it often complicates things.


So my advice is to use direct variable references without $-sign expansion whenever you can and only use $-sign expansion when you have to. It is necessary to use $-sign expansion sometimes because QlikView can't understand that we want the contents of a variable to be used inside for instance a string or a Set Expression. But you always have to remember that $-sign expansion is performed first before QlikView even tries to understand what the text in the load script or an expression in the UI really means.


$-sign expansion works as if we really did the substitution ourselves and only after that the normal QlikView interpretation will begin.




sunny_talwar
Author

Using $-sign expansion should only be used when it is absolutely necessary as it often complicates things.

To your point, I was not even aware that we can use a variable without a dollar sign expansion in the script. I have learnt something new today because before today I thought that variable in the script would look grey italicized. But that seems not to be true:

Capture.PNG

In the above example, I see that vVar1 (on line 27) looks like a field, but it actually is a variable.

Thanks for sharing the logic and explaining it in detail.

Best,

Sunny