IImportRequestProviderParams.DuplicateCheck

Синтаксис Fore

DuplicateCheck: CubeLoadDuplicateCheckSet;

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

DuplicateCheck: Prognoz.Platform.Interop.Cubes.CubeLoadDuplicateCheckSet;

Описание

Свойство DuplicateCheck определяет режим исключения дублирующих значений.

Комментарии

Для выбора режима загрузки временных рядов используйте свойство IImportRequestProviderParams.LoadType.

Пример Fore

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

В файловой системе предполагается наличие файла «D:\res_export.txt», содержащего данные.

Содержимое файла res_export.txt

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

Sub UserProc;
Var
    TextProvider: IDtTextProvider;
    Mb: IMetabase;
    TSDBObj: IMetabaseObject;
    TSDB: IRubricator;
    Attr: IMetaAttributes;
    CrInfo: IMetabaseObjectCreateInfo;
    ImportRequestDef: IImportRequestDefinition;
    Params: IImportRequestProviderParams;
    Obj: IMetabaseObject;
    Bindings: ICubeMetaLoaderBindings;
    Binding: ICubeMetaLoaderBinding;
    DimM: IDimensionModel;
    Instance: IImportRequestInstance;
Begin
    
// Создаем источник данных для импорта из текстового файла
    TextProvider := New DtTextProvider.Create;
    TextProvider.File := 
"D:\res_export.txt";
    TextProvider.FormatType := DtTextFormatType.Delimited;
    TextProvider.DelimitedColumnDelimiter := 
";";
    TextProvider.DelimitedTextQualifier := 
"""";
    TextProvider.Encoding := 
"WIN";
    TextProvider.RangeHasHeader := 
True;
    TextProvider.Open;
    
// Получаем базу данных временных рядов
    Mb := MetabaseClass.Active;
    TSDBObj := Mb.ItemById(
"TSDB_IMP").Bind;
    TSDB := TSDBObj 
As IRubricator;
    Attr := TSDB.Facts.Attributes;
    
// Создаем объект импорта
    CrInfo := Mb.CreateCreateInfo;
    CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_IMPORTREQUEST;
    CrInfo.Id := Mb.GenerateId(
"OBJ_IMPORTREQUEST_P", TSDBObj.Key);
    CrInfo.Name := 
"Объект импорта";
    CrInfo.Parent := TSDBObj;
    Obj := Mb.CreateObject(CrInfo).Edit;
    
// Указываем источник данных
    ImportRequestDef := Obj As IImportRequestDefinition;
    ImportRequestDef.SourceType := ImportRequestSourceType.Provider;
    
// Указываем приемник данных
    ImportRequestDef.DestinationRubricator := TSDB;
    
// Задаем параметры импорта
    Params := ImportRequestDef.ProviderParams;
    Params.Provider := TextProvider 
As IDatasetDataProvider;
    Params.NewRevisionName := 
"Импорт временных рядов";
    Params.ImportObjectKey := Obj.Key;
    Params.LoadType := CubeMetaLoaderLoadType.CreateAndUpdate;
    Params.LoadMode := CubeLoadClearMode.DataAndMetadata;
    Params.DuplicateCheck := CubeLoadDuplicateCheckSet.ValueAttribute 
Or CubeLoadDuplicateCheckSet.Value;
    
// Указываем сценарий, на который будут загружаться данные
    Params.ScenarioKey := (TSDB.ModelSpace As IMsModelSpace).ScenarioTree.Item(0).Key;
    
// Задаем привязку атрибутов
    Bindings := Params.Bindings;
    
// Задаем привязку календаря
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Calendar;
    Binding.ByColumns := 
False;
    Binding.CalendarDateFormat := 
"$Year$";
    Binding.CalendarOptions.Levels := DimCalendarLevelSet.Year;
    Binding.FieldType := CubeMetaLoaderFieldType.Name;
    Binding.Field := 
"Year";
    
// Задаем привязку атрибута «Единицы измерения» (UNIT)
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Unit;
    Binding.FieldType := CubeMetaLoaderFieldType.ConstValue;
    Binding.FieldValue := 
1;
    Binding.Attribute := 
"UNIT";
    DimM := Attr.FindById(
"UNIT").ValuesObject.Bind As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item(
0).Id;
    Binding.KeyAttribute := 
"KEY";
    
// Задаем привязку атрибута «Города» (CITY)
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Attribute;
    Binding.Attribute := 
"CITY";
    Binding.FieldType := CubeMetaLoaderFieldType.Name;
    Binding.Field := 
"CITY_KEY";
    DimM := Attr.FindById(
"CITY").ValuesObject.Bind As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item(
0).Id;
    Binding.KeyAttribute := 
"KEY";
    Binding.NameAttribute := 
"NAME";
    
// Задаем привязку атрибута «Показатели» (INDICATOR)
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Attribute;
    Binding.Attribute := 
"INDICATOR";
    Binding.FieldType := CubeMetaLoaderFieldType.Name;
    Binding.Field := 
"INDICATOR_KEY";
    DimM := Attr.FindById(
"INDICATOR").ValuesObject.Bind As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item(
0).Id;
    Binding.KeyAttribute := 
"KEY";
    Binding.NameAttribute := 
"NAME";
    
// Задаем привязку для импорта значений наблюдений рядов
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Value;
    Binding.FieldType := CubeMetaLoaderFieldType.Name;
    Binding.Field := 
"Value";
    
// Сохраняем изменения в объекте импорта
    Obj.Save;
    
// Выполняем импорт данных
    Instance := (ImportRequestDef As IMetabaseObject).Open(NullAs IImportRequestInstance;
    Instance.LoadData;
End Sub UserProc;

В результате выполнения примера в базу данных временных рядов будут импортированы данные из файла «D:\res_export.txt», дублирующие данные будут исключены.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Ms;
Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    TextProvider: IDtTextProvider;
    Mb: IMetabase;
    TSDBObj: IMetabaseObject;
    TSDB: IRubricator;
    Attr: IMetaAttributes;
    CrInfo: IMetabaseObjectCreateInfo;
    ImportRequestDef: IImportRequestDefinition;
    ParamsImp: IImportRequestProviderParams;
    Obj: IMetabaseObject;
    Bindings: ICubeMetaLoaderBindings;
    Binding: ICubeMetaLoaderBinding;
    DimM: IDimensionModel;
    Instance: IImportRequestInstance;
Begin
    
// Создаем источник данных для импорта из текстового файла
    TextProvider := New DtTextProvider.Create();
    TextProvider.File := 
"D:\res_export.txt";
    TextProvider.FormatType := DtTextFormatType.tftDelimited;
    TextProvider.DelimitedColumnDelimiter := 
";";
    TextProvider.DelimitedTextQualifier := 
"""";
    TextProvider.Encoding := 
"WIN";
    TextProvider.RangeHasHeader := 
True;
    TextProvider.Open();
    
// Получаем базу данных временных рядов
    Mb := Params.Metabase;
    TSDBObj := Mb.ItemById[
"TSDB_IMP"].Bind();
    TSDB := TSDBObj 
As IRubricator;
    Attr := TSDB.Facts.Attributes;
    
// Создаем объект импорта
    CrInfo := Mb.CreateCreateInfo();
    CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_IMPORTREQUEST 
As integer;
    CrInfo.Id := Mb.GenerateId(
"OBJ_IMPORTREQUEST_P", TSDBObj.Key);
    CrInfo.Name := 
"Объект импорта";
    CrInfo.Parent := TSDBObj;
    Obj := Mb.CreateObject(CrInfo).Edit();
    
// Указываем источник данных
    ImportRequestDef := Obj As IImportRequestDefinition;
    ImportRequestDef.SourceType := ImportRequestSourceType.irstProvider;
    
// Указываем приемник данных
    ImportRequestDef.DestinationRubricator := TSDB;
    
// Задаем параметры импорта
    ParamsImp := ImportRequestDef.ProviderParams;
    ParamsImp.Provider := TextProvider 
As IDatasetDataProvider;
    ParamsImp.NewRevisionName := 
"Импорт временных рядов";
    ParamsImp.ImportObjectKey := Obj.Key;
    ParamsImp.LoadType := CubeMetaLoaderLoadType.cmlltCreateAndUpdate;
    ParamsImp.LoadMode := CubeLoadClearMode.clcmDataAndMetadata;
    ParamsImp.DuplicateCheck := CubeLoadDuplicateCheckSet.cldcValueAttribute 
Or CubeLoadDuplicateCheckSet.cldcValue;
    
// Указываем сценарий, на который будут загружаться данные
    ParamsImp.ScenarioKey := (TSDB.ModelSpace As IMsModelSpace).ScenarioTree.Item[0].Key As integer;
    
// Задаем привязку атрибутов
    Bindings := ParamsImp.Bindings;
    
// Задаем привязку календаря
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtCalendar;
    Binding.ByColumns := 
False;
    Binding.CalendarDateFormat := 
"$Year$";
    Binding.CalendarOptions.Levels := DimCalendarLevelSet.dclsYear;
    Binding.FieldType := CubeMetaLoaderFieldType.cmlftName;
    Binding.Field := 
"Year";
    
// Задаем привязку атрибута «Единицы измерения» (UNIT)
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtUnit;
    Binding.FieldType := CubeMetaLoaderFieldType.cmlftConstValue;
    Binding.FieldValue := 
1;
    Binding.Attribute := 
"UNIT";
    DimM := Attr.FindById(
"UNIT").ValuesObject.Bind() As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item[
0].Id;
    Binding.KeyAttribute := 
"KEY";
    
// Задаем привязку атрибута «Города» (CITY)
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtAttribute;
    Binding.Attribute := 
"CITY";
    Binding.FieldType := CubeMetaLoaderFieldType.cmlftName;
    Binding.Field := 
"CITY_KEY";
    DimM := Attr.FindById(
"CITY").ValuesObject.Bind() As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item[
0].Id;
    Binding.KeyAttribute := 
"KEY";
    Binding.NameAttribute := 
"NAME";
    
// Задаем привязку атрибута «Показатели» (INDICATOR)
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtAttribute;
    Binding.Attribute := 
"INDICATOR";
    Binding.FieldType := CubeMetaLoaderFieldType.cmlftName;
    Binding.Field := 
"INDICATOR_KEY";
    DimM := Attr.FindById(
"INDICATOR").ValuesObject.Bind() As IDimensionModel;
    Binding.Dimension := DimM;
    Binding.Index := DimM.Indexes.Item[
0].Id;
    Binding.KeyAttribute := 
"KEY";
    Binding.NameAttribute := 
"NAME";
    
// Задаем привязку для импорта значений наблюдений рядов
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtValue;
    Binding.FieldType := CubeMetaLoaderFieldType.cmlftName;
    Binding.Field := 
"Value";
    
// Сохраняем изменения в объекте импорта
    Obj.Save();
    
// Выполняем импорт данных
    Instance := (ImportRequestDef As IMetabaseObject).Open(NullAs IImportRequestInstance;
    Instance.LoadData();
End Sub;

См. также:

IImportRequestProviderParams