Рассмотрим пример создания загрузчика данных с использованием языка Fore/Fore.NET. Для выполнения примера необходимо наличие в репозитории двух кубов с идентификаторами "Cube_1" и "Cube_2". Кубы имеют в своей структуре какие-либо измерения, основанные на одних и тех же справочниках.
Указанный ниже пример создает в корневой папке репозитория новый объект - Загрузчик данных и производит настройку его параметров:
Задается куб-источник и куб-приемник;
Связываются общие измерения и фиксируются измерения, которые есть только в кубе-источнике.
Для выполнения примеров добавьте ссылки на системные сборки: Cubes, Dimensions, Matrix, Metabase. Для Fore.NET пример также пропишите соответствующие строки Imports.
Sub CreateCubeLoader;
Var
MB: IMetabase;
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
CubeDestination: ICubeModelDestination;
CLoader: ICubeLoader;
FixInfo: ICubeLoaderFixInfo;
DimFix: ICubeLoaderDimensionFix;
DimsSource: ICubeModelDimensions;
Dim, Dim1: IDimensionModel;
MapInfo: ICubeLoaderMapInfo;
MapItem: ICubeLoaderMapItem;
i: Integer;
Begin
MB := MetabaseClass.Active;
CrInfo := Mb.CreateCreateInfo;
CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_CUBELOADER;
CrInfo.Id := "New_Cube_Loader";
CrInfo.Name := "Загрузчик данных";
CrInfo.Parent := MB.Root;
MObj := Mb.CreateObject(CrInfo).Edit;
CLoader := MObj As ICubeLoader;
//Куб-источник
CubeDestination := (MB.ItemById("Cube_1").Bind As ICubeModel).Destinations.DefaultDestination;
CLoader.Source := CubeDestination;
//Измерения куба-источника, среди которых будут искаться измерения куба-приемника для связи
DimsSource := CubeDestination.Dimensions;
//Куб-приемник
CubeDestination := (MB.ItemById("Cube_2").Bind As ICubeModel).Destinations.DefaultDestination;
CLoader.Destination := CubeDestination;
//Привязка одинаковых измерений
MapInfo := CLoader.MapInfo;
For i := 0 To MapInfo.Count - 1 Do
MapItem := MapInfo.Item(i);
Dim := MapItem.Dimension;
Dim1 := DimsSource.FindById((Dim As IMetabaseObject).Id);
If Dim1 <> Null Then
MapItem.MapDimension := Dim1;
MapItem.MapIndex := Dim1.Indexes.PrimaryIndex;
MapItem.DimIndex := Dim.Indexes.PrimaryIndex;
MapItem.Method := CubeLoaderMapMethod.ByIndex;
End If;
End For;
//Фиксация оставшихся измерений куба-источника
FixInfo := CLoader.FixInfo;
For Each DimFix In CLoader.FixInfo Do
DimFix.Operation := BasicAggregatorOperation.Sum;
DimFix.Selection.SelectAll;
End For;
MObj.Save;
End Sub CreateCubeLoader;
Sub CreateCubeLoader(MB: IMetabase);
Var
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
CubeDestination: ICubeModelDestination;
CLoader: ICubeLoader;
FixInfo: ICubeLoaderFixInfo;
DimFix: ICubeLoaderDimensionFix;
DimsSource: ICubeModelDimensions;
Dim, Dim1: IDimensionModel;
MapInfo: ICubeLoaderMapInfo;
MapItem: ICubeLoaderMapItem;
i: Integer;
Begin
CrInfo := Mb.CreateCreateInfo();
CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_CUBELOADER As Integer;
CrInfo.Id := "New_Cube_Loader";
CrInfo.Name := "Загрузчик данных";
CrInfo.Parent := MB.Root;
MObj := Mb.CreateObject(CrInfo).Edit();
CLoader := MObj As ICubeLoader;
//Куб-источник
CubeDestination := (MB.ItemById["Cube_1"].Bind() As ICubeModel).Destinations.DefaultDestination;
CLoader.Source := CubeDestination;
//Измерения куба-источника, среди которых будут искаться измерения куба-приемника для связи
DimsSource := CubeDestination.Dimensions;
//Куб-приемник
CubeDestination := (MB.ItemById["Cube_2"].Bind() As ICubeModel).Destinations.DefaultDestination;
CLoader.Destination := CubeDestination;
//Привязка измерений
MapInfo := CLoader.MapInfo;
For i := 0 To MapInfo.Count - 1 Do
MapItem := MapInfo.Item[i];
Dim := MapItem.Dimension;
Dim1 := DimsSource.FindById((Dim As IMetabaseObject).Id);
If Dim1 <> Null Then
MapItem.MapDimension := Dim1;
MapItem.MapIndex := Dim1.Indexes.PrimaryIndex;
MapItem.DimIndex := Dim.Indexes.PrimaryIndex;
MapItem.Method := CubeLoaderMapMethod.lmmByIndex;
End If;
End For;
//Фиксация измерений
FixInfo := CLoader.FixInfo;
For Each DimFix In CLoader.FixInfo Do
DimFix.Operation := BasicAggregatorOperation.baoSum;
DimFix.Selection.SelectAll();
End For;
MObj.Save();
End Sub;
См. также: