ICubeMetaLoader.DuplicateCheck

Синтаксис

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» на первый сценарий, дублирующие данные будут исключены.

См. также:

ICubeMetaLoader