IMatrixFactory.CreateQuery

Синтаксис Fore

CreateQuery(Value: IMatrix): IMatrixQuery;

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

CreateQuery(Value: Prognoz.Platform.Interop.Matrix.IMatrix): Prognoz.Platform.Interop.Matrix.IMatrixQuery;

Параметры

Value. Матрица, для которой будет создан запрос.

Описание

Метод CreateQuery создает запрос на получение информации о существующих данных в указанной матрице.

Пример Fore

Для выполнения примера предполагается наличие базы данных временных рядов с идентификатором «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(NullAs 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;

Пример Fore.NET

Для выполнения примера предполагается наличие базы данных временных рядов с идентификатором «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(NullAs 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;

См. также:

IMatrixFactory