FillGapsUserMethod: IForeMethod;
Свойство FillGapsUserMethod определяет пользовательский метод обработки пропусков.
Для использования пользовательского метода свойство IMsCrossDimensionAggregationOptions.UseFillGaps должно иметь значение True.
Первым параметром пользовательского метода должен передаваться ряд, представленный интерфейсом ITimeSeries. Остальные параметры опциональные их значения задаются через свойство IMsCrossDimensionAggregationOptions.FillGapsUserMethodParams. Метод должен возвращать значение ITimeSeries приведенные к типу Variant.
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «OBJ_RUBRICATOR», в контейнере моделирования которой содержится модель расширенной агрегации с идентификатором «MODEL_AGGR». Также в репозитории должна присутствовать область глобальных параметров с идентификатором «SHARED_P», содержащая следующий метод с ключом «1»:
Public Function FillGaps(Input: ITimeSeries; SpecValue: Double): Variant;
Var
i: Integer;
Begin
For i := Input.StartIndex To Input.EndIndex Do
If Double.IsNan(Input.Item(i)) Then
Input.Item(i) := SpecValue;
End If;
End For;
Return Input;
End Function FillGaps;
Перед выполнением примера необходимо добавить ссылки на системные сборки «Metabase», «Cubes», «Ms», «Fore».
Sub UserProc;
Var
Mb: IMetabase;
Rubr: IRubricator;
MsDescr: IMetabaseObjectDescriptor;
Model: IMsModel;
ModelFormula: IMsFormula;
CrossDimAggr: IMsCrossDimensionAggregationTransform;
AggrOptions: IMsCrossDimensionAggregationOptions;
Shp: ISharedParams;
ShMethod: IForeMethod;
MetodParams: IMsUserMethodParams;
Begin
Mb := MetabaseClass.Active;
Rubr := Mb.ItemById("OBJ_RUBRICATOR").Bind As IRubricator;
MsDescr := Rubr.ModelSpace;
Model := Mb.ItemByIdNamespace("MODEL_AGGR", MsDescr.Key).Edit As IMsModel;
ModelFormula := Model.Transform.FormulaItem(0);
CrossDimAggr := ModelFormula.Method As IMsCrossDimensionAggregationTransform;
AggrOptions := CrossDimAggr.Options;
Shp := mb.ItemById("SHARED_P").Edit As ISharedParams;
ShMethod := Shp.Methods.FindByKey(1);
AggrOptions.FillGapsUserMethod := ShMethod;
MetodParams := AggrOptions.FillGapsUserMethodParams;
MetodParams.Item(1).Value := 10;
AggrOptions.UseFillGaps := True;
(Model As IMetabaseObject).Save;
End Sub UserProc;
После выполнения примера модель расчета расширенной агрегации будет использовать пользовательский метод обработки пропусков.
См. также: