IRubricatorFactorExecutor.SetAttrCombination

Синтаксис Fore

SetAttrCombination(Attributes: String; Value: Array);

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

SetAttrCombination(Attributes: string; Value: System.Array);

Параметры

Attributes. Идентификаторы атрибутов, разделенные знаком «;»;

Value. Массив значений атрибутов, указанных в параметре Attributes.

Описание

Метод SetAttrCombination задает сочетание атрибутов, по которым будет проходить извлечение данных временных рядов.

Комментарии

Метод SetAttrCombination позволяет извлекать лишь ряды с заданным сочетанием атрибутов. Если извлекать временные ряды с помощью ограничения отметки атрибутов, то будут выбраны ряды, содержащие все возможные сочетания атрибутов.

Например, есть атрибуты «Country» и «Indicator». Если задать отметку Country = Afghanistan, Albania; Indicator = BCA, BEA, то будут извлечены четыре ряда, содержащие все возможные сочетания данных атрибутов. Если использовать метод SetAttrCombination и задать сочетание атрибутов Afghanistan|BCA и Albania|BEA, то будут извлечены только два ряда, содержащих именно такие атрибуты.

Пример Fore

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

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

Sub uProc;
Var
    MB: IMetabase;
    RubDesc, DictDescr: IMetabaseObjectDescriptor;
    RubrIn: IRubricatorInstance;
    Cub: ICubeInstance;
    Dest: ICubeInstanceDestination;
    FactorExec: IRubricatorFactorExecutor;
    Exec: ICubeInstanceDestinationExecutor;
    Mat: IMatrix;
    Ite: IMatrixIterator;
    FactAttr: IMetaAttributes;
    
    CountryElements, IndicatorElements: IDimElements;
    SelArr: Array[2Of Variant;
    TmpArr: Array[2Of Integer;
Begin
    // Получим репозиторий
    MB := MetabaseClass.Active;
    // Получим базу данных временных рядов
    RubDesc := MB.ItemById("TSDB_MLNG");
    RubrIn := RubDesc.Open(NullAs IRubricatorInstance;
    // Получим атрибуты временных рядов
    FactAttr := RubrIn.Facts.Dictionary.Attributes;
    // Получим значения атрибута COUNTRY
    DictDescr := FactAttr.FindById("COUNTRY").ValuesObject;
    CountryElements := (DictDescr.Open(NullAs IDimInstance).Elements;
    // Получим значения атрибута INDICATOR
    DictDescr := FactAttr.FindById("INDICATOR").ValuesObject;
    IndicatorElements := (DictDescr.Open(NullAs IDimInstance).Elements;
    // Создадим массив с сочетанием атрибутов для выборки
    TmpArr[0] := CountryElements.AttributeValue(10As Integer;
    TmpArr[1] := IndicatorElements.AttributeValue(10As Integer;
    SelArr[0] := TmpArr;
    TmpArr[0] := CountryElements.AttributeValue(20As Integer;
    TmpArr[1] := IndicatorElements.AttributeValue(20As Integer;
    SelArr[1] := TmpArr;
    // Создадим объект для извлечения данных из базы данных временных рядов 
    Cub := RubrIn As ICubeInstance;
    Dest := Cub.Destinations.DefaultDestination;
    Exec := Dest.CreateExecutor;
    FactorExec := Exec As IRubricatorFactorExecutor;
    // Указываем, что не извлекаем данные пустых и удаленных рядов
    FactorExec.WhereIsDeleted := False;
    FactorExec.WhereIsEmpty := False;
    // Задаем сочетание атрибутов для выборки
    FactorExec.SetAttrCombination("COUNTRY;INDICATOR", SelArr);
    FactorExec.FactDataId := "FACTOR;INDICATOR;COUNTRY";
    // Извлекаем данные и выводим их в окно консоли
    Exec := FactorExec.AsCubeExecutor;
    Exec.PrepareExecute(Null);
    Exec.PerformExecute;
    Mat := Exec.Matrix;
    Ite := Mat.CreateIterator;
    Ite.Move(IteratorDirection.First);
    While Ite.Valid Do
        Debug.WriteLine(Ite.Value);
        Ite.Move(IteratorDirection.Next);
    End While;
End Sub uProc;

В результате выполнения примера в окно консоли будут выведены значения временных рядов, образованных сочетанием первых двух элементов из справочников, на которые ссылаются атрибуты «COUNTRY» и «INDICATOR». Пустые и удаленные атрибуты будут исключены из выборки.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Rds;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    RubDesc, DictDescr: IMetabaseObjectDescriptor;
    RubrIn: IRubricatorInstance;
    Cub: ICubeInstance;
    Dest: ICubeInstanceDestination;
    FactorExec: IRubricatorFactorExecutor;
    Exec: ICubeInstanceDestinationExecutor;
    Mat: IMatrix;
    Ite: IMatrixIterator;
    FactAttr: IMetaAttributes;
    CountryElements, IndicatorElements: IDimElements;
    SelArr: Array[2Of object;
    TmpArr: Array[2Of Integer;
Begin
    // Получим репозиторий
    MB := Params.Metabase;
    // Получим базу данных временных рядов
    RubDesc := MB.ItemById["TSDB_MLNG"];
    RubrIn := RubDesc.Open(NullAs IRubricatorInstance;
    // Получим атрибуты временных рядов
    FactAttr := RubrIn.Facts.Dictionary.Attributes;
    // Получим значения атрибута COUNTRY
    DictDescr := FactAttr.FindById("COUNTRY").ValuesObject;
    CountryElements := (DictDescr.Open(NullAs IDimInstance).Elements;
        // Получим значения атрибута INDICATOR
    DictDescr := FactAttr.FindById("INDICATOR").ValuesObject;
    IndicatorElements := (DictDescr.Open(NullAs IDimInstance).Elements;
    // Создадим массив с сочетанием атрибутов для выборки
    TmpArr[0] := CountryElements.AttributeValue[10As Integer;
    TmpArr[1] := IndicatorElements.AttributeValue[10As Integer;
    SelArr[0] := TmpArr;
    TmpArr[0] := CountryElements.AttributeValue[20As Integer;
    TmpArr[1] := IndicatorElements.AttributeValue[20As Integer;
    SelArr[1] := TmpArr;
    // Создадим объект для извлечения данных из базы данных временных рядов 
    Cub := RubrIn As ICubeInstance;
    Dest := Cub.Destinations.DefaultDestination;
    Exec := Dest.CreateExecutor();
    FactorExec := Exec As IRubricatorFactorExecutor;
    // Указываем, что не извлекаем данные пустых и удаленных рядов
    FactorExec.WhereIsDeleted := False;
    FactorExec.WhereIsEmpty := False;
    // Задаем сочетание атрибутов для выборки
    FactorExec.SetAttrCombination("COUNTRY;INDICATOR", SelArr);
    FactorExec.FactDataId := "FACTOR;INDICATOR;COUNTRY";
    // Извлекаем данные и выводим их в окно консоли
    Exec := FactorExec.AsCubeExecutor();
    Exec.PrepareExecute(Null);
    Exec.PerformExecute(False);
    Mat := Exec.Matrix;
    Ite := Mat.CreateIterator();
    Ite.Move(IteratorDirection.itdFirst);
    While Ite.Valid Do
        System.Diagnostics.Debug.WriteLine(Ite.Value);
        Ite.Move(IteratorDirection.itdNext);
    End While;
End Sub;

См. также:

IRubricatorFactorExecutor