ICubeMetaLoaderBinding.CalendarDateFormatEx

Синтаксис Fore

CalendarDateFormatEx(Level: DimCalendarLevel): String;

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

CalendarDateFormatEx[Level: Prognoz.Platform.Interop.Dimensions.DimCalendarLevel]: String;

Параметры

Level. Уровень календаря, для которого задается формат.

Описание

Свойство CalendarDateFormatEx определяет формат дат для нескольких уровней календарного измерения.

Комментарии

Для задания формата дат для нескольких уровней последовательно указывайте их с помощью данного свойства. Например, код для задания формата годовой и квартальной динамики:

Sub UserProc;
Var

Binding: ICubeMetaLoaderBinding;
Begin

    Binding.CalendarDateFormatEx(DimCalendarLevel.Year) := "$Year$";
    Binding.CalendarDateFormatEx(DimCalendarLevel.Quarter) := "$Year$Q$Quarter$";

End Sub UserProc;

Пример Fore

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

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

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

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

Sub UserProc;
Var
    TextProvider: IDtTextProvider;
    Mb: IMetabase;
    TSDBObj: IMetabaseObject;
    TSDB: IRubricator;
    Attr: IMetaAttributes;
    CrInfo: IMetabaseObjectCreateInfo;
    Obj: IMetabaseObject;
    ImportRequestDef: IImportRequestDefinition;
    Params: IImportRequestProviderParams;
    Bindings: ICubeMetaLoaderBindings;
    Binding: ICubeMetaLoaderBinding;
    DimM: IDimensionModel;
    Instance: IImportRequestInstance;
    ImportResult: IImportRequestResult;
    Count, i: Integer;
    Entry: ICubeMetaLoaderLogEntry;
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_IMPORT").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;

    // Задаем привязку атрибутов
    Bindings := Params.Bindings;

    // Задаем привязку календаря
    Binding := Bindings.Add;
    Binding.BindingType := CubeMetaLoaderBindingType.Calendar;
    Binding.ByColumns := False;
    Binding.CalendarDateFormatEx(DimCalendarLevel.Year) := "$Year$";
    Binding.CalendarDateFormatEx(DimCalendarLevel.Quarter) := "$Year$Q$Quarter$";
    Binding.CalendarOptions.Levels := DimCalendarLevelSet.Year Or DimCalendarLevelSet.Quarter;
    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;

    // Получаем журнал ошибок импорта данных
    ImportResult := Instance.ImportResult;
    Count := importResult.Log.Count;

    // Выводим журнал в окно консоли
    For i := 0 To Count - 1 Do
        Entry := ImportResult.Log.Item(i);
        Debug.WriteLine(Entry.ErrorMessage);
        If Entry.IsError Then
            Debug.WriteLine(" (field = """ + Entry.Field + """, record = " +
                Entry.RecordNumber.ToString + ")");
        End If;
    End For;
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.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    TextProvider: IDtTextProvider;
    Mb: IMetabase;
    TSDBObj: IMetabaseObject;
    TSDB: IRubricator;
    Attr: IMetaAttributes;
    CrInfo: IMetabaseObjectCreateInfo;
    Obj: IMetabaseObject;
    ImportRequestDef: IImportRequestDefinition;
    ImpParams: IImportRequestProviderParams;
    Bindings: ICubeMetaLoaderBindings;
    Binding: ICubeMetaLoaderBinding;
    DimM: IDimensionModel;
    Instance: IImportRequestInstance;
    ImportResult: IImportRequestResult;
    Count, i: Integer;
    Entry: ICubeMetaLoaderLogEntry;

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_IMPORT"].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;

    // Задаем параметры импорта
    ImpParams := ImportRequestDef.ProviderParams;
    ImpParams.Provider := TextProvider As IDatasetDataProvider;
    ImpParams.NewRevisionName := "Импорт временных рядов";
    ImpParams.ImportObjectKey := Obj.Key;
    ImpParams.LoadType := CubeMetaLoaderLoadType.cmlltCreateAndUpdate;

    // Задаем привязку атрибутов
    Bindings := ImpParams.Bindings;

    // Задаем привязку календаря
    Binding := Bindings.Add();
    Binding.BindingType := CubeMetaLoaderBindingType.cmlbtCalendar;
    Binding.ByColumns := False;
    Binding.CalendarDateFormatEx[DimCalendarLevel.dclYear] := "$Year$";
    Binding.CalendarDateFormatEx[DimCalendarLevel.dclQuarter] := "$Year$Q$Quarter$";
    Binding.CalendarOptions.Levels := DimCalendarLevelSet.dclsYear Or DimCalendarLevelSet.dclsQuarter;
    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();

    // Получаем журнал ошибок импорта данных
    ImportResult := Instance.ImportResult;
    Count := importResult.Log.Count;

    // Выводим журнал в окно консоли
    For i := 0 To Count - 1 Do
        Entry := ImportResult.Log.Item[i];
        System.Diagnostics.Debug.WriteLine(Entry.ErrorMessage);
        If Entry.IsError Then
            System.Diagnostics.Debug.WriteLine(" (field = """ + Entry.Field + """, record = " +
                Entry.RecordNumber.ToString() + ")");
        End If;
    End For;
End Sub;

См. также:

ICubeMetaLoaderBinding