CenterMovingAverage: Boolean;
CenterMovingAverage: boolean;
Свойство CenterMovingAverage определяет, центрировать ли скользящее среднее.
Допустимые значения:
True. Скользящее среднее центрируется;
False. Значение по умолчанию. Скользящее среднее не центрируется.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором MODEL_SPACE, содержащего модель с идентификатором MODEL_CENSUS1 и переменную с идентификатором OUTPUT_VAR_CENSUS. Переменная должна содержать квартальные данные.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Metabase, Ms, Stat.
Sub UserProc;
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;
CPeriod, TPeriod: IMsModelPeriod;
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;
CPeriod := Calc.Period;
TPeriod := model.Transform.Period;
CPeriod.IdentificationStartDate := TPeriod.IdentificationStartDate;
CPeriod.IdentificationEndDate := TPeriod.IdentificationEndDate;
CPeriod.ForecastStartDate := TPeriod.ForecastStartDate;
CPeriod.ForecastEndDate := TPeriod.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 UserProc;
// Процедура вывода данных
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;
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;
CPeriod, TPeriod: IMsModelPeriod;
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.mcRD;
// Сохраняем изменения
(Model As IMetabaseObject).Save();
// Задаем параметры периода расчёта
Calc := Transform.CreateCalculation();
CPeriod := Calc.Period;
TPeriod := model.Transform.Period;
CPeriod.IdentificationStartDate := TPeriod.IdentificationStartDate;
CPeriod.IdentificationEndDate := TPeriod.IdentificationEndDate;
CPeriod.ForecastStartDate := TPeriod.ForecastStartDate;
CPeriod.ForecastEndDate := TPeriod.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;
Результат выполнения примера: модель MODEL_SPACE настроена на расчёт метода Census1, модель рассчитана, результаты выведены в окно консоли.
См. также: