Subscribe Bookmark RSS Feed

How to "Suppress Eval" ?

altug_bayram

Community Trekker

Joined:

Apr 11, 2016

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);

);

1 ACCEPTED SOLUTION

Accepted Solutions
Solution

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

        )

    );

);

3 REPLIES
Solution

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

        )

    );

);

brady_brady

Staff

Joined:

Jun 9, 2012

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;

altug_bayram

Community Trekker

Joined:

Apr 11, 2016

Both of your formulaes worked. Thanks so much ...

Appreciate the help.