FillGapsUserMethod: IForeMethod;
Свойство FillGapsUserMethod определяет пользовательский метод обработки пропусков.
Первым параметром пользовательского метода должен передаваться ряд, представленный интерфейсом 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;
После выполнения примера модель расчета расширенной агрегации будет использовать пользовательский метод обработки пропусков.
См. также: