IStandardCubeServerAggregator.DimensionSets

Синтаксис

DimensionSets: IStandardCubeServerDimensionSets;

Описание

Свойство DimensionSets возвращает группы измерений, по которым будет рассчитываться агрегация.

Комментарии

Свойство является устаревшим, используйте IStandardCubeServerAggregator.Dimensions.

Если необходимо рассчитать итоги только по столбцам или только по строкам, то следует использовать одну группу измерений. Если нужны итоги и по столбцам и по строкам, то следует использовать две группы измерений.

Пример

Для выполнения примера предполагается наличие в репозитории стандартного куба с идентификатором «OBJ_CUBE». В данном кубе должно присутствовать два измерения.

Sub Main;

Var

MB: IMetabase;

MObj: IMetabaseObject;

StandCub: IStandardCube;

CubeInst: ICubeInstance;

CubeStandInst: IStandardCubeInstance;

Aggregator: IStandardCubeServerAggregator;

StdDim: IStandardCubeDimension;

StdDims: IStandardCubeDimensions;

Aggregation: IStandardCubeServerAggregation;

FactDimension: IDimInstance;

Iter: IDimIterator;

DimSet: IStandardCubeServerDimensionSet;

AggDims: IStandardCubeServerAggregationDimensions;

MatrDS: IMatrixDataSource;

DimSS: IDimSelectionSet;

Matr: IMatrix;

Coord: IMatrixCoord;

i: Integer;

MatrIter: IMatrixIterator;

s: String;

Begin

MB := MetabaseClass.Active;

MObj := MB.ItemById("OBJ_CUBE").Bind;

StandCub := MObj As IStandardCube;

CubeInst := MObj.Open(Null) As ICubeInstance;

CubeStandInst := CubeInst As IStandardCubeInstance;

StdDims := StandCub.Dimensions;

 

// Настройка метода агрегации

Aggregator := CubeStandInst.CreateAggregator;

FactDimension := StandCub.FactDimension.OpenDimension;

Iter := FactDimension.Elements.Elements.Iterator;

Iter.First;

While Iter.Next Do

Aggregation := Aggregator.Aggregations.Add;

Aggregation.AggregationType := CubeFactBindingAggregationType.Sum;

Aggregation.FactKey := FactDimension.Indexes.PrimaryIndex.IndexAttributesValues(Iter.Element);

End While;

 

// Определение измерений для агрегации

DimSet := Aggregator.DimensionSets.Add;

DimSet.CalcOther := True;

StdDim := StdDims.Item(1);

AggDims := DimSet.Dimensions;

AggDims.Add(StdDim);

AggDims.CalcOther(0) := True;

DimSet := Aggregator.DimensionSets.Add;

DimSet.CalcTotal := True;

StdDim := StdDims.Item(2);

AggDims := DimSet.Dimensions;

AggDims.Add(StdDim);

AggDims.CalcTotal(0) := True;

 

// Отметка для расчета агрегации

MatrDS := CubeInst.Destinations.DefaultDestination As IMatrixDataSource;

DimSS := MatrDS.CreateDimSelectionSet;

For i := 0 To DimSS.Count - 1 Do

DimSS.Item(i).SelectAll;

End For;

 

// Расчет агрегации

Matr := Aggregator.Execute(DimSS);

 

// Вывод результатов агрегации

MatrIter := Matr.CreateIterator;

MatrIter.Move(IteratorDirection.First);

If MatrIter.Valid Then

For i := 0 To StdDims.Count - 1 Do

StdDim := StdDims.Item(i);

If StdDim.FactDimension Then

Debug.Write("Факт   ");

Else

Debug.Write(StdDim.OpenDimension.Name + "  ");

End If;

End For;

Debug.Write("Агрегация  ");

Debug.WriteLine("Значение");

 

Coord := Matr.CreateCoord;

While MatrIter.Valid Do

MatrIter.PutCurrentPos(Coord);

s := "";

For i := 0 To Coord.Count - 1 Do

s := s + Coord.Item(i).ToString + "       ";

End For;

s := s + "= " + MatrIter.Value;

Debug.WriteLine(s);

MatrIter.Move(IteratorDirection.Next);

End While;

Else

Debug.WriteLine("Данные отсутствуют");

End If;

End Sub Main;

После выполнения примера для фактов куба будет рассчитана сумма по измерениям. Матрица расчета будет выведена в окно консоли.

Смотреть результаты

См. также:

IStandardCubeServerAggregator