LoadWithResult(Source: Object; CreateInfo: IMetabaseObjectCreateInfo): ICubeLoaderResult;
LoadWithResult(Source: Object; CreateInfo: Prognoz.Platform.Interop.Metabase.IMetabaseObjectCreateInfo): Prognoz.Platform.Interop.Cubes.ICubeLoaderResult;
Source. Источник данных, описываемый интерфейсом IDtProvider;
CreateInfo. Информация о создаваемом объекте. Если информация отсутствует, либо загрузка осуществляется в существующий объект, то в качестве параметра необходимо передать значение Null.
Метод LoadWithResult выполняет загрузку данных и возвращает результат загрузки.
Тип создаваемого объекта определяет значение свойства ICubeLoaderFromSource.Type.
Для выполнения примера в репозитории предполагается наличие:
Папки с идентификатором TSDB_FOLDER.
Репозитория НСИ с идентификатором RDS_LOAD.
Табличного справочника НСИ с идентификатором CITY_DICT. Данный справочник должен содержаться вне репозитория НСИ. Также в справочнике должен присутствовать уникальный индекс с идентификатором UINDEX. В данный индекс должен входить только один атрибут с идентификатором NAME. Атрибут содержит наименование элементов справочника. Справочник должен содержать следующие элементы:
Анкоридж;
Мехико;
Чикаго.
В файловой системе должен присутствовать файл «C:\result_exp.txt» с данными.
Добавьте ссылки на системные сборки: Collections, Cubes, Dimensions, Dt, Metabase, Rds.
Содержимое файла «C:\result_exp.txt»
Sub UserProc;
Var
mb: IMetabase;
parent: IMetabaseObject;
rdsDatabase: IRdsDatabase;
loader: ICubeLoaderFromSource;
DimBindings: ICubeLoaderDimensionBindings;
bind: ICubeLoaderDimensionBinding;
DimModel: IDimensionModel;
Calend: ICubeLoaderDimensionBinding;
DateConv: IDateConverter;
creator: IDtObjectCreator;
prov: IDtTextProvider;
Result: ICubeLoaderResult;
Object: IMetabaseObject;
List, Arr: IArrayList;
Item: Variant;
i: Integer;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем папку «TSDB_FOLDER», в которой будет создана
// база данных временных рядов
parent := mb.ItemById("TSDB_FOLDER").Bind;
// Получаем репозиторий НСИ
rdsDatabase := mb.ItemById("RDS_LOAD").Bind As IRdsDatabase;
// Создаем объект для загрузки данных
loader := New CubeLoaderFromSource.Create;
// Указываем репозиторий НСИ, который будет использоваться при загрузке
loader.RdsDatabase := rdsDatabase.Open(Null);
// Указываем, что для загружаемых данных будет создана
// база данных временных рядов
loader.Type := CubeLoaderType.Rubricator;
// Указываем папку, в которой будет создана база данных временных рядов
loader.Parent := parent;
// Получаем привязки измерений к полям источника данных
DimBindings := loader.DimensionBindings;
// Добавляем привязку для поля «CITY»
bind := DimBindings.Add("CITY");
// Указываем, что полю будет соответствовать измерение,
// основанное на справочнике НСИ «CITY_DICT»
DimModel := mb.ItemById("CITY_DICT").Bind As IDimensionModel;
bind.Dictionary := DimModel;
// Указываем индекс, по которому будет создана привязка
bind.Index := DimModel.Indexes.FindById("UINDEX");
// Указываем идентификатор атрибута, на котором построен индекс
bind.AttributeId := "NAME";
// Добавляем привязку для поля «INDICATOR».
// Справочник для создания измерения, соответствующему данному полю,
// будет создан автоматически в репозитории НСИ «RDS_LOAD»
DimBindings.Add("INDICATOR");
// Добавляем привязку для календарного измерения
Calend := DimBindings.AddCalendar("Year", DimCalendarLevel.Year);
// Создаем объект для разбора дат в источнике данных
DateConv := New DateConverter.Create;
// Задаем формат дат
DateConv.CalendarDateFormat := "$YEAR$";
DateConv.ConvertShortYear := True;
// Устанавливаем созданный объект в привязку календарного измерения
Calend.Converter := DateConv;
// Добавляем привязку для значений источника данных
loader.FactBindings.Add("Value");
// Создаем объект для работы с источником данных
creator := New DtObjectCreator.Create;
// Создаем текстовый источник данных из файла
prov := creator.CreateDtObjectFromFile("C:\result_exp.txt") As IDtTextProvider;
// Указываем разделитель полей, используемый в источнике
prov.DelimitedColumnDelimiter := ";";
// Загружаем данные и обрабатываем результат загрузки
Result := loader.LoadWithResult(prov, Null);
// Получаем объект, в который были загружены данные
Object := Result.Object;
// Выводим информацию объекте в окно консоли
Debug.WriteLine("Наименование и идентификатор созданной базы данных временных рядов: " +
Object.Name + "(" + Object.Id + ")");
// Получаем пустые записи и выводим их в окно консоли
List := Result.NullStrings;
If List.Count <> 0 Then
Debug.WriteLine("Пустые записи:");
For Each Item In List Do
Arr := Item As IArrayList;
For i := 0 To Arr.Count - 1 Do
Debug.Write(Arr.Item(i));
Debug.Write("; ");
End For;
Debug.WriteLine("");
End For;
End If;
// Получаем дублирующие записи и выводим их в окно консоли
List := Result.DuplicatedStrings;
If List.Count <> 0 Then
Debug.WriteLine("Дублирующие записи:");
For Each Item In List Do
Arr := Item As IArrayList;
For i := 0 To Arr.Count - 1 Do
Debug.Write(Arr.Item(i));
Debug.Write("; ");
End For;
Debug.WriteLine("");
End For;
End If;
End Sub UserProc;
В результате выполнения примера данные из файла «C:\result_exp.txt» будут загружены в базу данных временных рядов, специально созданную для этого. Результаты импорта, а также идентификатор и наименование созданной базы данных временных рядов будут выведены в окно консоли.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.ForeCollections;
Imports Prognoz.Platform.Interop.Rds;
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
parent: IMetabaseObject;
rdsDatabase: IRdsDatabase;
loader: ICubeLoaderFromSource;
DimBindings: ICubeLoaderDimensionBindings;
bind: ICubeLoaderDimensionBinding;
DimModel: IDimensionModel;
Calend: ICubeLoaderDimensionBinding;
DateConv: IDateConverter;
creator: IDtObjectCreator;
prov: IDtTextProvider;
Result: ICubeLoaderResult;
Object: IMetabaseObject;
List, Arr: IArrayList;
Item: object;
i: Integer;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем папку «TSDB_FOLDER», в которой будет создана
// база данных временных рядов
parent := mb.ItemById["TSDB_FOLDER"].Bind();
// Получаем репозиторий НСИ
rdsDatabase := mb.ItemById["RDS_LOAD"].Bind() As IRdsDatabase;
// Создаем объект для загрузки данных
loader := New CubeLoaderFromSource.Create();
// Указываем репозиторий НСИ, который будет использоваться при загрузке
loader.RdsDatabase := rdsDatabase.Open(Null);
// Указываем, что для загружаемых данных будет создана
// база данных временных рядов
loader.Type := CubeLoaderType.cltRubricator;
// Указываем папку, в которой будет создана база данных временных рядов
loader.Parent := parent;
// Получаем привязки измерений к полям источника данных
DimBindings := loader.DimensionBindings;
// Добавляем привязку для поля «CITY»
bind := DimBindings.Add("CITY");
// Указываем, что полю будет соответствовать измерение,
// основанное на справочнике НСИ «CITY_DICT»
DimModel := mb.ItemById["CITY_DICT"].Bind() As IDimensionModel;
bind.Dictionary := DimModel;
// Указываем индекс, по которому будет создана привязка
bind.Index := DimModel.Indexes.FindById("UINDEX");
// Указываем идентификатор атрибута, на котором построен индекс
bind.AttributeId := "NAME";
// Добавляем привязку для поля «INDICATOR».
// Справочник для создания измерения, соответствующему данному полю,
// будет создан автоматически в репозитории НСИ «RDS_LOAD»
DimBindings.Add("INDICATOR");
// Добавляем привязку для календарного измерения
Calend := DimBindings.AddCalendar("Year", DimCalendarLevel.dclYear);
// Создаем объект для разбора дат в источнике данных
DateConv := New DateConverter.Create();
// Задаем формат дат
DateConv.CalendarDateFormat := "$YEAR$";
DateConv.ConvertShortYear := True;
// Устанавливаем созданный объект в привязку календарного измерения
Calend.Converter := DateConv;
// Добавляем привязку для значений источника данных
loader.FactBindings.Add("Value");
// Создаем объект для работы с источником данных
creator := New DtObjectCreator.Create();
// Создаем текстовый источник данных из файла
prov := creator.CreateDtObjectFromFile("C:\result_exp.txt") As IDtTextProvider;
// Указываем разделитель полей, используемый в источнике
prov.DelimitedColumnDelimiter := ";";
// Загружаем данные и обрабатываем результат загрузки
Result := loader.LoadWithResult(prov, Null);
// Получаем объект, в который были загружены данные
Object := Result.Object;
// Выводим информацию объекте в окно консоли
System.Diagnostics.Debug.WriteLine("Наименование и идентификатор созданной базы данных временных рядов: " +
Object.Name + "(" + Object.Id + ")");
// Получаем пустые записи и выводим их в окно консоли
List := Result.NullStrings;
If List.Count <> 0 Then
System.Diagnostics.Debug.WriteLine("Пустые записи:");
For Each Item In List Do
Arr := Item As IArrayList;
For i := 0 To Arr.Count - 1 Do
System.Diagnostics.Debug.Write(Arr.Item[i]);
System.Diagnostics.Debug.Write("; ");
End For;
System.Diagnostics.Debug.WriteLine("");
End For;
End If;
// Получаем дублирующие записи и выводим их в окно консоли
List := Result.DuplicatedStrings;
If List.Count <> 0 Then
System.Diagnostics.Debug.WriteLine("Дублирующие записи:");
For Each Item In List Do
Arr := Item As IArrayList;
For i := 0 To Arr.Count - 1 Do
System.Diagnostics.Debug.Write(Arr.Item[i]);
System.Diagnostics.Debug.Write("; ");
End For;
System.Diagnostics.Debug.WriteLine("");
End For;
End If;
End Sub;
См. также: