IDimSelection.AdditionalHierarchy

Синтаксис Fore

AdditionalHierarchy: IDimHierarchiesInstance;

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

AdditionalHierarchy: Prognoz.Platform.Interop.Dimensions.IDimHierarchiesInstance;

Описание

Свойство AdditionalHierarchy возвращает объект для работы с альтернативной иерархией.

Комментарии

Альтернативная иерархия - иерархия любого другого справочника, связанная с иерархией основного справочника для сопоставления элементов, или пользовательская иерархия, созданная при редактировании измерений или добавлении нового вычисляемого элемента.

Пример Fore

Для выполнения примера в репозитории предполагается наличие табличных справочников с идентификаторами «DIC_RF_AH» и «FACTS_AH». Справочник «DIC_RF_AH» рассматривается в качестве основного, а «FACTS_AH» - в качестве справочника для альтернативной иерархии.

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

Sub UserProc;
Var
    Mb: IMetabase;
    OriginalModelObj: IMetabaseObject;
    OriginalModel, AlternateModel: IDimensionModel;
    Hierarchies: IDimHierarchies;
    Alt_Hierarchy: IDimHierarchy;
    Origin_Attributes, Alt_Attributes: IDimAttributes;
    Origin_Attr, Alt_Attr: IDimAttribute;
    dimInstance: IDimInstance;
    dimSel: IDimSelection;
    i: Integer;
Begin
    // Получаем репозиторий
    Mb := MetabaseClass.Active;
    // Получаем табличный справочник
    OriginalModelObj := Mb.ItemById("DIC_RF_AH").Edit;
    OriginalModel := OriginalModelObj As IDimensionModel;
    // Получаем источник альтернативной иерархии
    AlternateModel := Mb.ItemById("FACTS_AH").Bind As IDimensionModel;
    Hierarchies := OriginalModel.Hierarchies;
    // Определяем индекс, содержащий ключи элементов для альтернативной иерархии
    Hierarchies.OriginalIndex := OriginalModel.Indexes.PrimaryIndex;
    // Добавляем источник альтернативной иерархии
    Alt_Hierarchy := Hierarchies.Add(AlternateModel);
    // Определяем индекс, содержащий ключи для сопоставления элементов основного и альтернативного справочника
    Alt_Hierarchy.SourceIndex := AlternateModel.Indexes.PrimaryIndex;
    Origin_Attributes := OriginalModel.Attributes;
    Alt_Attributes := AlternateModel.Attributes;
    // Связываем атрибуты оригинального измерения с атрибутами из источника альтернативной иерархии по идентификатору
    For i := 0 To Origin_Attributes.Count - 1 Do
        Origin_Attr := Origin_Attributes.FindById("NAME");
        Alt_Attr := Alt_Attributes.FindById("NAME");
        Alt_Hierarchy.SourceAttribute(Origin_Attr) := Alt_Attr;
    End For;
    OriginalModelObj.Save;
    // Изменяем основную иерархию на альтернативную
    dimInstance := OriginalModelObj.Open(NullAs IDimInstance;
    dimSel := dimInstance.CreateSelection;
    dimSel.InitAdditionalHierarchy(Alt_Hierarchy);
    dimSel.Hierarchy := dimSel.AdditionalHierarchy;
    // Сохраняем справочник
    OriginalModelObj.Save;
End Sub UserProc;

В результате выполнения примера в основной справочник будет добавлена альтернативная иерархия.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Dimensions;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    OriginalModelObj: IMetabaseObject;
    OriginalModel, AlternateModel: IDimensionModel;
    Hierarchies: IDimHierarchies;
    Alt_Hierarchy: IDimHierarchy;
    Origin_Attributes, Alt_Attributes: IDimAttributes;
    Origin_Attr, Alt_Attr: IDimAttribute;
    dimInstance: IDimInstance;
    dimSel: IDimSelection;
    i: Integer;
Begin
    // Получаем репозиторий
    Mb := Params.Metabase;
    // Получаем табличный справочник
    OriginalModelObj := Mb.ItemById["DIC_RF_AH"].Edit();
    OriginalModel := OriginalModelObj As IDimensionModel;
    // Получаем источник альтернативной иерархии
    AlternateModel := Mb.ItemById["FACTS_AH"].Bind() As IDimensionModel;
    Hierarchies := OriginalModel.Hierarchies;
    // Определяем индекс, содержащий ключи элементов для альтернативной иерархии
    Hierarchies.OriginalIndex := OriginalModel.Indexes.PrimaryIndex;
    // Добавляем источник альтернативной иерархии
    Alt_Hierarchy := Hierarchies.Add(AlternateModel);
    // Определяем индекс, содержащий ключи для сопоставления элементов основного и альтернативного справочника
    Alt_Hierarchy.SourceIndex := AlternateModel.Indexes.PrimaryIndex;
    Origin_Attributes := OriginalModel.Attributes;
    Alt_Attributes := AlternateModel.Attributes;
    // Связываем атрибуты оригинального измерения с атрибутами из источника альтернативной иерархии по идентификатору
    For i := 0 To Origin_Attributes.Count - 1 Do
        Origin_Attr := Origin_Attributes.FindById("NAME");
        Alt_Attr := Alt_Attributes.FindById("NAME");
        Alt_Hierarchy.SourceAttribute[Origin_Attr] := Alt_Attr;
    End For;
    OriginalModelObj.Save();
    // Изменяем основную иерархию на альтернативную
    dimInstance := OriginalModelObj.Open(NullAs IDimInstance;
    dimSel := dimInstance.CreateSelection();
    dimSel.InitAdditionalHierarchy(Alt_Hierarchy);
    dimSel.Hierarchy := dimSel.AdditionalHierarchy;
    // Сохраняем справочник
    OriginalModelObj.Save();
End Sub;

См. также:

IDimSelection