Input: IMsFormulaTermInfo;
Свойство Input определяет терм, соответствующий исходной переменной.
Для исходной динамики используйте свойство IMsInterpolateTransform.InputLevel.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS». В данном контейнере моделирования должна присутствовать модель месячной динамики с идентификатором «MODEL_INTERPOLATE», рассчитываемая методом «Интерполяция». Также предполагается наличие базы данных временных рядов с идентификатором «TSDB», содержащая годовые и месячные динамики.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms, Stat.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
Model: IMsModel;
Stub: IVariableStub;
Tree: IMsFormulaTransformSlicesTree;
RubrDescr: IMetabaseObjectDescriptor;
Transform: IMsFormulaTransform;
TransformVarables: IMsFormulaTransformVariables;
TransformVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
Slice: IMsFormulaTransformSlice;
Interpolate: IMsInterpolateTransform;
TermInfo: IMsFormulaTermInfo;
Calcul: IMsMethodCalculation;
arr: Array Of double;
i: Integer;
Period: IMsModelPeriod;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем модель
Model := mb.ItemByIdNamespace("MODEL_INTERPOLATE", MsKey).Edit As IMsModel;
// Получаем объект для настройки параметров модели
Transform := Model.Transform;
// Получаем коллекцию моделируемых переменных
TransformVarables := Transform.Outputs;
// Получаем первую моделируемую переменную
TransformVar := TransformVarables.Item(0);
// Создаем параметры расчета моделируемой переменной
Coord := Transform.CreateCoord(TransformVar);
// Получаем параметры расчета метода «Интерполяция»
Interpolate := Transform.FormulaItem(0).Method As IMsInterpolateTransform;
// Получаем базу данных временных рядов (БДВР)
RubrDescr := Mb.ItemById("TSDB");
// Приводим полученную БДВР к абстрактному источнику данных
Stub := RubrDescr.Bind As IVariableStub;
// Добавляем в модель фактор, источником данных которого является БДВР
TransformVar := Transform.Inputs.Add(Stub);
Tree := TransformVar.SlicesTree(TransformVar);
Slice := Tree.CreateSlice(2);
// Получаем фактор в виде терма
TermInfo := Transform.CreateTermInfo;
TermInfo.Slice := Slice;
// Указываем полученный терм в качестве исходной переменной
Interpolate.Input := TermInfo;
// Указываем исходную динамику
Interpolate.InputLevel := DimCalendarLevel.Year;
// Задаем степень полинома
Interpolate.MethodParameter := 3;
// Указываем метод обработки пропусков
Interpolate.MissingData.Method := MissingDataMethod.LinTrend;
// Задаем тип интерполяции: полиноминальная
Interpolate.MethodType := MsInterpolateType.Polynomial;
// Создаем объект с параметрами расчета модели
Calcul := Transform.CreateCalculation;
// Задаем периоды расчета
Period := Model.Transform.Period;
Calcul.Period.IdentificationStartDate := Period.IdentificationStartDate;
Calcul.Period.IdentificationEndDate := Period.IdentificationEndDate;
Calcul.Period.ForecastStartDate := Period.ForecastStartDate;
Calcul.Period.ForecastEndDate := Period.ForecastEndDate;
Calcul.CurrentPoint := Period.IdentificationStartDate;
// Получаем данные моделируемой переменной
arr := Interpolate.CalculateSeries(Calcul, Coord).Modelling;
// Выводим наименование и данные моделируемой переменной в окно консоли
Debug.WriteLine(Interpolate.Result.TermInfo.TermText);
For i := 0 To arr.Length - 1 Do
Debug.WriteLine(arr[i]);
End For;
// Сохраняем изменения в модели
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера будут изменены настройки расчета модели «MODEL_INTERPOLATE»: изменена выходная переменная, метод расчета интерполяции и пр. Результаты расчета будут выведены в окно консоли.
См. также: