Data: IDatasetModel;
Свойство Data определяет источник данных, содержащий список элементов используемых при составлении формул с возможностью суммирования.
Для выполнения примера предполагается наличие в репозитории базы данных с идентификатором «MDBD», а так же двух стандартных кубов «CUBE_INPUT» и «CUBE_OUTPUT». Данные кубы основаны на таблицах, хранящихся в данной базе данных. В каждом кубе имеется два измерения: 1) Календарное измерение - будет зафиксировано; 2) Измерение, основанное на табличном справочнике - по элементам данного измерения будет настроено суммирование.
Sub Main;
Var
MB: IMetabase;
CrInfo: IMetabaseObjectCreateInfo;
MObj: IMetabaseObject;
MDCalc: IMDCalculation;
Cube: ICubeModel;
Source: IMDCalculationSource;
Slices: IMDCalculationSlices;
Slice: IMDCalculationSlice;
FreeSlice: IMDCalculationSliceFree;
FixedSlice: IMDCalculationSliceFixed;
Sum: IMDCalculationSliceSumm;
Destination: IMDCalculationDestination;
FormulasTable: IMDCalculationFormulasTable;
TableForFormulas: ITable;
Begin
MB := MetabaseClass.Active;
CrInfo := MB.CreateCreateInfo;
CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MDCALCULATION;
CrInfo.Id := "MDCALC_1";
CrInfo.Name := "Многомерный расчет на сервере";
CrInfo.Parent := Null;
MObj := MB.CreateObject(CrInfo).Edit;
MDCalc := MObj As IMDCalculation;
//Добавлем БД
MDCalc.Database := MB.ItemById("MDBD").Bind As IDatabase;
//Указываю куб-источник
Cube := MB.ItemById("CUBE_INPUT").Bind As ICubeModel;
Source := MDCalc.Sources.AddCube(Cube);
Slices := Source.Slices;
//Календарное измерение - фиксируется
Slice := Slices.Item(0);
Slice.FixType := MDCalculationSliceFixType.Fixed;
FixedSlice := Slice.Fixed;
//Второе измерение, по элементам которого будет осуществляться суммирование
Slice := Slices.Item(1);
FreeSlice := Slice.Free;
Sum := FreeSlice.Summ;
Sum.Data := (FreeSlice.Dimension As IStandardDimension).Blocks.Item(0).Dataset;
Sum.KeyFields := "ID";
Sum.LookupFields := "PARENTID";
Sum.Enabled := True;
//Указываем куб-назначение
Destination := MDCalc.Destination;
Destination.SetCube(MB.ItemById("CUBE_OUTPUT").Bind As ICubeModel);
Slices := Destination.Slices;
//Календарное измерение - фиксируется
Slice := Slices.Item(0);
Slice.FixType := MDCalculationSliceFixType.Fixed;
FixedSlice.Mapping := Slice;
//Создаем новую таблицу формул
FormulasTable := MDCalc.FormulasTable;
TableForFormulas := FormulasTable.Create;
FormulasTable.Attach(TableForFormulas);
MObj.Save;
End Sub Main;
После выполнения примера в корневом каталоге репозитория будет создан объект - Многомерный расчет на сервере БД. Будут установлены один куб-источник, куб-назначение и создана новая таблица формул. Календарные измерения кубов будут зафиксированы и сопоставлены друг другу. Для элементов второго измерения источника будет возможность настраивать в формулах суммирование по дочерним элементам.
См. также: