На языке Fore приведены примеры использования табличного справочника НСИ в качестве измерения стандартного куба.
Для выполнения примеров предполагается наличие репозитория НСИ с идентификатором «RDS_REPO», базы данных с идентификатором «DB» и стандартного куба с идентификатором «CUBE».
Результат выполнения примеров: в репозитории «RDS_REPO» будет создан табличный справочник НСИ, содержащий уникальный ключ. Затем данный справочник будет добавлен в качестве измерения в стандартный куб «CUBE». Привязка осуществляется по первичному индексу первого блока измерения.
Добавьте ссылки на системные сборки «Metabase», «Cubes», «Rds», «Dimensions» и «Db».
Sub UserProc;
Var
Mb: IMetabase;
Inf: IMetabaseObjectCreateInfo;
Des: IMetabaseObjectDescriptor;
RdsDict: IRdsDictionary;
UniqKey: IRdsUniqueKey;
Cube: IStandardCube;
CubeDims: IStandardCubeDimensions;
Dim: IDimensionModel;
StdDim: IStandardCubeDimension;
i: Integer;
StDataset: IStandardCubeDataset;
StDimBind: IStandardCubeDimensionBinding;
Index: IDimIndex;
Attr: IDimAttribute;
Field: IDatasetModelField;
Dataset: IDatasetModel;
Begin
Mb := MetabaseClass.Active;
// Создаем табличный справочник НСИ.
Inf := Mb.CreateCreateInfo;
Inf.ClassId := MetabaseObjectClass.KE_CLASS_METADICTIONARYRDS;
Inf.Name := Inf.DefaultName;
Inf.Parent := Mb.ItemById("RDS_REPO");
Inf.KeepEdit := True;
Des := Mb.CreateObject(Inf);
RdsDict := Des As IRdsDictionary;
RdsDict.Database := Mb.ItemById("DB").Bind As IDatabase;
// Создаем уникальный ключ справочника
UniqKey := RdsDict.UniqueKeys.Add;
UniqKey.Id := "UniqKey_1";
UniqKey.Name := "Уникальный ключ";
UniqKey.Contains(RdsDict.Attributes.Key) := True;
(RdsDict As IMetabaseObject).Save;
// Задаем этот справочник в качестве измерения стандартного куба.
// Привязываем по первичным индексам.
Cube := Mb.ItemById("CUBE").Edit As IStandardCube;
CubeDims := Cube.Dimensions;
Dim := Des As IDimensionModel;
StdDim := CubeDims.Add(Dim);
Index := Dim.Indexes.PrimaryIndex;
Attr := Index.Attributes.Item(0);
For i := 0 To Cube.Datasets.Count - 1 Do
StDataset := Cube.Datasets.Item(i);
StDimBind := StdDim.Binding(StDataset);
Index := Dim.Indexes.PrimaryIndex;
StDimBind.Index := Index;
Dataset := StDataset.Dataset;
Field := Dataset.Fields.Item(0);
StDimBind.Binding(Attr).AsString := (Dataset As IMetabaseObject).Id + "." + Field.Id;
End For;
(Cube As IMetabaseObject).Save;
End Sub UserProc;
См. также: