IEaxDataAreaHierarchies.PushChangesToDimInstance

Fore Syntax

PushChangesToDimInstance(S: IDimSelection; CD: ICustomDimension);

Fore.NET Syntax

PushChangesToDimInstance(S: Prognoz.Platform.Interop.Dimensions.IDimSelection;
                        CD: Prognoz.Platform.Interop.Dimensions.ICustomDimension);

Parameters

S. Dimension where alternative hierarchy is placed.

CD. Facts dimension.

Description

The PushChangesToDimInstance method applies changes accumulated in the facts dimension to the dimension with alternative hierarchy.

Comments

To add element from original hierarchy to facts dimension, use IEaxDataAreaHierarchies.AddExistingElement.

Fore Example

Executing the example requires that the repository contains an express report with the EXPRESS identifier containing table. Table dimensions must contain territory dimension and facts dimension.

Add links to the Dimensions, Express, Metabase, Pivot system assemblies.

Sub UserProc;
Var
    MB: IMetabase;
    Express: IEaxAnalyzer;
    Slice: IEaxDataAreaSlice;
    Sel: IDimSelection;
    Hiers: IEaxDataAreaHierarchies;
    HierKey, Elm, i: Integer;
    Hier: IEaxDataAreaHierarchy;
    CustDim: ICustomDimension;
    Ins: IDimInstance;
    Elms: IDimElements;
    ElmName: String;
Begin
    // Get repository
    MB := MetabaseClass.Active;
    // Get express report
    Express := MB.ItemById("EXPRESS").Edit As IEaxAnalyzer;
    // Get hierarchy collection
    Hiers := Express.DataArea.Hierarchies;
    // Check for automatic sorting
    If Not Hiers.IsAutoSort Then
        Hiers.IsAutoSort := True;
    End If;
    // Get data slice
    Slice := Express.DataArea.Slices.Item(0);
    // Get selection of territory dimension
    Sel := Express.Pivot.Selection.Item(3);
    // Add alternative hierarchy to dimension
    HierKey := Hiers.CreateKey(Slice.Key, Sel.Dimension.Key);
    Hier := Hiers.FindByKey(HierKey);
    If Hier = Null Then
        Hier := Hiers.Add(Slice, Sel, HierKey);
        CustDim := Hier.CustomDimension;
        // Clear facts dimension elements
        CustDim.Elements.Clear;
        // Apply changes from facts dimension to territory dimension
        Hiers.PushChangesToDimInstance(Sel, CustDim);
    Else
        CustDim := Hier.CustomDimension;
    End If;
    // Add selection elements from territory dimension to facts dimension
    Ins := Sel.Dimension;
    Elms := Ins.Elements;
    For i := 0 To Sel.SelectedCount - 1 Do
        Elm := Sel.Element(i);
        If Elm <> -1 Then
            ElmName := Elms.Name(Elm);
            Debug.WriteLine("Element name in selection - " + ElmName);
            Hiers.AddExistingElement(Ins, CustDim, Elm, ElmName);
        End If;
    End For;
    // Apply changes from facts dimension to territory dimension
    Hiers.PushChangesToDimInstance(Sel, CustDim);
    // Refresh and save changes
    Express.Pivot.Refresh;
    (Express As IMetabaseObject).Save;
End Sub UserProc;

After executing the example all changes from facts dimension will be applied to territory dimension: existing elements from facts dimension will be added to the territory dimension selection.

Fore.NET Example

The requirements and result of the Fore.NET Example execution match with those in the Fore Example.

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Express: IEaxAnalyzer;
    Slice: IEaxDataAreaSlice;
    Sel: IDimSelection;
    Hiers: IEaxDataAreaHierarchies;
    HierKey, Elm: uinteger;
    i: Integer;
    Hier: IEaxDataAreaHierarchy;
    CustDim: ICustomDimension;
    Ins: IDimInstance;
    Elms: IDimElements;
    ElmName: String;
Begin
    // Get repository
    MB := Params.Metabase;
    // Get express report
    Express := MB.ItemById["EXPRESS"].Edit() As IEaxAnalyzer;
    // Get hierarchy collection
    Hiers := Express.DataArea.Hierarchies;
    // Check for automatic sorting
    If Not Hiers.IsAutoSort Then
        Hiers.IsAutoSort := True;
    End If;
    // Get data slice
    Slice := Express.DataArea.Slices.Item[0];
    // Get selection of territory dimension
    Sel := Express.Pivot.Selection.Item[3];
    // Add alternative hierarchy to dimension
    HierKey := Hiers.CreateKey(Slice.Key, Sel.Dimension.Key);
    Hier := Hiers.FindByKey(HierKey);
    If Hier = Null Then
        Hier := Hiers.Add(Slice, Sel, HierKey, Sel);
        CustDim := Hier.CustomDimension;
        // Clear facts dimension elements
        CustDim.Elements.Clear();
        // Apply changes from facts dimension to territory dimension
        Hiers.PushChangesToDimInstance(Sel, CustDim);
    Else
        CustDim := Hier.CustomDimension;
    End If;
    // Add selection elements from territory dimension to facts dimension
    Ins := Sel.Dimension;
    Elms := Ins.Elements;
    For i := 0 To Sel.SelectedCount - 1 Do
        Elm := Sel.Element[i];
        If Elm <> -1 Then
            ElmName := Elms.Name[Elm];
            System.Diagnostics.Debug.WriteLine("Element name in selection - " + ElmName);
            Hiers.AddExistingElement(Ins, CustDim, Elm, ElmName);
        End If;
    End For;
    // Apply changes from facts dimension to territory dimension
    Hiers.PushChangesToDimInstance(Sel, CustDim);
    // Refresh and save changes
    Express.Pivot.Refresh();
    (Express As IMetabaseObject).Save();
End Sub;

See also:

IEaxDataAreaHierarchies