Qlik Community

QlikView App Development

Discussion Board for collaboration related to QlikView App Development.

Modernize Your QlikView Deployment webinar, Nov. 3rd. REGISTER
Showing results for 
Search instead for 
Did you mean: 
Not applicable

how to create a user defined function?

I'm using Qlikview version 11.20 SR5 64-bit version.

NONE of the examples I find on the website work, even when I copy paste them in. If I use SET to define the function when I use I simply get the function back as a string.


SET addTheseForMe = $1 + $2;

trace $(addTheseForMe(1,2));

this will return:

$1 + $2

if I use:

LET addTheseForMe = $1 + $2;

trace $(addTheseForMe(1,2));

I get an empty value. I've reduced it to a simple trace command for now since it wasn't working inside my regular logic. I hear there have been major changes between versions but I seem to be spending more time getting minor functions to (not) work than I am actually investing in solid development time.

FWIW my original UDF is:

set CURRENT_PERIOD_NAME = if(num($1) < 10, 'p0' & $1, 'p' & $1);

(because SET will simply return the function declaration, and if I wrap the response in $() I receive an empty string. If I use 'let' I simply receive 'p' back with no recognition of the $1 value... even when the value passed in is a '1', which should eval to p0 as the returned result.


2 Replies

Hello Dave,

You can accomplish this by creating a macro (Tools -> Edit Module), such as this one:

Function addTheseForMe(var1, var2)

  addTheseForMe= var1+var2

End Function

Then, allow macros to run during the load with by check this box in the Document's properties:


Finally, if you may access the function in your load script as such:

LET varA = 7;

LET varB = 8;

LET varAB = addTheseForMe(varA, varB);

Please find the example application in attachement, regards,



me too I have 11.20 SR5

script and log are

SET addTheseForMe = $1 + $2;

TRACE $(addTheseForMe(1,2));               // 1 + 2

let result=$(addTheseForMe(1,2));

trace $(result);                                        // 3

set cpn = if(num($1) < 10, 'p0' & $1, 'p' & $1);

TRACE $(cpn(1);

let result=$(cpn(1));

trace $(result);                              // p01

let result=$(cpn(10));

trace $(result);                              // p10