KeyUnique: Boolean;
KeyUnique: Boolean;
Свойство KeyUnique определяет признак проверки уникальности ключей отметок, входящих в коллекцию.
Допустимые значения:
True. При добавлении в коллекцию нового справочника осуществляется проверка на его наличие в отметке. Если справочник уже добавлен, то повторного добавления не производится.
False. При добавлении в коллекцию нового справочника не осуществляется проверка на его наличие в отметке.
Установка свойству значения False позволяет добавить в коллекцию один и тот же справочник несколько раз. Это может потребоваться, если предполагается использование одного справочника но с различными альтернативными иерархиями. Подобное поведение используется при работе с кубами ADOMD.
Для выполнения примера предполагается наличие в репозитории каталога ADOMD с идентификатором «ADOMDTest», в этом каталоге имеется куб ADOMD - «SALES». В структуре куба присутствует измерение на базе справочников ADOMD с идентификаторами «PRODUCTS», для которого создано несколько альтернативных иерархий.
Sub UserProc;
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Sel, Sel2: IDimSelection;
Hiers: IDimHierarchiesInstance;
DimSetup: ICubeExecuteDimSetup;
Exec: ICubeInstanceDestinationExecutor;
AdoExec: IAdoMdCubeExecutor;
Mat: IMatrix;
Begin
MB := MetabaseClass.Active;
CubeInst := MB.ItemByIdNamespace("SALES", MB.GetObjectKeyById("ADOMDTest")).Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet;
//Отмена проверки уникальности отметок
(SelSet As IDimSelectionSet2).KeyUnique := False;
//Отметка измерения
Sel := SelSet.FindById("PRODUCTS");
//Ультернативные иерархии
Hiers := Sel.Dimension.Hierarchies;
//Добавление отметки измерения еще раз
Sel2 := SelSet.Add(Sel.Dimension);
//Установка альтернативной иерархии для второго экземпляра отметки измерения
Sel2.Hierarchy := Hiers.FindByKey(6);
//Установка отметок
For Each Sel In SelSet Do
If Sel.Dimension.Ident = "PRODUCTS" Then
Sel.SelectAll;
DimSetup := CubeClass.SelectionSetup(Sel);
If DimSetup <> Null Then
DimSetup.GroupIndex := 1;
End If;
Else
Sel.SelectElement(1, False);
DimSetup := CubeClass.SelectionSetup(Sel);
If DimSetup <> Null Then
DimSetup.GroupIndex := 2;
End If;
End If
End For;
//Вычисление
Exec := Dest.CreateExecutor;
AdoExec := Exec As IAdoMdCubeExecutor;
Exec.PrepareExecute(SelSet);
Exec.PerformExecute;
Mat := Exec.Matrix;
End Sub UserProc;
При выполнении примера будет осуществлена подготовка и расчет указанного куба ADOMD. При подготовке отметки для расчета в коллекцию отметок измерение «PRODUCTS» будет включено два раза. Для второго экземпляра будет применена альтернативная иерархия. Отметка по каждому экземпляру измерения «PRODUCTS» будет выставлена максимальная. Результат расчета будет доступен в переменной «Mat».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.AdoMd;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
CubeInst: ICubeInstance;
Dest: ICubeInstanceDestination;
SelSet: IDimSelectionSet;
Sel, Sel2: IDimSelection;
Hiers: IDimHierarchiesInstance;
DimSetup: ICubeExecuteDimSetup;
CubeCls: CubeClass = New CubeClassClass();
Exec: ICubeInstanceDestinationExecutor;
AdoExec: IAdoMdCubeExecutor;
Mat: IMatrix;
Begin
MB := Params.Metabase;
CubeInst := MB.ItemByIdNamespace["SALES", MB.GetObjectKeyById("ADOMDTest")].Open(Null) As ICubeInstance;
Dest := CubeInst.Destinations.DefaultDestination;
SelSet := Dest.CreateDimSelectionSet();
//Отмена проверки уникальности отметок
(SelSet As IDimSelectionSet2).KeyUnique := False;
//Отметка измерения
Sel := SelSet.FindById("PRODUCTS");
//Ультернативные иерархии
Hiers := Sel.Dimension.Hierarchies;
//Добавление отметки измерения еще раз
Sel2 := SelSet.Add(Sel.Dimension);
//Установка альтернативной иерархии для второго экземпляра отметки измерения
Sel2.Hierarchy := Hiers.FindByKey(6);
//Установка отметок
For Each Sel In SelSet Do
If Sel.Dimension.Ident = "PRODUCTS" Then
Sel.SelectAll();
DimSetup := CubeCls.SelectionSetup[Sel];
If DimSetup <> Null Then
DimSetup.GroupIndex := 1;
End If;
Else
Sel.SelectElement(1, False);
DimSetup := CubeCls.SelectionSetup[Sel];
If DimSetup <> Null Then
DimSetup.GroupIndex := 2;
End If;
End If
End For;
//Вычисление
Exec := Dest.CreateExecutor();
AdoExec := Exec As IAdoMdCubeExecutor;
Exec.PrepareExecute(SelSet);
Exec.PerformExecute(False);
Mat := Exec.Matrix;
End Sub;
См. также: