ICubeExecuteFilterFunctionTop.Function_

Синтаксис Fore

Function_: String;

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

@Function: String;

Описание

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

Комментарии

Допустимые значения:

Описание указанных функций доступно в документации по языку многомерных запросов MDX.

Пример 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;
    TopFunction: ICubeExecuteFilterFunctionTop;
    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//По строкам
            TopFunction := (FilterSetup As ICubeExecuteFilterFunctionFactory).CreatePredefined(CubeExecuteFilterFunctionPredefined.Top) As ICubeExecuteFilterFunctionTop;
            TopFunction.Function_ := "TOPSUM";
            TopFunction.Argument := "10000";
            TopFunction.Value := "[Measures].[Reseller Order Count]";
            FilterItem := FilterSetup.Add;
            FilterItem.Function_ := TopFunction As ICubeExecuteFilterFunction;
            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. При расчете результирующий набор данных будет отфильтрован: в набор попадут только максимальные значения, сумма которых составляет не менее 10000.

Пример 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;
    TopFunction: ICubeExecuteFilterFunctionTop;
    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//По строкам
            TopFunction := (FilterSetup As ICubeExecuteFilterFunctionFactory).CreatePredefined(CubeExecuteFilterFunctionPredefined.cuexfifuprTop) As ICubeExecuteFilterFunctionTop;
            TopFunction.@Function := "TOPSUM";
            TopFunction.Argument := "10000";
            TopFunction.Value := "[Measures].[Reseller Order Count]";
            FilterItem := FilterSetup.Add();
            FilterItem.@Function := TopFunction As ICubeExecuteFilterFunction;
            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;

См. также:

ICubeExecuteFilterFunctionTop