CenterMovingAverage: Boolean;
CenterMovingAverage: boolean;
Свойство CenterMovingAverage определяет, центрировать ли скользящее среднее.
Допустимые значения:
True. Скользящее среднее центрируется;
False. Значение по умолчанию. Скользящее среднее не центрируется.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MODEL_SPACE», содержащего модель с идентификатором «MODEL_CENSUS1» и переменную с идентификатором «OUTPUT_VAR_CENSUS». Переменная должна содержать квартальные данные.
Добавьте ссылки на системные сборки: «Cubes», «Dimensions», «Metabase», «Ms», «Stat».
Sub Census1;
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
Vars: IMsFormulaTransformVariables;
OutputStub: IVariableStub;
OutputVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Census1: IMsCensus1Transform;
Calc: IMsMethodCalculation;
Data: Array Of Double;
Begin
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
MsObj := mb.ItemById("MODEL_SPACE");
// Получаем модель
Model := mb.ItemByIdNamespace("MODEL_CENSUS1", MsObj.Key).Edit As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
// Задаем моделируемую переменную
Vars := Transform.Outputs;
Vars.Clear;
OutputStub := mb.ItemByIdNamespace("OUTPUT_VAR_CENSUS", MsObj.Key).Edit As IVariableStub;
OutputVar := Vars.Add(OutputStub);
// Получаем параметры метода расчета модели
Coord := Transform.CreateCoord(OutputVar);
Slice := OutputVar.Slices.Add(Null);
Selector := Transform.CreateSelector;
Selector.Slice := Slice;
Formula := Transform.Transform(Selector);
// Задаем календарную динамику расчета
Formula.Level := DimCalendarLevel.Quarter;
// Задаем метод расчёта модели
Formula.Kind := MsFormulaKind.Census1;
// Получаем параметры расчёта метода Census1
Census1 := Formula.Method As IMsCensus1Transform;
// Задаем тип сезонности
Census1.Seasonality := SeasonalityType.Additive;
// Центрируем скользящее среднее
Census1.CenterMovingAverage := True;
// Задаем параметры обработки пропусков
Census1.MissingData.Method := MissingDataMethod.LinTrend;
Census1.OutputType := MsCensus1OutputType.RD;
// Сохраняем изменения
(Model As IMetabaseObject).Save;
// Задаем параметры периода расчёта
Calc := Transform.CreateCalculation;
Calc.Period.IdentificationStartDate := model.Period.IdentificationStartDate;
Calc.Period.IdentificationEndDate := model.Period.IdentificationEndDate;
Calc.Period.ForecastStartDate := model.Period.ForecastStartDate;
Calc.Period.ForecastEndDate := model.Period.ForecastEndDate;
// Выполняем расчет
Census1.Execute(Calc, Coord);
// Выводим результаты расчета
Data := Census1.Explained.Serie(Calc);
Debug.WriteLine("Смоделированные данные");
Print(Data); Debug.WriteLine("");
Data := Census1.MovingAverage;
Debug.WriteLine("Сглаженный ряд");
Print(Data); Debug.WriteLine("");
Data := Census1.RatioDifferences;
Debug.WriteLine("Разность");
Print(Data); Debug.WriteLine("");
Data := Census1.Seasonal;
Debug.WriteLine("Сезонная составляющая");
Print(Data); Debug.WriteLine("");
Data := Census1.SeasonalAdjustment;
Debug.WriteLine("Сезонная корректировка");
Print(Data); Debug.WriteLine("");
Data := Census1.TrendCycle;
Debug.WriteLine("Тренд-циклическая составляющая");
Print(Data); Debug.WriteLine("");
Data := Census1.Irregula;
Debug.WriteLine("Нерегулярная компонента");
Print(Data); Debug.WriteLine("");
End Sub Census1;
// Процедура вывода данных
Sub Print(Data: Array Of Double);
Var
i: Integer;
Begin
Debug.Indent;
For i := 0 To Data.Length - 1 Do
Debug.WriteLine(i.ToString + " " + Data[i].ToString);
End For;
Debug.Unindent;
End Sub Print;
Результат выполнения примера: модель «MODEL_SPACE» настроена на расчёт метода «Census1», модель рассчитана, результаты выведены в окно консоли.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Stat;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Model: IMsModel;
Transform: IMsFormulaTransform;
Vars: IMsFormulaTransformVariables;
OutputStub: IVariableStub;
OutputVar: IMsFormulaTransformVariable;
Coord: IMsFormulaTransformCoord;
Slice: IMsFormulaTransformSlice;
Selector: IMsFormulaTransformSelector;
Formula: IMsFormula;
Census1: IMsCensus1Transform;
Calc: IMsMethodCalculation;
Data: System.Array;
Begin
mb := Params.Metabase;
// Получаем контейнер моделирования
MsObj := mb.ItemById["MODEL_SPACE"];
// Получаем модель
Model := mb.ItemByIdNamespace["MODEL_CENSUS1", MsObj.Key].Edit() As IMsModel;
// Получаем параметры модели
Transform := Model.Transform;
// Задаем моделируемую переменную
Vars := Transform.Outputs;
Vars.Clear();
OutputStub := mb.ItemByIdNamespace["OUTPUT_VAR_CENSUS", MsObj.Key].Edit() As IVariableStub;
OutputVar := Vars.Add(OutputStub);
// Получаем параметры метода расчета модели
Coord := Transform.CreateCoord(OutputVar);
Slice := OutputVar.Slices.Add(Null);
Selector := Transform.CreateSelector();
Selector.Slice := Slice;
Formula := Transform.Transform[Selector];
// Задаем календарную динамику расчета
Formula.Level := DimCalendarLevel.dclQuarter;
// Задаем метод расчёта модели
Formula.Kind := MsFormulaKind.mfkCensus1;
// Получаем параметры расчёта метода Census1
Census1 := Formula.Method As IMsCensus1Transform;
// Задаем тип сезонности
Census1.Seasonality := SeasonalityType.sstAdditive;
// Центрируем скользящее среднее
Census1.CenterMovingAverage := True;
// Задаем параметры обработки пропусков
Census1.MissingData.Method := MissingDataMethod.mdmLinTrend;
Census1.OutputType := MsCensus1OutputType.mc1otRD;
// Сохраняем изменения
(Model As IMetabaseObject).Save();
// Задаем параметры периода расчёта
Calc := Transform.CreateCalculation();
Calc.Period.IdentificationStartDate := model.Period.IdentificationStartDate;
Calc.Period.IdentificationEndDate := model.Period.IdentificationEndDate;
Calc.Period.ForecastStartDate := model.Period.ForecastStartDate;
Calc.Period.ForecastEndDate := model.Period.ForecastEndDate;
// Выполняем расчет
Census1.Execute(Calc, Coord);
// Выводим результаты расчета
Data := Census1.Explained.Serie[Calc];
System.Diagnostics.Debug.WriteLine("Смоделированные данные");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.MovingAverage;
System.Diagnostics.Debug.WriteLine("Сглаженный ряд");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.RatioDifferences;
System.Diagnostics.Debug.WriteLine("Разность");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.Seasonal;
System.Diagnostics.Debug.WriteLine("Сезонная составляющая");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.SeasonalAdjustment;
System.Diagnostics.Debug.WriteLine("Сезонная корректировка");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.TrendCycle;
System.Diagnostics.Debug.WriteLine("Тренд-циклическая составляющая");
Print(Data); System.Diagnostics.Debug.WriteLine("");
Data := Census1.Irregula;
System.Diagnostics.Debug.WriteLine("Нерегулярная компонента");
Print(Data); System.Diagnostics.Debug.WriteLine("");
End Sub;
// Процедура вывода данных
Public Shared Sub Print(Data: System.Array);
Var
i: Integer;
Begin
System.Diagnostics.Debug.Indent();
For i := 0 To Data.Length - 1 Do
System.Diagnostics.Debug.WriteLine(i.ToString() + " " + Data[i].ToString());
End For;
System.Diagnostics.Debug.Unindent();
End Sub Print;
См. также: