IMatrixFactory.CreateQuery

Синтаксис

CreateQuery(Value: IMatrix): IMatrixQuery;

Параметры

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

Описание

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

Пример

Для выполнения примера предполагается наличие куба с идентификатором CUBE.

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

Sub UserProc;
Var
    Mb: IMetabase;
    CubeDest: ICubeInstanceDestination;
    Executor: ICubeInstanceDestinationExecutor;
    Sels, ResSels: IDimSelectionSet;
    Sel: IDimSelection;
    Factory: IMatrixFactory;
    Matrix: IMatrix;
    Query: IMatrixQuery;
    Filter: IMatrixQueryFilter;
    Range: IMatrixQueryFilterRange;
    Result: IMatrixQueryResult;
Begin
    Mb := MetabaseClass.Active;
    // Открытие куба
    CubeDest := (Mb.ItemById("CUBE").Open(NullAs ICubeInstance).Destinations.DefaultDestination;
    Executor := CubeDest.CreateExecutor;
    // Создание отметки
    Sels := CubeDest.CreateDimSelectionSet;
    For Each Sel In Sels Do
        Sel.SelectAll;
    End For;
    // Получение матрицы с данными куба
    Executor.PrepareExecute(Sels);
    Executor.PerformExecuteO(CubeInstanceDestinationExecutorOptions.Cached);
    Matrix := Executor.Matrix;
    // Создание запроса
    Factory := New MatrixFactory.Create As IMatrixFactory;
    Query := Factory.CreateQuery(Matrix);
    Filter := Query.Filter;
    // Добавление диапазона для фильтрации данных
    Range := Filter.Ranges.Add;
    Range.Min := 1;
    Range.Max := 10;
    // Отметка для фильтрации
    Filter.Selection := Sels;
    // Выполнение запроса
    Query.Execute;
    Result := Query.Result;
    Debug.WriteLine("Минимальное значение в отфильтрованной матрице: " + Result.MinValue.ToString);
    Debug.WriteLine("Максимальное значение в отфильтрованной матрице: " + Result.MaxValue.ToString);
    // Результирующая отметка, полученная путём изменения исходной отметки таким образом,
    // чтобы в матрице остались только данные из фильтра
    ResSels := CubeDest.CreateDimSelectionSet;
    Result.GetSelectionSet(ResSels);
    For Each Sel In ResSels Do
        Debug.WriteLine("Измерение: " + (Sel.Dimension.Dimension As IMetabaseObject).Id + ". Отмечено элементов: " + Sel.SelectedCount.ToString + " из " + Sel.Dimension.Elements.Count.ToString);
    End For;
End Sub UserProc;

При выполнении примера будет открыт куб и получена его матрица с данными по полной отметке. Будет создан запрос, получающий информацию о данных из матрицы, в запросе определён фильтр, отбирающий данные в заданном диапазоне. После выполнения запроса будет получена отметка, которая соответствует матрице с отфильтрованными данными. Информация об отметке будет выведена в консоль среды разработки.

См. также:

IMatrixFactory