Hello
trying to put a formula that simply counts (increments) based on the occurences of the same asset_num in time.
I like this formula to be calculated one time and then either suppress eval OR even delete formulae.
Any help will be appreciated.
below, I tried suppress eval(false) to let the formula calculate and then suppress eval(true) to suppress it...
it did not work.
thanks
::MyCntDwn2 = Function( {dt}, {Default Local},
col=New Column("Countdown",Numeric,"Continuous",Format( "Best", 12 ));
col<<Set Formula(
If( Row() > 1,
If( :asset_num == Lag( :asset_num, 1 ),
Lag( :Countdown, 1 ) + 1,
1
),
1
)
);
col << suppress eval(false);
col << suppress eval(true);
);
I guess the <<suppress eval() messages are executed so fast that the formula never has time to evaluate.
Use <<Eval Formula to force column to evaluate before suppressing it:
...
col << eval formula;
col << suppress eval(true);
...
But, if you don't really need a formula you can just calculate the values once:
::MyCntDwn2 = Function({dt},
col = dt << New Column("Countdown", Numeric, "Continuous", Format("Best", 12));
For Each Row(
col[] = If(Row() > 1,
If(:asset_num[] == Lag(:asset_num[], 1),
Lag(col[], 1) + 1,
1
),
1
)
);
);
I guess the <<suppress eval() messages are executed so fast that the formula never has time to evaluate.
Use <<Eval Formula to force column to evaluate before suppressing it:
...
col << eval formula;
col << suppress eval(true);
...
But, if you don't really need a formula you can just calculate the values once:
::MyCntDwn2 = Function({dt},
col = dt << New Column("Countdown", Numeric, "Continuous", Format("Best", 12));
For Each Row(
col[] = If(Row() > 1,
If(:asset_num[] == Lag(:asset_num[], 1),
Lag(col[], 1) + 1,
1
),
1
)
);
);
Hi Altug,
In cases like these I usually just delete the formula after:
dt = Current Data Table();
dt << new column("Countdown",
formula((Row() - Col Minimum( Row(), :asset_num )) + 1)
);
column(dt, "Countdown") << Delete Formula;
Both of your formulaes worked. Thanks so much ...
Appreciate the help.