FactDataId: String;
Свойство FactDataId определяет идентификаторы атрибутов показателей, значения по которым необходимо загрузить либо сохранить.
Идентификаторы атрибутов в списке разделяются знаком «;».
Примечание. Если при сохранении необходимо пропустить какой-либо атрибут, полученный при извлечении данных, то в данном свойстве атрибут не указывается и вместо него просто ставится разделитель «;».
Пример: для извлечения данных указан следующий список атрибутов «FactDataId:="ATTR1;ATTR2;ATTR3"». Для сохранения данных только по третьему атрибуту необходимо в данном свойстве задать следующее значение «FactDataId:=";;ATTR3"».
Для выполнения примера предполагается наличие в репозитории базы данных временных рядов с идентификатором «OBJ_RUBRICATOR». В базе созданы дополнительные атрибуты:
COUNTRY - атрибут, являющийся ссылкой на справочник стран.
USER_ATTR - пользовательский атрибут, содержащий какие-либо данные целого типа.
Sub Main;
Var
MB: IMetabase;
RubInst: IRubricatorInstance;
Cub: ICubeInstance;
Dest: ICubeInstanceDestination;
Exe: ICubeInstanceDestinationExecutor;
Mat, DataMatr: IMatrix;
It: IMatrixIterator;
i: Integer;
Sto: ICubeInstanceStorage;
Begin
MB := MetabaseClass.Active;
RubInst := MB.ItemById("OBJ_RUBRICATOR").Open(Null) As IRubricatorInstance;
Cub := RubInst As ICubeInstance;
Dest := Cub.Destinations.DefaultDestination;
Exe := Dest.CreateExecutor;
//Атрибуты показателей
(Exe As IRubricatorFactorIO).FactDataId := "FACTOR;COUNTRY;USER_ATTR";
//Атрибуты наблюдения
(Exe As IRubricatorFactorIO).ValueId := "FACTOR;VL";
Exe.PrepareExecute(Null);
Exe.PerformExecute;
Mat := Exe.Matrix;
//Матрица
DataMatr := (CubeClass.ExecuteResult(Mat) As IRubricatorExecuteResult).Factors;
It := DataMatr.CreateIterator;
It.Move(IteratorDirection.First);
While It.Valid Do
//Ищем показатель с указанными значениями атрибутов
If (It.Values(1) = 94) And (It.Values(2) = 1) Then
i := It.Values(0);
Break;
End If;
It.Move(IteratorDirection.Next);
End While;
Mat.ValueFlag := 1;
DataMatr := (CubeClass.ExecuteResult(Mat) As IRubricatorExecuteResult).Values;
It := DataMatr.CreateIterator;
It.Move(IteratorDirection.First);
While It.Valid Do
//Ищем все значения по найденному показателю и меняем их на единицу
If It.Values(0) = i Then
It.Values(1) := (It.Values(1) As Double) + 1;
It.ValueFlag := 1;
Else
It.ValueFlag := 0;
End If;
It.Move(IteratorDirection.Next);
End While;
Sto := Dest.CreateStorage;
(Sto As IRubricatorFactorIO).ValueId := ";VL";
//Сохраняем новые значения
Sto.SaveMatrix(Mat, 1);
End Sub Main;
После выполнения примера будут получены данные по атрибутам показателей «FACTOR», «COUNTRY» и «USER_ATTR». Будет найден показатель, для которого значение атрибута «COUNTRY» равно «94» и значение атрибута «USER_ATTR» равно «1». По найденному показателю все значения будут увеличены на единицу. После изменения обновленные данные будут сохранены обратно в базу данных временных рядов.
См. также: