Создание многомерного расчета на сервере БД

Рассмотрим пример создания многомерного расчета на сервере БД с использованием языка Fore/Fore.NET. Для создания необходимо наличие в репозитории следующих объектов:

  1. Базы данных с идентификатором «DB»;

  2. Два стандартных куба с идентификаторами «STD_SOURCE» и «STD_DESTINATION»;

  3. Кубы должны содержать в своей структуре календарное измерение с идентификатором «CALENDAR».

Указанный ниже пример создает в корневой папке репозитория новый объект - Многомерный расчет на сервере БД и производит настройку его параметров:

Для выполнения примеров добавьте ссылки на системные сборки: Cubes, Db, Dimensions, Metabase. Для Fore.NET пример также пропишите соответствующие строки Imports.

Пример Fore

Sub CreateMDCalculation;
Var
    MB: IMetabase;
    CrInfo: IMetabaseObjectCreateInfo;
    MObj: IMetabaseObject;
    MDCalc: IMDCalculation;
    Cube: ICubeModel;
    Source: IMDCalculationSource;
    Destination: IMDCalculationDestination;
    FormulasTable: IMDCalculationFormulasTable;
    TableForFormulas: ITable;
    SourceSlice, DestinationSlice: IMDCalculationSlice;
Begin
    MB := MetabaseClass.Active;
    CrInfo := MB.CreateCreateInfo;
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MDCALCULATION;
    CrInfo.Id := "New_MDCalculation";
    CrInfo.Name := "Многомерный расчет на сервере";
    CrInfo.Parent := MB.Root;
    MObj := MB.CreateObject(CrInfo).Edit;
    MDCalc := MObj As IMDCalculation;
    //Указываем БД
    MDCalc.Database := MB.ItemById("DB").Bind As IDatabase;
    //Указываем куб-источник
    Cube := MB.ItemById("STD_SOURCE").Bind As ICubeModel;
    Source := MDCalc.Sources.AddCube(Cube);
    SourceSlice := Source.Slices.FindById("CALENDAR");
    SourceSlice.FixType := MDCalculationSliceFixType.Fixed;
    //Указываем куб-назначение
    Destination := MDCalc.Destination;
    Destination.SetCube(MB.ItemById("STD_DESTINATION").Bind As ICubeModel);
    //Фиксируем календарные измерения
    DestinationSlice := Destination.Slices.FindById("CALENDAR");
    DestinationSlice.FixType := MDCalculationSliceFixType.Fixed;
    SourceSlice.Fixed.Mapping := DestinationSlice;
    //Создаем новую таблицу формул
    FormulasTable := MDCalc.FormulasTable;
    TableForFormulas := FormulasTable.Create;
    FormulasTable.Attach(TableForFormulas);
    MObj.Save;
End Sub CreateMDCalculation;

Пример Fore.NET

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Metabase;

Sub CreateMDCalculation(MB: IMetabase);
Var
    CrInfo: IMetabaseObjectCreateInfo;
    MObj: IMetabaseObject;
    MDCalc: IMDCalculation;
    Cube: ICubeModel;
    Source: IMDCalculationSource;
    Destination: IMDCalculationDestination;
    FormulasTable: IMDCalculationFormulasTable;
    TableForFormulas: ITable;
    SourceSlice, DestinationSlice: IMDCalculationSlice;
Begin
    CrInfo := MB.CreateCreateInfo();
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MDCALCULATION As Integer;
    CrInfo.Id := "New_MDCalculation";
    CrInfo.Name := "Многомерный расчет на сервере";
    CrInfo.Parent := MB.Root;
    MObj := MB.CreateObject(CrInfo).Edit();
    MDCalc := MObj As IMDCalculation;
    //Указываем БД
    MDCalc.Database := MB.ItemById["DB"].Bind() As IDatabase;
    //Указываем куб-источник
    Cube := MB.ItemById["STD_SOURCE"].Bind() As ICubeModel;
    Source := MDCalc.Sources.AddCube(Cube);
    SourceSlice := Source.Slices.FindById("CALENDAR");
    SourceSlice.FixType := MDCalculationSliceFixType.csftFixed;
    //Указываем куб-назначение
    Destination := MDCalc.Destination;
    Destination.SetCube(MB.ItemById["STD_DESTINATION"].Bind() As ICubeModel);
    //Фиксируем календарные измерения
    DestinationSlice := Destination.Slices.FindById("CALENDAR");
    DestinationSlice.FixType := MDCalculationSliceFixType.csftFixed;
    SourceSlice.Fixed.Mapping := DestinationSlice;
    //Создаем новую таблицу формул
    FormulasTable := MDCalc.FormulasTable;
    TableForFormulas := FormulasTable.Create(Null);
    FormulasTable.Attach(TableForFormulas);
    MObj.Save();
End Sub;

См. также:

Примеры