IStandardCubeServerAggregationDimension.Position

Синтаксис

Position: Integer;

Описание

Свойство Position определяет позицию измерения в группе.

Комментарии

Нумерация позиций в группе сквозная и начинается с нуля.

Пример

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

Добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    StandCub: IStandardCube;
    CubeInst: ICubeInstance;
    CubeStandInst: IStandardCubeInstance;
    Aggregator: IStandardCubeServerAggregator;
    StdDim: IStandardCubeDimension;
    StdDims: IStandardCubeDimensions;
    Aggregation: IStandardCubeServerAggregation;
    FactDimension: IDimInstance;
    Iter: IDimIterator;
    DimsEx: IStandardCubeServerAggregationDimensionsEx;
    AggDim: IStandardCubeServerAggregationDimension;
    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(NullAs 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;

    // Определение измерений для агрегации
    DimsEx := Aggregator.Dimensions;
    AggDim := DimsEx.Item(0);
    AggDim.GroupIndex := 0;
    AggDim.Position := 0;
    AggDim.Others := True;
    AggDim := DimsEx.Item(1);
    AggDim.GroupIndex := 1;
    AggDim.Position := 0;
    AggDim.Totals := 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 UserProc;

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

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

См. также:

IStandardCubeServerAggregationDimension