ICubeLoaderFromSource.LoadWithResult

Синтаксис Fore

LoadWithResult(Source: Object; CreateInfo: IMetabaseObjectCreateInfo): ICubeLoaderResult;

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

LoadWithResult(Source: Object; CreateInfo: Prognoz.Platform.Interop.Metabase.IMetabaseObjectCreateInfo): Prognoz.Platform.Interop.Cubes.ICubeLoaderResult;

Параметры

Source. Источник данных, описываемый интерфейсом IDtProvider;

CreateInfo. Информация о создаваемом объекте. Если информация отсутствует, либо загрузка осуществляется в существующий объект, то в качестве параметра необходимо передать значение Null.

Описание

Метод LoadWithResult выполняет загрузку данных и возвращает результат загрузки.

Комментарии

Тип создаваемого объекта определяет значение свойства ICubeLoaderFromSource.Type.

Пример Fore

Для выполнения примера в репозитории предполагается наличие:

  1. Папки с идентификатором TSDB_FOLDER.

  2. Репозитория НСИ с идентификатором RDS_LOAD.

  3. Табличного справочника НСИ с идентификатором 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.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;

См. также:

ICubeLoaderFromSource