Page 1 of 1

Counter in while loop

Posted: Thu Jul 19, 2012 12:02 pm
by Michael Barker
Hi all,

I have a large number of elements I want to add to a dimension in TI,

i.e.
DimensionElementInsert('Department','',Department_1,'S');
DimensionElementInsert('Department','',Department_2,'S');
DimensionElementInsert('Department','',Department_3,'S');
DimensionElementInsert('Department','',Department_4,'S');
DimensionElementInsert('Department','',Department_5,'S');
(etc.)

Is it possible to create a counter (i) that I can substitute into the department variables (e.g. Department_i) with a WHILE loop?

Thanks in advance.

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:18 pm
by Catherine
Hi,

Yes, it is. That would be something like that (not tested...):

i=1;
While (i<=200);
DimensionElementInsert('Department','','Department_'|i,'S');
i=i+1;
end;

Your element names would then be:
Department_1
Department_2
...
Department_200

Is that what you're looking for?

HTH

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:31 pm
by Michael Barker
Hi Catherine,

I'm referencing Department_1, Department_2, etc. directly as variables.

Enclosing them in inverted commas populates the dimension with the text within. I'm after the variables values. So I cannot use the inverted commas.

Thanks.

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:34 pm
by declanr
Catherine wrote:Hi,

Yes, it is. That would be something like that (not tested...):

i=1;
While (i<=200);
DimensionElementInsert('Department','','Department_'|i,'S');
i=i+1;
end;

Your element names would then be:
Department_1
Department_2
...
Department_200

Is that what you're looking for?

HTH
Catherine has answered the question but I think the code needs just 1 small tweak, in the case above i is a numeric term so when stating 'Department_' | i the code may not work due to i not being string as such it could simply be replaced with 'Department_' | NumberToString ( i )

e.g.

i=1;
While (i<=200);
DimensionElementInsert('Department','','Department_'|NumberToString ( i ) ,'S');
i=i+1;
end;

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:36 pm
by declanr
Michael Barker wrote:Hi Catherine,

I'm referencing Department_1, Department_2, etc. directly as variables.

Enclosing them in inverted commas populates the dimension with the text within. I'm after the variables values. So I cannot use the inverted commas.

Thanks.

If Department_1 and Department_2 are variables then why don't you just populate in the metadata tab with a simple

DimensionElementInsert( 'Dim', '', v1, 'S');

Or do you mean that they are the names of the variables as opposed to the variable values?

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:41 pm
by Michael Barker
They are variable names. There's s lot of them. I can copy/paste the code for all of them in the metadata tab, but that just seems unnecessary.

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:47 pm
by declanr
I'm not sure I entirely understand the problem.

Could you provide an example csv of the datasource and explain what you want to be created?

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:55 pm
by Grandryjn
I think that you want to retrieve the variable name from the concatenation of 'Departement_' and a number i in your while.

I think that you should try the "Expand" function.

Something like that "expand('%Departement_'|numbertostring(i)|'%')" should give you the variable value.

Is that correct?

Re: Counter in while loop

Posted: Thu Jul 19, 2012 12:58 pm
by Michael Barker
Expand() is what I was looking for. Let me try it out.

Thanks!

Re: Counter in while loop

Posted: Thu Jul 19, 2012 1:04 pm
by Grandryjn
:D

Tell me if it worked ;)

Re: Counter in while loop

Posted: Thu Jul 19, 2012 1:09 pm
by mykill
It should be a double Expand. The inner one to get the name and the outer one to get the value.

Re: Counter in while loop

Posted: Thu Jul 19, 2012 2:45 pm
by Steve Rowe
http://www.tm1forum.com/viewtopic.php?f=21&t=4921

A few examples here on the use of expand to manipulate variable names.

I think you only need a single expand.

Double expand is when the value you need is held in a variable that is itself the value of antother variable....

Re: Counter in while loop

Posted: Fri Jul 20, 2012 9:37 am
by Michael Barker
Thanks all, works fantastically.

Code: Select all

WHILE()

j = NUMBERTOSTRING(i);

DIMENSIONELEMENTINSERT('Department','',EXPAND('%Department_'|EXPAND('%j%')|'%'),'S');

i = i +1

END

Re: Counter in while loop

Posted: Sat Jul 21, 2012 7:15 am
by Steve Rowe
Except you only need on expand

DIMENSIONELEMENTINSERT('Department','',EXPAND('%Department_'| j|'%'),'S');

will work too