close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Closed 13 years ago

#884 closed enhancement (fixed)

GetExpression_Recur

Reported by: atorre Owned by: Pedro Gea
Priority: major Milestone: Release 0.6
Component: Variables Keywords: expresión, dependencias
Cc: prcoco.bbvasp@…

Description

Hola MMS,
echo en falta una función que devuelva la expresión de una variable eliminando las "dependencias", esto es, devolviendo la variable dependiente o su expresión en vez de los "%n" que representan a las variables dependientes.

En mi caso, necesito la expresión de la variable en términos de las variables originales (sin dependencias). Sigue una función que lo hace:

Text GetExpression_Recur(NameBlock var)
{
  Real hasDep = var::HasDependences(?);
  Text expr = var::GetExpression(?);
  If(Not(hasDep), var::GetName(?),
  {
    Set dep = var::GetDependences(?);
    Set repTab = For(1, Card(dep), Set(Real r)
    {
      NameBlock varDep = dep[r];
      [[ "%"+ IntText(r), GetExpression_Recur(varDep) ]]
    });
    ReplaceTable(expr, repTab)
  })
};

Change History (3)

comment:1 Changed 13 years ago by Daniel Eduardo Castro Morell

(In [2928]) A la clase MMS::@Variable se le agrega el método: GetExpression_Recursive(Real mode)
Si mode es 101: la extensión llega hasta los nombres de las variables independientes
Si mode es 102: se da un paso más, y se llega hasta la expresión de las variables independientes
El modo por defecto es el 101.

Refs #884

comment:2 Changed 13 years ago by Daniel Eduardo Castro Morell

Ejemplo:

...
NameBlock var = forecast::GetModel(?)::GetDataSet(?)::GetVariable("AdvTVComp5_Coke");
Real WriteLn(var::GetExpression_Recursive(101));
Real WritelLn("");
Real WriteLn(var::GetExpression_Recursive(102));
//Salida
"1 - 0.42^(DeltaTransform(((TV_Spend_Pepsi+TV_Spend_PepsiTwist)/1343),0.75)/100)"

"1 - 0.42^(DeltaTransform(((GetTVSpend([[ Text _.country = "Pol"; Text _.trademark = "PepsiReg" ]])+GetTVSpend([[ Text _.country = "Pol"; Text _.trademark = "PepsiTwist" ]]))/1343),0.75)/100)" 

comment:3 Changed 13 years ago by Pedro Gea

Resolution: fixed
Status: newclosed

Se introdujo también este método (GetExpression_Recursive) en la rama principal de MMS. (Véase [2945])

Note: See TracTickets for help on using tickets.