ICubeMetaLoaderBindingParser.StringPositionStart

Syntax

StringPositionStart: Integer;

Description

The StringPositionStart determines a start position of attribute in a string.

Comments

The attribute end position in the string is determined by the ICubeMetaLoaderBindingParser.StringPositionEnd property.

The StringPositionStart property is taken into account if the ICubeMetaLoaderBindingParser.ParserType value is CubeMetaLoaderParserType.FixedPosition.

Example

Executing the example requires a time series database with the OBJ_FC identifier and the time series export file C:\Fixed.xlsx. Also, the repository must contain an MDM repository with the MDM_REPO identifier. This repository should have dictionaries with the DICT_CTR, DICT_IND and UNITS identifiers. The COUNTRY attribute of the time series database refers to the DICT_CTR dictionary, the INDICATOR attribute is a link to the DICT_IND dictionary, and measurement units refer to the UNITS dictionary.

The C:\Fixed.xlsx file, for which the example is created

Sub Main;

Var

Mb: IMetabase;

NsiDescr: IMetabaseObjectDescriptor;

CubeMetaLoader: ICubeMetaLoader;

CrInfo: IMetabaseObjectCreateInfo;

Obj: IMetabaseObject;

ObjDesc: IMetabaseObjectDescriptor;

CubeMetaLoaderBindings: ICubeMetaLoaderBindings;

CalendarBinding: ICubeMetaLoaderBinding;

CountryBinding: ICubeMetaLoaderBinding;

IndicatorBinding: ICubeMetaLoaderBinding;

UnitBinding: ICubeMetaLoaderBinding;

ScaleBinding: ICubeMetaLoaderBinding;

LevelBinding: ICubeMetaLoaderBinding;

ValueBinding: ICubeMetaLoaderBinding;

Parser: ICubeMetaLoaderBindingParser;

Excel: IDtExcelProvider;

Provider: IDatasetDataProvider;

Log: ICubeMetaLoaderLog;

Entry: ICubeMetaLoaderLogEntry;

Count, i: Integer;

Begin

Mb := MetabaseClass.Active;

NsiDescr := Mb.ItemById("RDS_REPO");

 

CrInfo := Mb.CreateCreateInfo;

CrInfo.ClassId := MetabaseObjectClass.KE_CLASS_CUBEMETALOADER;

CrInfo.Id := "CUBEMETALOADER";

CrInfo.Permanent := False;

ObjDesc := Mb.CreateObject(CrInfo);

Obj := ObjDesc.Edit;

CubeMetaLoader := Obj As ICubeMetaLoader;

CubeMetaLoader.LoadType := CubeMetaLoaderLoadType.CreateAndUpdate;

CubeMetaLoader.Rubricator := Mb.ItemById("OBJ_FC").Bind As IRubricator;

CubeMetaLoaderBindings := CubeMetaLoader.Bindings;

 

CalendarBinding := CubeMetaLoaderBindings.Add;

CalendarBinding.BindingType := CubeMetaLoaderBindingType.Calendar;

CalendarBinding.CalendarOptions.Levels := DimCalendarLevelSet.Year;

CalendarBinding.ByColumns := False;

CalendarBinding.CalendarDateFormat := "$Year$";

CalendarBinding.FieldType := CubeMetaLoaderFieldType.Name;

CalendarBinding.Field := "Year";

Parser := CalendarBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

CalendarBinding.Parser.StringPositionStart := 2;

CalendarBinding.Parser.StringPositionEnd := -1;

 

IndicatorBinding := CubeMetaLoaderBindings.Add;

IndicatorBinding.BindingType := CubeMetaLoaderBindingType.Attribute;

IndicatorBinding.Attribute := "INDICATOR";

IndicatorBinding.Field := "Indicator Code";

IndicatorBinding.FieldType := CubeMetaLoaderFieldType.Name;

IndicatorBinding.Dimension := Mb.ItemByIdNamespace("DICT_IND", NsiDescr.Key).Bind As IDimensionModel;

// IX_CODE - is a dictionary DICT_IND unique key

IndicatorBinding.Index := "IX_CODE";

IndicatorBinding.KeyAttribute := "KEY";

Parser := IndicatorBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

Parser.StringPositionStart := 2;

Parser.StringPositionEnd := -1;

 

CountryBinding := CubeMetaLoaderBindings.Add;

CountryBinding.BindingType := CubeMetaLoaderBindingType.Attribute;

CountryBinding.Attribute := "COUNTRY";

CountryBinding.Field := "Country Code";

CountryBinding.FieldType := CubeMetaLoaderFieldType.Name;

CountryBinding.Dimension := Mb.ItemByIdNamespace("DICT_CTR", NsiDescr.Key).Bind As IDimensionModel;

// IX_WEO - is a dictionary DICT_CTR unique key

CountryBinding.Index := "IX_WEO";

CountryBinding.KeyAttribute := "KEY";

CountryBinding.NameAttribute := "NAME";

Parser := CountryBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

Parser.StringPositionStart := 3;

Parser.StringPositionEnd := 5;

 

LevelBinding := CubeMetaLoaderBindings.Add;

LevelBinding.BindingType := CubeMetaLoaderBindingType.Attribute;

LevelBinding.Attribute := "DL";

LevelBinding.FieldType := CubeMetaLoaderFieldType.ConstValue;

LevelBinding.FieldValue := DimCalendarLevel.Year As Integer;

UnitBinding := CubeMetaLoaderBindings.Add;

UnitBinding.BindingType := CubeMetaLoaderBindingType.Unit;

UnitBinding.Field := "Units";

UnitBinding.FieldType := CubeMetaLoaderFieldType.Name;

Parser := UnitBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

Parser.StringPositionStart := 0;

Parser.StringPositionEnd := 11;

 

ScaleBinding := CubeMetaLoaderBindings.Add;

ScaleBinding.BindingType := CubeMetaLoaderBindingType.Unit;

ScaleBinding.Field := "Scale";

ScaleBinding.FieldType := CubeMetaLoaderFieldType.Name;

ScaleBinding.Dimension := Mb.ItemByIdNamespace("UNITS", NsiDescr.Key).Bind As IDimensionModel;

// IX_WEO_UNIT_SCALE - is a dictionary UNITS unique key

ScaleBinding.Index := "IX_WEO_UNIT_SCALE";

ScaleBinding.KeyAttribute := "KEY";

Parser := ScaleBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

Parser.StringPositionStart := 0;

Parser.StringPositionEnd := -1;

 

ValueBinding := CubeMetaLoaderBindings.Add;

ValueBinding.BindingType := CubeMetaLoaderBindingType.Value;

ValueBinding.Field := "Value";

ValueBinding.FieldType := CubeMetaLoaderFieldType.Name;

Parser := ValueBinding.Parser;

Parser.ParserType := CubeMetaLoaderParserType.FixedPosition;

Parser.StringPositionStart := 0;

Parser.StringPositionEnd := -1;

 

Excel := New DtExcelProvider.Create;

Excel.ImexMode := DtExcelImexMode.Import;

Excel.File := "C:\Fixed.xlsx";

Excel.Query := "SELECT * FROM [Sheet1$]";

Excel.HasHeader := True;

Excel.CheckFieldName := True;

Excel.Open;

Provider := Excel As IDatasetDataProvider;

 

CubeMetaLoader.Data := Provider;

CubeMetaLoader.LoadData;

Log := CubeMetaLoader.Log;

Count := Log.Count;

Debug.WriteLine("Total number of records in the log: " + Count.ToString);

For i := 0 To Count - 1 Do

Entry := Log.Item(i);

Debug.WriteLine(i.ToString + " : "

+ Entry.DateBegin.ToString + ","

+ Entry.RecordNumber.ToString + ","

+ Entry.Field + ","

+ Entry.ErrorMessage);

If i >= 10 - 1 Then

Break;

End If;

End For;

End Sub Main;

After executing the example factors are exported from the C:\Fixed.xlsx file. Attributes are recognized by fixed positions.

See also:

ICubeMetaLoaderBindingParser