DuplicateCheck: CubeLoadDuplicateCheckSet;
Свойство DuplicateCheck определяет режим исключения дублирующих значений.
Для выбора режима загрузки временных рядов используйте свойство ICubeMetaLoader.LoadType.
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «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;
Obj: IMetabaseObject;
Loader: ICubeMetaLoader;
Bindings: ICubeMetaLoaderBindings;
Binding: ICubeMetaLoaderBinding;
DimM: IDimensionModel;
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_CUBEMETALOADER;
CrInfo.Parent := TSDBObj;
CrInfo.Id := Mb.GenerateId("CUBEMETALOADER", TSDBObj.Key);
CrInfo.Permanent := False;
Obj := Mb.CreateObject(CrInfo).Edit;
Loader := Obj As ICubeMetaLoader;
// Указываем источник данных
Loader.Data := TextProvider As IDatasetDataProvider;
// Указываем приёмник данных
Loader.Rubricator := TSDB;
// Задаём параметры загрузки данных
Loader.ImportObjectKey := Obj.Key;
Loader.NewRevisionName := "Обновление данных";
Loader.LoadType := CubeMetaLoaderLoadType.CreateAndUpdate;
Loader.LoadMode := CubeLoadClearMode.DataAndMetadata;
Loader.DuplicateCheck := CubeLoadDuplicateCheckSet.ValueAttribute Or CubeLoadDuplicateCheckSet.Value;
// Указываем сценарий, на который будут загружаться данные
Loader.ScenarioKey := (TSDB.ModelSpace As IMsModelSpace).ScenarioTree.Item(0).Key;
// Задаем привязку атрибутов
Bindings := Loader.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";
// Выполняем загрузку данных
Loader.LoadData;
End Sub UserProc;
В результате выполнения примера в базу данных временных рядов будут импортированы данные из файла «D:\res_export.txt» на первый сценарий, дублирующие данные будут исключены.
См. также: