CreateQuery(Value: IMatrix): IMatrixQuery;
CreateQuery(Value: Prognoz.Platform.Interop.Matrix.IMatrix): Prognoz.Platform.Interop.Matrix.IMatrixQuery;
Value. Матрица, для которой будет создан запрос.
Метод CreateQuery создает запрос на получение информации о существующих данных в указанной матрице.
Для выполнения примера предполагается наличие базы данных временных рядов с идентификатором «CUBE».
Добавьте ссылки на системные сборки Metabase, Matrix, Dimensions, Cubes, ForeSystem, ForeCollections.
Sub Main;
Var
Mb: IMetabase;
ObjDes: IMetabaseObjectDescriptor;
CubDest: ICubeInstanceDestination;
Sels, SelsAll: IDimSelectionSet;
sDim: String;
Ei: Integer;
Sel: IDimSelection;
Matrix, MatrixRes: IMatrix;
MatFac: MatrixFactory;
Query: IMatrixQuery;
Filter: IMatrixQueryFilter;
ArList: IArrayList;
Result: IMatrixQueryResult;
Ranges: IMatrixQueryFilterRanges;
Range: IMatrixQueryFilterRange;
Begin
Mb := MetabaseClass.Active;
ObjDes := Mb.ItemById("CUBE");
CubDest := (ObjDes.Open(Null) As ICubeInstance).Destinations.DefaultDestination;
Sels := CubDest.CreateDimSelectionSet;
For Each Sel In Sels Do
sDim := Sel.Dimension.Name;
If sDim = "Calendar" Then
For Ei:=10 To 50 Do
Sel.SelectElement(Ei, False);
End For;
Else
Sel.SelectAll;
End If;
End For;
SelsAll := Sels;
Matrix := CubDest.Execute(SelsAll);
//создаем запрос на получении информации о существующих данных в указанной матрице
MatFac := New MatrixFactory.Create;
Query := (MatFac As IMatrixFactory).CreateQuery(Matrix);
//настраиваем параметры фильтрации данных матрицы
Filter := Query.Filter;
//получаем коллекцию диапазонов фильтрации данных матрицы
Ranges := Filter.Ranges;
//добавляем диапазон фильтрации данных
Range := Ranges.Add;
Range.Max := 10;
Range.Min := 0;
//определяем отметку коллекции справочников для запроса матрицы
Filter.Selection := Sels;
//получаем динамический массив элементов фильтра
ArList := Filter.Values;
//получаем количество элементов в массиве
debug.WriteLine(ArList.Count);
//проверяем, ту ли матрицу мы получили
If Matrix = Query.Matrix Then
debug.WriteLine("Матрицы совпадают");
End If;
//определяем параметры итератора матрица
Query.Select_;
//выполняем запрос
Query.Execute;
//получаем результат запроса
Result := Query.Result;
//результат выполнения запроса в виде матрицы
MatrixRes := Result.Matrix;
End Sub Main;
Для выполнения примера предполагается наличие базы данных временных рядов с идентификатором «CUBE».
Добавьте ссылки на системные сборки Metabase, Matrix, Dimensions, Cubes, ForeSystem, ForeCollections.
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.ForeCollections;
Sub Main(Params: StartParams);
Var
Mb: IMetabase;
ObjDes: IMetabaseObjectDescriptor;
CubDest: ICubeInstanceDestination;
Sels, SelsAll: IDimSelectionSet;
sDim: String;
Ei: Uinteger;
Sel: IDimSelection;
Matrix, MatrixRes: IMatrix;
MatFac: IMatrixModelFactory;
Query: IMatrixQuery;
Filter: IMatrixQueryFilter;
ArList: IArrayList;
Result: IMatrixQueryResult;
Ranges: IMatrixQueryFilterRanges;
Range: IMatrixQueryFilterRange;
Begin
Mb := Params.Metabase;
ObjDes := Mb.ItemById["CUBE"];
CubDest := (ObjDes.Open(Null) As ICubeInstance).Destinations.DefaultDestination;
Sels := CubDest.CreateDimSelectionSet();
For Each Sel In Sels Do
sDim := Sel.Dimension.Name;
If sDim = "Calendar" Then
For Ei:=10 To 50 Do
Sel.SelectElement(Ei, False);
End For;
Else
Sel.SelectAll();
End If;
End For;
SelsAll := Sels;
Matrix := CubDest.Execute(SelsAll,1);
//создаем запрос на получении информации о существующих данных в указанной матрице
MatFac := New MatrixFactory.Create();
Query := (MatFac As IMatrixFactory).CreateQuery(Matrix);
//настраиваем параметры фильтрации данных матрицы
Filter := Query.Filter;
//получаем коллекцию диапазонов фильтрации данных матрицы
Ranges := Filter.Ranges;
//добавляем 1ый диапазон фильтрации данных
Range := Ranges.Add();
Range.Max := 10000000;
Range.Min := 0;
//определяем отметку коллекции справочников для запроса матрицы
Filter.Selection := Sels;
//получаем динамический массив элементов фильтра
ArList := Filter.Values;
//получаем количество элементов в массиве
System.Diagnostics.Debug.WriteLine(ArList.Count);
//проверяем, тули матрицу мы получили
If Matrix = Query.Matrix Then
System.Diagnostics.Debug.WriteLine("Матрицы совпадают");
End If;
//определяем параметры итератора матрица
Query.@Select();
//выполняем запрос
Query.Execute();
//получаем результат запроса
Result := Query.Result;
//результат выполнения запроса в виде матрицы
MatrixRes := Result.Matrix;
End Sub;
End Class;
См. также: