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

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
datanibbler
Champion
Champion

How to drop variables from a qvw?

Hi,

I have a pretty complicated code to find out the valid cost_center for every employee for every single day from his/her join_date to (his/her leaving_date or today).

The code works for one single employee, I have thoroughly tested it on a few quite difficult scenarios and it was correct all the way.

Now I've made this into a subroutine and built a FOR...NEXT loop over the employees and call this subroutine once per line (Í pass the line_nr to the subroutine, not the emp_ID, I think that simple consecutive numbers are easiest for QlikView and thus fastest)

=> The code runs error-free through all lines of the employee_list.`

The only remaining problem - I hope it's the only one remaining - is: The loops goes like

FOR i = 1 TO NoOfRows('Tablename')

  CALL ...

NEXT

At the end of this, I just wanted to have a look at my counter i to see if it had the right value and I saw just that nr. of variables there - one variable labeled '1', one labeled '2' and so on all the way through to 1.000+

Is there some way I can drop those along the way?

Thanks a lot!

Best regards,

DataNibbler

P.S.: I create several variables in every run of the subroutine, with both SET and LET

8 Replies
datanibbler
Champion
Champion
Author

I have an idea:

- The variables really have the same name and value - the variable labeled '1' has the value 1, the one labeled '2' has the value 2 and so on.

=> I suppose this is the line_ID that I pass to the subroutine:

- This is actually my counter i that I use in the loop

- I call the sub like >>> CALL Kostenstellenroutine ($(i)) <<<

=> The sub itself begins like >>> sub Kostenstellenroutine (v_lineID) <<<

=> The counter i is thus passed to the sub labeled v_lineID.

=> I suppose, but unfortunately I cannot check, that this variable that is left over with every single call of the sub is just this counter.

In another thread on a similar issue, I found that >>> LET [var] = NULL(); <<< could be used <=> I cannot do that because I cannot use the semicolon or my LOOP will stop right there.

I guess, though, that those variables cost me very little in terms of performance, so I can just build a second LOOP and delete them all?

P.S.: No, obviously it was not that - that second LOOP seemingly did not even execute.

Not applicable

First of all, is it necessary to create lot of variables in the For Loop ?

In loop, we create one variable and change that Variable value in every loop execution.

The another way, just Let vName = ; at end of loop execution its automatically de-allocate the variable.

datanibbler
Champion
Champion
Author

Hi datu.qv,

no, it is surely not necessary - the problem is, all of these variables just have a number as label - I cannot tell at which point in the code they are actually generated.

I will have another look at the SET and LET commands in the code - I believe there are several.

Thanks a lot!

Best regards,

DataNibbler

datanibbler
Champion
Champion
Author

Hi dathu.qv,

I looked through my code and though there are a few variables inside the subroutine, those are updated with every calling of the subroutine.

=> It looks very much like those variables are something to do with my counter.

I post the code of my loop here, there's nothing much to it:

// Here I load a list of the emps we have RESIDENT from the base_load - a step that might be skipped...

Mitarbeiterliste:

LOAD
  
GPEline
RESIDENT MA_Grunddaten2
;

// this variable is also just for my own information and not relevant to the functioning of the code.
LET v_emps = NoOfRows('Mitarbeiterliste');


FOR i = 1 TO NoOfRows('Mitarbeiterliste')
 
CALL Kostenstellenroutine ($(i))
next

Now, that counter i takes on the values from 1 to, say, 1000 - and I have just the same nr. of variables created.

Can you tell me what's wrong there?`

Thanks a lot!

Best regards,

DataNibbler

jonathandienst
Partner - Champion III
Partner - Champion III

Hi

This is a problem I saw discussed recently. You need to wrap the parameter in () to convert it to an expression.

CALL Kostenstellenroutine (($(i)))

or

CALL Kostenstellenroutine ((i))

(This appears to be a bug in 11.0 or 11.2)

HTH

Jonathan

Logic will get you from a to b. Imagination will take you everywhere. - A Einstein
swuehl
MVP
MVP

Yes, here is a link to a recent discussion.

[11.2 SR4] Why Sleep function creates a variable ?

datanibbler
Champion
Champion
Author


Hi Jonathan,

I had it with that $-sign-expansion as >>> $(i) <<< (I had understood, from "QlikView 11 for Developers" that you should just ALWAYS use it (necessary or not) just to keep things in sync.

I will now try the other variant.

Thanks a lot!

Best regards,

DataNibbler

datanibbler
Champion
Champion
Author

Hi swuehl,

thanks! I looked into it. But - does anyone from QlikTech look at those threads`(same as with the ideas_section)`?

@ Jonathan

Thanks! It works. I just tried with just the first 10 records so it wouldn't run so long and no variables were created.

Thanks a lot!

Best regards,

DataNibbler