IPivot.AggregationElement

Синтаксис Fore

AggregationElement: Integer;

Синтаксис Fore.NET

AggregationElement: uinteger;

Описание

Свойство AggregationElement определяет элемент, по которому в матрице будут доступны агрегированные данные по фиксированным измерениям.

Комментарии

Способ агрегации данных при множественной отметке в фиксированных измерениях задается в свойстве IPivot.FixedElementsAggregation. Для сохранения агрегированных данных в результирующей матрице задайте в свойстве AggregationElement какой-либо отрицательный индекс элемента. Для получения агрегированных данных необходимо в координате матрицы в качестве элемента для последнего измерения задать указанный в AggregationElement индекс элемента.

Для проверки, произведена ли агрегация данных, используйте свойство IPivot.IsAggregationCalced.

Пример Fore

Для выполнения примера предполагается наличие экспресс-отчета с идентификатором «EXPRESS». Среди измерений источника имеется измерение с идентификатором «COUNTRY». В отчете данное измерение включено в список фиксированных.

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

Sub UserProc;
Var
    MB: IMetabase;
    Analyzer: IEaxAnalyzer;
    Pivot: IPivot;
    DimSel: IDimSelection;
Begin
    MB := MetabaseClass.Active;
    Analyzer := MB.ItemById("EXPRESS").Bind As IEaxAnalyzer;
    //Таблица с данными экспресс-отчета
    Pivot := Analyzer.Pivot;
    Pivot.FixedElementsAggregation := PivotAggregationOperation.None;
    //Выведем матрицу в окно консоли
    LogMatrix(Pivot.Matrix);
    Debug.WriteLine("=======================================================");
    Pivot.FixedElementsAggregation := PivotAggregationOperation.Sum;
    //Элемент, по которому будут доступны агрегированные данные
    Pivot.AggregationElement := -2;
    DimSel := Pivot.Selection.FindById("COUNTRY");
    DimSel.SelectElement(0False);
    DimSel.SelectElement(1False);
    DimSel.SelectElement(2False);
    //Выведем матрицу в окно консоли
    LogMatrix(Pivot.Matrix);
    //Проверим результат агрегации
    Debug.WriteLine("=======================================================");
    If Pivot.IsAggregationCalced Then
        Debug.WriteLine("Агрегация рассчитана")
    Else
        Debug.WriteLine("Агрегация не рассчитана");
    End If;
End Sub UserProc;

//Вывод матрицы в окно консоли
Sub LogMatrix(Matrix: IMatrix);
Var
    Iterator: IMatrixIterator;
    Coord: IMatrixCoord;
    Item: String;
    i: Integer;
Begin
    Iterator := Matrix.CreateIterator;
    Coord := Matrix.CreateCoord;
    Iterator.Move(IteratorDirection.First);
    Debug.WriteLine("Элементы:");
    While Iterator.Valid Do
        Iterator.PutCurrentPos(Coord);
        Item := "[";
        For i := 0 To Coord.Count - 1 Do
            If i > 0 Then
                Item := Item + ", ";
            End If;
            Item := Item + Coord.Item(i).ToString;
        End For;
        Item := Item + "] ";
        Item := Item + (Iterator.Value As Double).ToString;
        Debug.WriteLine(Item);
        Iterator.Move(IteratorDirection.Next);
    End While;
End Sub LogMatrix;

При выполнении примера в консоль среды разработки будет выведено две матрицы: матрица с исходными данными таблицы и матрица, полученная после агрегации при множественной отметке в фиксированном измерении «COUNTRY». Агрегированные значения будут сохранены по элементу «-2»

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Express;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Pivot;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Analyzer: IEaxAnalyzer;
    Pivot: IPivot;
    DimSel: IDimSelection;
Begin
    MB := Params.Metabase;
    Analyzer := MB.ItemById["EXPRESS"].Bind() As IEaxAnalyzer;
    //Таблица с данными экспресс-отчета
    Pivot := Analyzer.Pivot;
    Pivot.FixedElementsAggregation := PivotAggregationOperation.paoNone;
    //Выведем матрицу в окно консоли
    LogMatrix(Pivot.Matrix);
    System.Diagnostics.Debug.WriteLine("=======================================================");
    Pivot.FixedElementsAggregation := PivotAggregationOperation.paoSum;
    //Элемент, по которому будут доступны агрегированные данные
    Pivot.AggregationElement := -2 As UInteger;
    DimSel := Pivot.Selection.FindById("COUNTRY");
    DimSel.SelectElement(0False);
    DimSel.SelectElement(1False);
    DimSel.SelectElement(2False);
    //Выведем матрицу в окно консоли
    LogMatrix(Pivot.Matrix);
    //Проверим результат агрегации
    System.Diagnostics.Debug.WriteLine("=======================================================");
    If Pivot.IsAggregationCalced Then
        System.Diagnostics.Debug.WriteLine("Агрегация рассчитана")
    Else
        System.Diagnostics.Debug.WriteLine("Агрегация не рассчитана");
    End If;
End Sub;

//Вывод матрицы в окно консоли
Shared Sub LogMatrix(Matrix: IMatrix);
Var
    Iterator: IMatrixIterator;
    Coord: IMatrixCoord;
    Item: String;
    i: Integer;
Begin
    Iterator := Matrix.CreateIterator();
    Coord := Matrix.CreateCoord();
    Iterator.Move(IteratorDirection.itdFirst);
    System.Diagnostics.Debug.WriteLine("Элементы:");
    While Iterator.Valid Do
        Iterator.PutCurrentPos(Coord);
        Item := "[";
        For i := 0 To Coord.Count - 1 Do
            If i > 0 Then
                Item := Item + ", ";
            End If;
            Item := Item + Coord.Item[i].ToString();
        End For;
        Item := Item + "] ";
        Item := Item + (Iterator.Value As Double).ToString();
        System.Diagnostics.Debug.WriteLine(Item);
        Iterator.Move(IteratorDirection.itdNext);
    End While;
End Sub LogMatrix;

См. также:

IPivot