ICubeExecuteSetup.Filter

Синтаксис Fore

Filter: ICubeExecuteFilterSetup;

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

Filter: Prognoz.Platform.Interop.Cubes.ICubeExecuteFilterSetup;

Описание

Свойство Filter возвращает коллекцию фильтров по измерениям, которые будут применяться при расчете куба.

Комментарии

Свойство актуально только при работе с кубами ADOMD.

Пример Fore

Для выполнения примера предполагается наличие в репозитории каталога ADOMD с идентификатором «ADOMDTest», в этом каталоге имеется куб ADOMD - «SALES». В структуре куба должны присутствовать измерения на базе справочников ADOMD с идентификаторами «DATE» и «COUNTRY», в измерении фактов имеется показатель «[Measures].[Reseller Order Count]».

Sub UserProc;
Var
    Mb: IMetabase;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    CubeExecSet: ICubeExecuteSetup;
    FilterSetup: ICubeExecuteFilterSetup;
    DimSetup: ICubeExecuteDimSetup;
    FilterItem: ICubeExecuteFilterItem;
    FilterFunction: ICubeExecuteFilterFunction;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
Begin
    Mb := MetabaseClass.Active;
    CubeInst := MB.ItemByIdNamespace("SALES", MB.GetObjectKeyById("ADOMDTest")).Open(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    Sels := DestInst.CreateDimSelectionSet;
    CubeExecSet := Sels As ICubeExecuteSetup;
    //Получение объекта для настройки фильтрации по измерениям
    FilterSetup := CubeExecSet.Filter;
    //Распределение измерений по группам, задание отметки и установка фильтра измерения
    For Each DimSetup In CubeExecSet Do
        If DimSetup.Id = "DATE" Then
            DimSetup.Selection.SelectAll;
            DimSetup.GroupIndex := 2//По строкам
            FilterFunction := (FilterSetup As ICubeExecuteFilterFunctionFactory).CreatePredefined(CubeExecuteFilterFunctionPredefined.Filter);
            (FilterFunction As ICubeExecuteFilterFunctionFilter).Condition := "[Measures].[Reseller Order Count] > 100";
            FilterItem := FilterSetup.Add;
            FilterItem.Function_ := FilterFunction;
            FilterItem.Dimension := DimSetup;
        Elseif DimSetup.Id = "COUNTRY" Then
            DimSetup.Selection.SelectElement(1False);
            DimSetup.GroupIndex := 1//По столбцам
        Else
            DimSetup.Selection.SelectElement(0False);
            DimSetup.GroupIndex := 0//Остальные измерения в фиксированные
        End If;
    End For;
    //Подготовка к расчету
    Exec := DestInst.CreateExecutor;
    Exec.PrepareExecute(Sels);
    //Расчет
    Exec.PerformExecute;
    //Получение матрицы с результатами расчета
    Matr := Exec.Matrix;
End Sub UserProc;

При выполнении примера будет осуществлена подготовка и расчет указанного куба ADOMD. При расчете результирующий набор данных будет отфильтрован в соответствии с заданным условием: [Measures].[Reseller Order Count] > 100.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Matrix;
Imports Prognoz.Platform.Interop.Metabase;

Public Shared Sub Main(Params: StartParams);
Var
    Mb: IMetabase;
    CubeInst: ICubeInstance;
    DestInst: ICubeInstanceDestination;
    Sels: IDimSelectionSet;
    CubeExecSet: ICubeExecuteSetup;
    FilterSetup: ICubeExecuteFilterSetup;
    DimSetup: ICubeExecuteDimSetup;
    FilterItem: ICubeExecuteFilterItem;
    FilterFunction: ICubeExecuteFilterFunction;
    Exec: ICubeInstanceDestinationExecutor;
    Matr: IMatrix;
Begin
    Mb := Params.Metabase;
    CubeInst := MB.ItemByIdNamespace["SALES", MB.GetObjectKeyById("ADOMDTest")].Open(NullAs ICubeInstance;
    DestInst := CubeInst.Destinations.DefaultDestination;
    Sels := DestInst.CreateDimSelectionSet();
    CubeExecSet := Sels As ICubeExecuteSetup;
    //Получение объекта для настройки фильтрации по измерениям
    FilterSetup := CubeExecSet.Filter;
    //Распределение измерений по группам, задание отметки и установка фильтра измерения
    For Each DimSetup In CubeExecSet Do
        If DimSetup.Id = "DATE" Then
            DimSetup.Selection.SelectAll();
            DimSetup.GroupIndex := 2//По строкам
            FilterFunction := (FilterSetup As ICubeExecuteFilterFunctionFactory).CreatePredefined(CubeExecuteFilterFunctionPredefined.cuexfifuprFilter);
            (FilterFunction As ICubeExecuteFilterFunctionFilter).Condition := "[Measures].[Reseller Order Count] > 100";
            FilterItem := FilterSetup.Add();
            FilterItem.@Function := FilterFunction;
            FilterItem.Dimension := DimSetup;
        Elseif DimSetup.Id = "COUNTRY" Then
            DimSetup.Selection.SelectElement(1False);
            DimSetup.GroupIndex := 1//По столбцам
        Else
            DimSetup.Selection.SelectElement(0False);
            DimSetup.GroupIndex := 0//Остальные измерения в фиксированные
        End If;
    End For;
    //Подготовка к расчету
    Exec := DestInst.CreateExecutor();
    Exec.PrepareExecute(Sels);
    //Расчет
    Exec.PerformExecute(False);
    //Получение матрицы с результатами расчета
    Matr := Exec.Matrix;
End Sub;

См. также:

ICubeExecuteSetup