Aggregator(Dimension: IDimensionModel): IBasicMatrixAggregator;
Dimension. Aggregated dimension.
The Aggregator property returns aggregation parameters for the specified dimension.
To set aggregation filter, use the IMsMatrixAggregationTransform.Filter property.
Executing the example requires that the repository contains a modeling container with the MS identifier containing a model with the MODEL_MATRIXAGGREGATION identifier. This model must calculate any of available methods. The model data source must also contain a dimension based on a table MDM dictionary with the MDM_DICT_GEOLOCATION identifier. This dictionary must contain three or more levels and a logical attribute with the ISCAPITAL identifier.
Add links to the Dimensions, Matrix, Metabase, Ms system assemblies.
Sub UserProc;
Var
mb: IMetabase;
pMsKey: Integer;
pModel: IMsModel;
pTransform: IMsFormulaTransform;
pFormula: IMsFormula;
pMethod: IMsMatrixAggregationTransform;
pInfo: IMsFormulaTermInfo;
pAggregator: IBasicMatrixAggregator;
pLevelAgg: IBasicMatrixLevelAggregator;
pDimModel: IDimensionModel;
pDimInstance: IDimInstance;
pDimLevels: IDimLevels;
pAggDimSel, pFilterSelection: IDimSelection;
pFilter: IMsAggregationFilter;
pAdvancedFilterCondition: IMsDimIteratorAdvancedFilterCondition;
i: Integer;
Begin
// Get current repository
mb := MetabaseClass.Active;
// Get modelling container key
pMsKey := mb.GetObjectKeyById("MS");
// Get the model
pModel := mb.ItemByIdNamespace("MODEL_MATRIXAGGREGATION", pMsKey).Edit As IMsModel;
// Get model calculation parameters
pTransform := pModel.Transform;
// Get model calculation method
pFormula := pTransform.FormulaItem(0);
// Change model calculation method for matrix aggregation
pFormula.Kind := MsFormulaKind.MatrixAggregation;
// Get matrix aggregation calculation parameters
pMethod := pFormula.Method As IMsMatrixAggregationTransform;
// Create term
pInfo := pTransform.CreateTermInfo;
pInfo.Slice := pTransform.Outputs.Item(0).Slices.Item(0);
// Get selection that is set by dimension that id based on the MDM_DICT_GEOLOCATION dictionary
pAggDimSel := pInfo.Slice.Selection.FindById("MDM_DICT_GEOLOCATION");
pAggDimSel.SelectAll;
// Determine term corresponding to the output variable
pMethod.Result.TermInfo := pInfo;
// Get the MDM_DICT_GEOLOCATION dictionary
pDimInstance := pAggDimSel.Dimension;
pDimModel := pDimInstance.Dimension;
// Get dictionary calendar frequencies
pDimLevels := pDimModel.Levels;
// Get aggregation settings
pAggregator := pMethod.Aggregator(pDimModel);
// Get aggregation settings for specified dictionary frequency
pLevelAgg := pAggregator.LevelAggregation(pDimLevels.Item(pDimLevels.Count - 2));
// Specify aggregation calendar frequency
pLevelAgg.Include(pDimLevels.Item(pDimLevels.Count - 1)) := True;
// Set the aggregation method
pLevelAgg.Operation := BasicAggregatorOperation.Count;
// Specify that non-aggregated data is not saved
pLevelAgg.PreserveExistingData := False;
// Add filter for aggregation dimension
pFilter := pMethod.Filter.Add(pDimModel);
// Keep only first six dictionary elements in aggregation
pFilterSelection := pDimInstance.CreateSelection;
For i := 0 To 5 Do
pFilterSelection.SelectElement(i, False);
End For;
pFilter.AggregationSelection := pFilterSelection;
// Add advanced filtering
pFilter.AdvancedFilter.Clear;
pAdvancedFilterCondition := pFilter.AdvancedFilter.Add;
// Specify that only the elements are aggregated, which
// value of the ISCAPITAL attribute is set to True
pAdvancedFilterCondition.Attribute := pDimModel.Attributes.FindById("ISCAPITAL");
pAdvancedFilterCondition.Operator_ := MsAdvancedFilterConditionOperator.Equal;
pAdvancedFilterCondition.Value := True;
// Save changes
(pModel As IMetabaseObject).Save;
End Sub UserProc;
After executing the example the model is configured to calculate matrix aggregation.
See also: