ExcludeDimensions(AggregationOperation: BasicAggregatorOperation; ExcludedDimensions: IDimensionSet; [OpenSelection: IDimSelectionSet = Null]);
AggregationOperation. Метод расчёта агрегации;
ExcludedDimensions. Измерения, для которых применяется агрегация;
OpenSelection. Отметка, по которой будет осуществляться расчёт куба.
Метод ExcludeDimensions исключает измерения из куба для получения свёрточной матрицы.
Для проверки возможности использования механизма свёрток для источника используйте метод IInMemManager.CanExcludeDimensions.
Для выполнения примера в репозитории предполагается наличие в репозитории куба с идентификатором CUBE, у которого есть минимум два измерения. Для куба включено использование свёрток, и он прокеширован.
Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.
Sub UserProc;
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
sFactory: IDimSelectionsetFactory;
Sels: IDimSelectionSet;
sel: IDimSelection;
ExcludedDims: IDimensionSet;
Exec: ICubeInstanceDestinationExecutor;
MatrExec: IMatrixDataSourceExecutor;
InMem: IInMemManager;
matr: IMatrix;
Begin
MB := MetabaseClass.Active;
// Открытие куба и получение представления по умолчанию
CubeInst := MB.ItemById("CUBE").Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
// Получение отметки
Sels := Dest.CreateDimSelectionSet;
For Each sel In Sels Do
sel.SelectAll;
End For;
// Настройки для расчёта
MatrExec := (Dest As IMatrixDataSource).CreateExecutor;
Exec := MatrExec As ICubeInstanceDestinationExecutor;
// Инициализация менеджера для работы с кешем
InMem := New InMemManager.Create;
// Проверка возможности использования механизма свёрток
If InMem.CanExcludeDimensions(Exec, Sels) Then
// Создание набора измерений, которые будут фиксированы и исключены из расчета
sFactory := New DimSelectionSetFactory.Create;
ExcludedDims := sFactory.CreateDimensionSet;
// Добавление первых двух измерений куба
ExcludedDims.Add(Sels.Item(0).Dimension.Dimension);
ExcludedDims.Add(Sels.Item(1).Dimension.Dimension);
// Исключение выбранных измерений с агрегацией суммированием
Exec.ExcludeDimensions(BasicAggregatorOperation.Sum, ExcludedDims, Sels);
Else
Debug.WriteLine("Невозможно использовать механизм исключения измерений");
End If;
// Расчёт матрицы со сверткой
matr := matrExec.Execute(sels);
Debug.WriteLine("Выполнение свёртки, точек в матрице: " + matr.Count.ToString);
// Расчёт матрицы без свёртки
Exec := Dest.CreateExecutor;
Exec.PrepareExecute(Sels);
Exec.PerformExecute;
matr := Exec.Matrix;
Debug.WriteLine("Всего точек в кубе: " + matr.Count.ToString);
End Sub UserProc;
При выполнении примера будет выполнена проверка возможности использования свётрок, будут исключены первые два измерения и получена свёртка.
См. также: