Function_: String;
@Function: String;
The Function_ property determines the function that filters by selecting greatest or least values.
Available values:
TOPCOUNT.
TOPPERCENT.
BOTTOMPERCENT.
TOPSUM.
BOTTOMSUM.
Description of the specified functions is available in documentation for language of multidimensional MDX queries.
Executing the example requires that the repository contains an ADOMD catalog with the ADOMDTest identifier, this catalog contains the SALES ADOMD cube. The cube structure must have dimensions based on ADOMD dictionaries with the DATE and COUNTRY identifiers, facts dimension contains the [Measures].[Reseller Order Count] factor.
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(Null) As ICubeInstance;
DestInst := CubeInst.Destinations.DefaultDestination;
Sels := DestInst.CreateDimSelectionSet;
CubeExecSet := Sels As ICubeExecuteSetup;
//Get object to set up filtering by dimensions
FilterSetup := CubeExecSet.Filter;
//Distribute dimensions by groups, set selection and dimension filter
For Each DimSetup In CubeExecSet Do
If DimSetup.Id = "DATE" Then
DimSetup.Selection.SelectAll;
DimSetup.GroupIndex := 2; //By rows
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(1, False);
DimSetup.GroupIndex := 1; //By columns
Else
DimSetup.Selection.SelectElement(0, False);
DimSetup.GroupIndex := 0; //Other dimensions into fixed ones
End If;
End For;
//Prepare for calculation
Exec := DestInst.CreateExecutor;
Exec.PrepareExecute(Sels);
//Calculation
Exec.PerformExecute;
//Get matrix with calculation results
Matr := Exec.Matrix;
End Sub UserProc;
On executing the example the specified ADOMD cube is prepared and calculated. On calculating the output data set is filtered: only the maximum values, which sum is at least 10000, are included to the set.
The requirements and result of the Fore.NET example execution match with those in the Fore example.
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(Null) As ICubeInstance;
DestInst := CubeInst.Destinations.DefaultDestination;
Sels := DestInst.CreateDimSelectionSet();
CubeExecSet := Sels As ICubeExecuteSetup;
//Get object to set up filtering by dimensions
FilterSetup := CubeExecSet.Filter;
//Distribute dimensions by groups, set selection and dimension filter
For Each DimSetup In CubeExecSet Do
If DimSetup.Id = "DATE" Then
DimSetup.Selection.SelectAll();
DimSetup.GroupIndex := 2; //By rows
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(1, False);
DimSetup.GroupIndex := 1; //By columns
Else
DimSetup.Selection.SelectElement(0, False);
DimSetup.GroupIndex := 0; //Other dimensions into fixed ones
End If;
End For;
//Prepare for calculation
Exec := DestInst.CreateExecutor();
Exec.PrepareExecute(Sels);
//Calculation
Exec.PerformExecute(False);
//Get matrix with calculation results
Matr := Exec.Matrix;
End Sub;
See also: