IValidationCrossDatabase.Mappings

Синтаксис Fore

Mappings: IValidationCrossDatabaseMappings;

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

Mappings: Prognoz.Platform.Interop.Ms.IValidationCrossDatabaseMappings;

Описание

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

Комментарии

При настройке валидации «Сравнение между базами данных» по умолчанию считается, что все идентифицирующие атрибуты привязаны по одинаковым идентификаторам. Свойство Mappings используется для создания собственных привязок и фиксации значений свободных атрибутов.

Пример Fore

Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «TSDB_TARGET», содержащей обязательный пользовательские атрибут рядов с идентификатором «CITY». Также база данных временных рядов должна содержать правило валидации с идентификатором «VALIDATION_CROSSDATABASE». В репозитории должна быть база данных временных рядов с идентификатором «TSDB_COMPARATOR», содержащая обязательный пользовательский атрибут рядов с идентификатором «CENTRAL_CITY». Атрибуты «CITY» и «CENTRAL_CITY» должны ссылаться на один и тот же справочник. Идентификаторы остальных обязательных пользовательских атрибутов рядов в базах данных временных рядов должны совпадать.

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

Sub UserProc;
Var
    Mb: IMetabase;
    Descr: IMetabaseObjectDescriptor;
    RubTagret, RubComparator: IRubricator;
    ValidObj: IMetabaseObject;
    ValidFilter: IValidationFilter;
    CrossDb: IValidationCrossDatabase;
    ComparisonValue: IValidationComparisonValue;
    ValidExecSett: IValidationExecuteSettings;
    ValidExecRun: IValidationExecRun;
    SelValList: IValidationSelectionValueList;
    SelVal: IValidationSelectionValue;
    AttrMappings: IValidationCrossDatabaseMappings;
    DimTagret, DimComparator: IDimensionModel;
    InstTagret, InstComparator: IDimInstance;
    SelTagret, SelComparator: IDimSelection;
    AtMapping: IValidationCrossDatabaseMapping;
    i: Integer;
Begin
    Mb := MetabaseClass.Active;
    // Получаем сравниваемую базу данных временных рядов и ту,
    // с которой будем выполнять сравнение
    Descr := Mb.ItemById("TSDB_TARGET");
    RubTagret := Descr.Bind As IRubricator;
    RubComparator := Mb.ItemById("TSDB_COMPARATOR").Bind As IRubricator;
    // Получаем правило валидации
    ValidObj := Mb.ItemByIdNamespace("VALIDATION_CROSSDATABASE", Descr.Key).Edit;
    ValidFilter := ValidObj As IValidationFilter;
    ValidFilter.Level := DimCalendarLevel.None;
    ValidFilter.Kind := ValidationDetailsKind.CrossDatabase;
    CrossDb := ValidFilter.Details As IValidationCrossDatabase;
    // Настраиваем параметры сравнения данных
    ComparisonValue := CrossDb.ComparisonValue;
    ComparisonValue.ComparisonOperator := ValidationComparisonOperator.Less;
    ComparisonValue.Percentage := False;
    ComparisonValue.Value1 := 0.5;
    // Задаем тип изменения метаданных для сравниваемых значений
    CrossDb.ComparisonType := ValidationRevisionMetadataComparisonType.Change;
    // Указываем базу данных временных рядов, с которой будем выполнять сравнение
    CrossDb.Comparator := RubComparator As IVariableStub;
    // Удаляем существующие привязки атрибутов
    AttrMappings := CrossDb.Mappings;
    If AttrMappings.Count > 0 Then
        AttrMappings.Clear;
    End If;
    // Получаем справочники, на которых строятся атрибуты «CITY» и «CENTRAL_CITY»
    Descr := RubTagret.Facts.Attributes.FindById("CITY").ValuesObject;
    DimTagret := Descr.Bind As IDimensionModel;
    InstTagret := Descr.Open(NullAs IDimInstance;
    Descr := RubComparator.Facts.Attributes.FindById("CENTRAL_CITY").ValuesObject;
    DimComparator := Descr.Bind As IDimensionModel;
    InstComparator := Descr.Open(NullAs IDimInstance;
    // Получаем отметку данных справочников
    SelTagret := InstTagret.CreateSelection;
    SelComparator := InstComparator.CreateSelection;
    // Задаем привязку атрибута «CITY» к атрибуту «CENTRAL_CITY»
    AtMapping := AttrMappings.Add;
    AtMapping.TargetDim := DimTagret;
    AtMapping.TargetSelectionMapping := SelTagret;
    AtMapping.ComparatorDim := DimComparator;
    AtMapping.ComparatorSelectionMapping := SelComparator;
    AtMapping.Type := ValidationCrossDatabaseMappingType.Attributes;
    // Задаем сравниваемые данные
    SelValList := CrossDb.SelectionTargetData;
    SelValList.Clear;
    SelVal := SelValList.Add(SelTagret);
    SelTagret.DeselectAll;
    SelTagret.SelectElement(1False);
    SelVal.Value := SelTagret.ToVariant;
    // Задаем данные из базы данных временных рядов,
    // с которыми будет производиться сравнение
    SelValList := CrossDb.SelectionComparatorData;
    SelValList.Clear;
    SelVal := SelValList.Add(SelComparator);
    SelComparator.DeselectAll;
    SelComparator.SelectElement(0False);
    SelVal.Value := SelComparator.ToVariant;
    // Удаляем фильтр валидации
    CrossDb.SelectionFilter.Clear;
    // Сохраняем изменения и рассчитываем правило валидации
    ValidObj.Save;
    ValidExecSett := New ValidationExecuteSettings.Create;
    ValidExecRun := ValidFilter.Execute(ValidExecSett);
End Sub UserProc;

В результате выполнения примера будет настроено правило валидации «Сравнение с базой данных временных рядов»:

Правило будет запущено, результаты выполнения сохранены в базе данных временных рядов.

Пример Fore.NET

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

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

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    Descr: IMetabaseObjectDescriptor;
    RubTagret, RubComparator: IRubricator;
    ValidObj: IMetabaseObject;
    ValidFilter: IValidationFilter;
    CrossDb: IValidationCrossDatabase;
    ComparisonValue: IValidationComparisonValue;
    ValidExecSett: ValidationExecuteSettings;
    ValidExecRun: IValidationExecRun;
    SelValList: IValidationSelectionValueList;
    SelVal: IValidationSelectionValue;
    AttrMappings: IValidationCrossDatabaseMappings;
    DimTagret, DimComparator: IDimensionModel;
    InstTagret, InstComparator: IDimInstance;
    SelTagret, SelComparator: IDimSelection;
    AtMapping: IValidationCrossDatabaseMapping;
    i: Integer;
Begin
    Mb := Params.Metabase;
    // Получаем сравниваемую базу данных временных рядов и ту,
    // с которой будем выполнять сравнение
    Descr := Mb.ItemById["TSDB_TARGET"];
    RubTagret := Descr.Bind() As IRubricator;
    RubComparator := Mb.ItemById["TSDB_COMPARATOR"].Bind() As IRubricator;
    // Получаем правило валидации
    ValidObj := Mb.ItemByIdNamespace["VALIDATION_CROSSDATABASE", Descr.Key].Edit();
    ValidFilter := ValidObj As IValidationFilter;
    ValidFilter.Level := DimCalendarLevel.dclNone;
    ValidFilter.Kind := ValidationDetailsKind.vdkCrossDatabase;
    CrossDb := ValidFilter.Details As IValidationCrossDatabase;
    // Настраиваем параметры сравнения данных
    ComparisonValue := CrossDb.ComparisonValue;
    ComparisonValue.ComparisonOperator := ValidationComparisonOperator.vcoLess;
    ComparisonValue.Percentage := False;
    ComparisonValue.Value1 := 0.5;
    // Задаем тип изменения метаданных для сравниваемых значений
    CrossDb.ComparisonType := ValidationRevisionMetadataComparisonType.vrcmtChange;
    // Указываем базу данных временных рядов, с которой будем выполнять сравнение
    CrossDb.Comparator := RubComparator As IVariableStub;
    // Удаляем существующие привязки атрибутов
    AttrMappings := CrossDb.Mappings;
    If AttrMappings.Count > 0 Then
        AttrMappings.Clear();
    End If;
    // Получаем справочники, на которых строятся атрибуты «CITY» и «CENTRAL_CITY»
    Descr := RubTagret.Facts.Attributes.FindById("CITY").ValuesObject;
    DimTagret := Descr.Bind() As IDimensionModel;
    InstTagret := Descr.Open(NullAs IDimInstance;
    Descr := RubComparator.Facts.Attributes.FindById("CENTRAL_CITY").ValuesObject;
    DimComparator := Descr.Bind() As IDimensionModel;
    InstComparator := Descr.Open(NullAs IDimInstance;
    // Получаем отметку данных справочников
    SelTagret := InstTagret.CreateSelection();
    SelComparator := InstComparator.CreateSelection();
    // Задаем привязку атрибута «CITY» к атрибуту «CENTRAL_CITY»
    AtMapping := AttrMappings.Add();
    AtMapping.TargetDim := DimTagret;
    AtMapping.TargetSelectionMapping := SelTagret;
    AtMapping.ComparatorDim := DimComparator;
    AtMapping.ComparatorSelectionMapping := SelComparator;
    AtMapping.Type := ValidationCrossDatabaseMappingType.vcdmtAttributes;
    // Задаем сравниваемые данные
    SelValList := CrossDb.SelectionTargetData;
    SelValList.Clear();
    SelVal := SelValList.Add(SelTagret);
    SelTagret.DeselectAll();
    SelTagret.SelectElement(1False);
    SelVal.Value := SelTagret.ToVariant();
    // Задаем данные из базы данных временных рядов,
    // с которыми будет производиться сравнение
    SelValList := CrossDb.SelectionComparatorData;
    SelValList.Clear();
    SelVal := SelValList.Add(SelComparator);
    SelComparator.DeselectAll();
    SelComparator.SelectElement(0False);
    SelVal.Value := SelComparator.ToVariant();
    // Удаляем фильтр валидации
    CrossDb.SelectionFilter.Clear();
    // Сохраняем изменения и рассчитываем правило валидации
    ValidObj.Save();
    ValidExecSett := New ValidationExecuteSettings.Create();
    ValidExecRun := ValidFilter.Execute(ValidExecSett);
End Sub;

См. также:

IValidationCrossDatabase