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