IMsUserTransformImplementation.Execute

Синтаксис

Execute(

Calculation: IMsMethodCalculation;

Coord: IMsFormulaTransformCoord;

Explained: IMsFormulaTerm;

Explanatories: IMsFormulaTermList);

Параметры

Calculation. Настройки, необходимые для расчета модели;

Coord. Измерение, по которому осуществляется расчет;

Explained. Моделируемый ряд;

Explanatories. Коллекция термов, используемых как факторы при моделировании.

Описание

Метод Execute осуществляет расчет модели с помощью алгоритма пользователя. Данный метод должен быть переопределен в пользовательском классе.

Пример

 Public Class My_Method: Object, IMsUserTransformImplementation

Param1, Param2: Double;

 

Sub Execute(Calculation: IMsMethodCalculation; Coo: IMsFormulaTransformCoord; Explained: IMsFormulaTerm; Explanatories: IMsFormulaTermList);

Var

Matr: IMatrix;

Mcoo: IMatrixCoord;

Cub: ICubeInstance;

i: Integer;

Term: IMsFormulaTerm;

ModelAr, FactorAr: Array Of Double;

Period: IMsModelPeriod;

Begin

//Получение матрицы переменной, в которую будут сохранены рассчитанные данные

Matr := Calculation.Variable(Explained.Slice.Variable.VariableStub);

Mcoo := Matr.CreateCoord;

Matr.ValueFlag := Matr.ValueFlag + 1;

ModelAr := Explained.Serie(Calculation);

Period := Calculation.Period;

//Расчет

If Explanatories.Count <> 0 Then

Term := Explanatories.Item(0);

FactorAr := Term.Serie(Calculation);

For i := 0 To Period.ForecastEndDate.Year - Period.IdentificationStartDate.Year Do

MCoo.Item(0) := i;

MCoo.Item(1) := 1;

If Double.IsNan(ModelAr[i]) Then

Matr.Item(Mcoo) := (FactorAr[i] + (FactorAr[i - 1] + FactorAr[i - 2])) * Param1 / Param2;

Else

Matr.Item(Mcoo) := (ModelAr[i] + FactorAr[i]) * Param1 / Param2;

End If;

Calculation.CurrentPoint := DateTime.AddYears(Calculation.CurrentPoint, 1);

End For;

Else

For i := 0 To Period.ForecastEndDate.Year - Period.IdentificationStartDate.Year Do

MCoo.Item(0) := i;

MCoo.Item(1) := 1;

Matr.Item(Mcoo) := Math.RandBetween(0, 100) * Param1 / Param2;

End For;

End If;

//Сохранение данных в переменную

Cub := ((Explained.Slice.Variable.VariableStub As IMsVariable).Cube As IMetabaseObject).Open(Null) As ICubeInstance;

Cub.Destinations.DefaultDestination.CreateStorage.SaveMatrix(Matr, Matr.ValueFlag);

End Sub Execute;

 

Sub Set_params(ParamValue: IMsUserMethodParams);

Begin

Param1 := ParamValue.Item(0).Value As Double;

Param2 := ParamValue.Item(1).Value As Double;

End Sub Set_params;

 End Class My_Method;

Данный пример является макросом, содержащим пользовательский метод расчета модели. При расчете модели, настроенной на использование пользовательского метода, будет осуществляться расчет данных по некоторой зависимости между моделируемым рядом и фактором модели. После расчета данные будут сохранены в выходную переменную.

См. также:

IMsUserTransformImplementation