IMDCalculationDataset.Data

Синтаксис Fore

Data: IDatasetModel;

Синтаксис Fore.NET

Data: Prognoz.Platform.Interop.Db.IDatasetModel;

Описание

Свойство Data определяет реляционный источник/приемник данных, участвующий в многомерном расчете на сервере БД.

Пример Fore

Для выполнения примера предполагается наличие в репозитории базы данных с идентификатором DB. В данной базе данных хранятся таблицы, содержащие следующую структуру:

Таблица с идентификатором TABLE_INPUT:

Наименование поля Назначение
Data Дата занесения значения.
CityId Идентификаторы городов, по которым содержится значения.
Value Значение показателя по указанному городу.

Таблица с идентификатором TABLE_OUTPUT:

Наименование поля Назначение
Data Дата занесения значения.
CountryId Идентификаторы стран, по которым будут рассчитываться значения.
Value Значение показателя по стране, рассчитанное с учетом значений по городам.

Также в базе данных содержится таблица, на которой основано измерение «DIM1». Данное измерение используется для составления иерархической зависимости между городами и странами. В дальнейшем используется для составления формул по выбранным координатам.

Добавьте ссылки на системные сборки: Cubes, Db, Dimensions, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    CrInfo: IMetabaseObjectCreateInfo;
    MObj: IMetabaseObject;
    MDCalc: IMDCalculation;
    Destination: IMDCalculationDestination;
    Source: IMDCalculationSource;
    Slice: IMDCalculationSlice;
    DimModel: IDimensionModel;
    Fact: IMDCalculationfact;
    FreeSlice: IMDCalculationSliceFree;
    FixedSlice: IMDCalculationSliceFixed;
    FormulasTable: IMDCalculationFormulasTable;
    TableForFormulas: ITable;
Begin
    
// Получаем текущий репозиторий
    MB := MetabaseClass.Active;
    
// Создаём объект и задаём его параметры
    CrInfo := MB.CreateCreateInfo;
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MDCALCULATION;
    CrInfo.Id := MB.GenerateId(
"MDCALC");
    CrInfo.Name := 
"Многомерный расчет на сервере";
    CrInfo.Parent := 
Null;
    MObj := MB.CreateObject(CrInfo).Edit;
    MDCalc := MObj 
As IMDCalculation;
    
//Добавляем базу данных
    MDCalc.Database := MB.ItemById("DB").Bind As IDatabase;
    
//Добавляем входную таблицу
    Source := MDcalc.Sources.Add(Mb.ItemById("TABLE_INPUT").Bind As IDatasetModel);
    
//Добавляем измерение для поля "CityId" таблицы
    Slice := Source.Slices.Add;
    Slice.Fields := 
"CITYID";
    Slice.Name := 
"Города";
    Slice.FixType := MDCalculationSliceFixType.Free;
    FreeSlice := Slice.Free;
    
//Связываем данное измерение со справочником Стран/городов
    DimModel := MB.ItemById("DIM1").Bind As IDimensionModel;
    FreeSlice.Dimension := DimModel;
    FreeSlice.Index := DimModel.Blocks.Item(
0).Indexes.Item(0);
    
//Добавляем измерение для календаря
    Slice := Source.Slices.Add;
    Slice.Name := 
"Календарь";
    Slice.Fields := 
"DATA";
    Slice.FixType := MDCalculationSliceFixType.Fixed;
    Slice.IsCalendar := 
True;
    FixedSlice := Slice.Fixed;
    
//Добавляем измерение для показателя
    Fact := Source.Facts.Add;
    Fact.FieldName := 
"VALUE";
    Fact.Name := 
"Показатель";
    
//Добавляем выходную таблицу
    Destination := MDCalc.Destination;
    Destination.Data := MB.ItemById(
"TABLE_OUTPUT").Bind As IDatasetModel;
    
//Добавляем измерение для поля "CountryId" таблицы
    Slice := Destination.Slices.Add;
    Slice.Fields := 
"COUNTRYID";
    Slice.Name := 
"Страны/Города";
    Slice.FixType := MDCalculationSliceFixType.Free;
    FreeSlice := Slice.Free;
    
//Связываем данное измерение со справочником Стран/городов
    DimModel := Mb.ItemById("DIM1").Bind As IDimensionModel;
    FreeSlice.Dimension := DimModel;
    FreeSlice.Index := DimModel.Blocks.Item(
0).Indexes.Item(0);
    
//Добавляем измерение для календаря
    Slice := Destination.Slices.Add;
    Slice.Name := 
"Календарь";
    Slice.Id := 
"CALEN";
    Slice.Fields := 
"DATA";
    Slice.FixType := MDCalculationSliceFixType.Fixed;
    Slice.IsCalendar := 
True;
    
//Добавляем измерение для показателя
    Fact := Destination.Facts.Add;
    Fact.FieldName := 
"VALUE";
    Fact.Name := 
"Показатель";
    
//Указываем связь между фиксированными измерениями
    FixedSlice.Mapping := Destination.Slices.FindById("CALEN");
    
//Создаем новую таблицу формул
    FormulasTable := MDcalc.FormulasTable;
    TableForFormulas := FormulasTable.Create;
    FormulasTable.Attach(TableForFormulas);
    MObj.Save;
End Sub UserProc;

После выполнения примера в корневом каталоге репозитория будет создан объект «Многомерный расчет на сервере БД». Расчет будет осуществляться на основе значений, содержащихся в таблице с идентификатором TABLE_INPUT. В качестве назначения будет установлена таблица с идентификатором TABLE_OUTPUT. Для полей таблиц будут созданы необходимые измерения, также будут созданы показатели, привязанные к полям VALUE. Календарные измерения будут зафиксированы. По полю CITYID источника будет возможность настраивать в формулах суммирование по дочерним элементам.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

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

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    CrInfo: IMetabaseObjectCreateInfo;
    MObj: IMetabaseObject;
    MDCalc: IMDCalculation;
    Destination: IMDCalculationDestination;
    Source: IMDCalculationSource;
    Slice: IMDCalculationSlice;
    DimModel: IDimensionModel;
    Fact: IMDCalculationfact;
    FreeSlice: IMDCalculationSliceFree;
    FixedSlice: IMDCalculationSliceFixed;
    FormulasTable: IMDCalculationFormulasTable;
    TableForFormulas: ITable;
Begin
    
// Получаем текущий репозиторий
    MB := Params.Metabase;
    
// Создаём объект и задаём его параметры
    CrInfo := MB.CreateCreateInfo();
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MDCALCULATION 
As Int32;
    CrInfo.Id := MB.GenerateId(
"MDCALC"0);
    CrInfo.Name := 
"Многомерный расчет на сервере";
    CrInfo.Parent := 
Null;
    MObj := MB.CreateObject(CrInfo).Edit();
    MDCalc := MObj 
As IMDCalculation;
    
//Добавляем базу данных
    MDCalc.Database := MB.ItemById["DB"].Bind() As IDatabase;
    
//Добавляем входную таблицу
    Source := MDcalc.Sources.Add(Mb.ItemById["TABLE_INPUT"].Bind() As IDatasetModel);
    
//Добавляем измерение для поля "CityId" таблицы
    Slice := Source.Slices.Add();
    Slice.Fields := 
"CITYID";
    Slice.Name := 
"Города";
    Slice.FixType := MDCalculationSliceFixType.csftFixed;
    FreeSlice := Slice.Free;
    
//Связываем данное измерение со справочником Стран/городов
    DimModel := MB.ItemById["DIM1"].Bind() As IDimensionModel;
    FreeSlice.Dimension := DimModel;
    FreeSlice.Index := DimModel.Blocks.Item[
0].Indexes.Item[0];
    
//Добавляем измерение для календаря
    Slice := Source.Slices.Add();
    Slice.Name := 
"Календарь";
    Slice.Fields := 
"DATA";
    Slice.FixType := MDCalculationSliceFixType.csftFixed;
    Slice.IsCalendar := 
True;
    FixedSlice := Slice.Fixed;
    
//Добавляем измерение для показателя
    Fact := Source.Facts.Add();
    Fact.FieldName := 
"VALUE";
    Fact.Name := 
"Показатель";
    
//Добавляем выходную таблицу
    Destination := MDCalc.Destination;
    Destination.Data := MB.ItemById[
"TABLE_OUTPUT"].Bind() As IDatasetModel;
    
//Добавляем измерение для поля "CountryId" таблицы
    Slice := Destination.Slices.Add();
    Slice.Fields := 
"COUNTRYID";
    Slice.Name := 
"Страны/Города";
    Slice.FixType := MDCalculationSliceFixType.csftFixed;
    FreeSlice := Slice.Free;
    
//Связываем данное измерение со справочником Стран/городов
    DimModel := Mb.ItemById["DIM1"].Bind() As IDimensionModel;
    FreeSlice.Dimension := DimModel;
    FreeSlice.Index := DimModel.Blocks.Item[
0].Indexes.Item[0];
    
//Добавляем измерение для календаря
    Slice := Destination.Slices.Add();
    Slice.Name := 
"Календарь";
    Slice.Id := 
"CALEN";
    Slice.Fields := 
"DATA";
    Slice.FixType := MDCalculationSliceFixType.csftFixed;
    Slice.IsCalendar := 
True;
    
//Добавляем измерение для показателя
    Fact := Destination.Facts.Add();
    Fact.FieldName := 
"VALUE";
    Fact.Name := 
"Показатель";
    
//Указываем связь между фиксированными измерениями
    FixedSlice.Mapping := Destination.Slices.FindById("CALEN");
    
//Создаем новую таблицу формул
    FormulasTable := MDcalc.FormulasTable;
    TableForFormulas := FormulasTable.Create(TableForFormulas);
    FormulasTable.Attach(TableForFormulas);
    MObj.Save();
End Sub;

См. также:

IMDCalculationDataset