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;
Добавьте ссылки на системные сборки: Cubes, Fore, Metabase, Ms.
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;
В результате выполнения примера модель расчёта расширенной агрегации будет использовать пользовательский метод обработки пропусков.
См. также: