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 14 years ago

Closed 14 years ago

Last modified 13 years ago

#628 closed defect (fixed)

Creación de una variable con datos y sin expresión — at Version 4

Reported by: imendez Owned by: Pedro Gea
Priority: critical Milestone: Release 0.6
Component: Variables Keywords:
Cc:

Description (last modified by Pedro Gea)

Hola, a la hora de añadir una variable a un DataSet hay (al menos) dos opciones:

  • Con una expresión TOL
  • Apostándole los datos de forma explícita.

Al hacerlo de la segunda forma, me da error al intentar recuperar los datos, creo que porque intenta obtener la expresión:

NameBlock aux =  DataSet.Ejemplo::CreateVariable
([[
  Text _.name = "Aux";
  Text _.description = "Prueba";
  Text _.type = "Serie";
  Serie _.data = SubSer(CalInd(WD(5), Diario), y2009, y2010)
]]);  
Serie auxData = aux::GetData(?);
Warning: [37] La función Eval ha fallado en : 
Eval(expression3)

Warning: [38] La función :: ha fallado en : 
space::LocalEval(expression)

ERROR: [49] data no se pudo crear.

[Call stack]
  [2] Anything MMS::@Variable::_.ObtainData (Text expression, Set variables, Text scenario, NameBlock parent)
  [1] Anything aux::variable::variable::GetData (Real void)

ERROR: [50] [@Variable::_.ObtainData] Error en el acceso a los datos.

Por cierto, al intentar crear la variable con el atributo _.data y sin el _.type da error: ¿no podría deducir el tipo de datos a partir de la gramática de éstos, al igual que hace cuando se crea la variable con _.expression?

Gracias.

Change History (4)

comment:1 Changed 14 years ago by imendez

Si se definen los datos de dos maneras, mediante _.expression y _.data, tiene prioridad _.expression:

NameBlock aux3 =  MPAPME.DataSet.Economia::CreateVariable
([[
  Text _.name = "Aux3";
  Text _.description = "Prueba";
  Text _.expression = "SubSer(CalInd(WD(4), Diario), y2009, y2010)";
  Text _.type = "Serie";
  Serie _.data = SubSer(CalInd(WD(5), Diario), y2009, y2010)
]]);  
Serie aux3Data = aux3::GetData(?);

Creo que en este caso debería dar al menos un Warning (avisando que se utilizará la expresión en lugar de los datos) o quizá incluso un error, pues como ocurre en el ejemplo anterior ambas definiciones pueden ser contradictorias.

Un saludo.

comment:2 Changed 14 years ago by Pedro Gea

Description: modified (diff)
Milestone: Release 0.6
Status: newaccepted

El comportamiento que indicas es consecuencia de que el argumento _.data se está ignorando. El argumento implementado para incluir los datos es Set _.data..

Si hacemos la llamada así:

NameBlock aux = DataSet.Ejemplo::CreateVariable([[
  Text _.name = "Aux";
  Text _.description = "Prueba";
  Text _.type = "Serie";
  Set _.data. = [[ Serie SubSer(CalInd(WD(5), Diario), y2009, y2010) ]]
]]);

no encontrarás esos problemas.

Haciéndolo así, el argumento _.type es opcional y el argumento _.expression es secundario y solo se usará al hacer un UpdateData.

comment:3 Changed 14 years ago by Pedro Gea

¿Por qué el argumento es _.data. (con punto) y no _.data?

Internamente este argumento para la creación de la variables se corresponde con el atributo (que también es un conjunto) denominado _.data..

El nombre _.data. acabado en punto (".") quiere indicar que el atributo en sí mismo (los datos) no es el conjunto en sí mismo sino el elemento que contiene. Este convenio para los atributos se utiliza en más de un sitio en MMS aunque quizá no en todos.

La razón de usar un conjunto para albergar un atributo responde a varias razones entre ellas:

  • Hacer posible que el atributo sea opcional.
  • Permitir que el atributo pueda ser de distinto tipo para distintas instancias ya que no se trabaja bien con atributos de tipo Anything.
  • Permitir que el atributo mantenga su nombre. En este caso el nombre de la serie es Name(_.data.[1] y ahorrándonos así tener que darle un nombre en cada llamada a GetData.

comment:4 Changed 14 years ago by Pedro Gea

Description: modified (diff)
Resolution: fixed
Status: acceptedclosed
Note: See TracTickets for help on using tickets.