IStandardCubeServerAggregation.CustomAggregateFunction

Синтаксис

CustomAggregateFunction: String;

Описание

Свойство CustomAggregateFunction определяет пользовательский метод расчета агрегации.

Комментарии

Данное свойство учитывается, если значение свойства IStandardCubeServerAggregation.AggregationType = CubeFactBindingAggregationType.Custom.

Пример

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

Sub UserProc;
Var
    MB: IMetabase;
    CubeStdInst: IStandardCubeInstance;
    DestInst: ICubeInstanceDestination;
    Aggregator: IStandardCubeServerAggregator;
    StdDims: IStandardCubeDimensions;
    StdDim: IStandardCubeDimension;
    Aggregation: IStandardCubeServerAggregation;
    FactDimension: IDimInstance;
    Iter: IDimIterator;
    DimsEx: IStandardCubeServerAggregationDimensionsEx;
    AggDim: IStandardCubeServerAggregationDimension;
    MatrDS: IMatrixDataSource;
    DimSS: IDimSelectionSet;
    DimS: IDimSelection;
    Matr: IMatrix;
    Coord: IMatrixCoord;
    MatrIter: IMatrixIterator;
    i: Integer;
    s: String;
Begin

    MB := MetabaseClass.Active;
    CubeStdInst := MB.ItemById("OBJ_CUBE").Open(NullAs IStandardCubeInstance;
    DestInst := (CubeStdInst As ICubeInstance).Destinations.DefaultDestination;
    StdDims := DestInst.Dimensions As IStandardCubeDimensions;

    // Настройка метода агрегации
    Aggregator := CubeStdInst.CreateAggregator;
    FactDimension := (DestInst.DestinationModel As IStandardCubeDestination).FactDimension.OpenDimension;
    Iter := FactDimension.Elements.Elements.Iterator;
    Iter.First;
    While Iter.Next Do
        Aggregation := Aggregator.Aggregations.Add;
        Aggregation.AggregationType := CubeFactBindingAggregationType.Custom;
        Aggregation.CustomAggregateFunction := "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 := DestInst As IMatrixDataSource;
    DimSS := MatrDS.CreateDimSelectionSet;
    For Each DimS In DimSS Do
        DimS.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;

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

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

См. также:

IStandardCubeServerAggregation