public String BuildDrillThrough(CellInfo cell)
        {
            String result = String.Empty;

            if (cell != null)
            {
                //var tuple = new Dictionary<String, MemberInfo>();
                //if (cell.ColumnMember != null && cell.ColumnMember != MemberInfo.Empty)
                //{
                //    cell.ColumnMember.CollectAncestors(tuple);
                //}
                //if (cell.RowMember != null && cell.RowMember != MemberInfo.Empty)
                //{
                //    cell.RowMember.CollectAncestors(tuple);
                //}

                //var statement = GetMoveAxesStatement(RefreshQuery());
                var statement = this.CreateWrappedStatement();
                var tuple     = cell.GetTuple();
                if (statement != null && tuple != null && tuple.Count > 0)
                {
                    statement.Axes.Clear();
                    List <MdxExpression> members = new List <MdxExpression>();
                    foreach (var member in tuple.Values)
                    {
                        var expr = new MdxObjectReferenceExpression(member.UniqueName, member.Caption);
                        members.Add(expr);
                    }

                    statement.Axes.Add(new MdxAxis("0", new MdxTupleExpression(members)));

                    using (MdxDomProvider provider = MdxDomProvider.CreateProvider())
                    {
                        StringBuilder sb = new StringBuilder();
                        provider.GenerateMdxFromDom(statement, sb, new MdxGeneratorOptions());
                        result = sb.ToString();
                    }

                    if (!String.IsNullOrEmpty(result))
                    {
                        result = String.Format("DRILLTHROUGH {0}", result);
                    }
                }
            }
            return(result);
        }
Esempio n. 2
0
    // $ANTLR end "property"


    // $ANTLR start "cube_specification"
    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:186:1: cube_specification returns [MdxObject value] : ( cube_name | ( NON VISUAL )? '(' select_statement_subcube ')' );
    public MdxObject cube_specification() // throws RecognitionException [1]
    {   

        MdxObject value = default(MdxObject);

        string cube_name18 = default(string);

        MdxSelectStatement select_statement_subcube19 = default(MdxSelectStatement);


        try 
    	{
            // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:187:2: ( cube_name | ( NON VISUAL )? '(' select_statement_subcube ')' )
            int alt25 = 2;
            int LA25_0 = input.LA(1);

            if ( (LA25_0 == PROPERTIES || LA25_0 == DIMENSION || LA25_0 == RANET_EXPRESSION || (LA25_0 >= ID && LA25_0 <= QUOTED_ID)) )
            {
                alt25 = 1;
            }
            else if ( (LA25_0 == NON || LA25_0 == 61) )
            {
                alt25 = 2;
            }
            else 
            {
                NoViableAltException nvae_d25s0 =
                    new NoViableAltException("", 25, 0, input);

                throw nvae_d25s0;
            }
            switch (alt25) 
            {
                case 1 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:187:4: cube_name
                    {
                    	PushFollow(FOLLOW_cube_name_in_cube_specification893);
                    	cube_name18 = cube_name();
                    	state.followingStackPointer--;

                    	 value = new MdxObjectReferenceExpression(cube_name18,cube_name18,MdxObjectReferenceKind.Cube); 

                    }
                    break;
                case 2 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:189:4: ( NON VISUAL )? '(' select_statement_subcube ')'
                    {
                    	// D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:189:4: ( NON VISUAL )?
                    	int alt24 = 2;
                    	int LA24_0 = input.LA(1);

                    	if ( (LA24_0 == NON) )
                    	{
                    	    alt24 = 1;
                    	}
                    	switch (alt24) 
                    	{
                    	    case 1 :
                    	        // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:189:6: NON VISUAL
                    	        {
                    	        	Match(input,NON,FOLLOW_NON_in_cube_specification904); 
                    	        	Match(input,VISUAL,FOLLOW_VISUAL_in_cube_specification906); 

                    	        }
                    	        break;

                    	}

                    	Match(input,61,FOLLOW_61_in_cube_specification911); 
                    	PushFollow(FOLLOW_select_statement_subcube_in_cube_specification913);
                    	select_statement_subcube19 = select_statement_subcube();
                    	state.followingStackPointer--;

                    	Match(input,62,FOLLOW_62_in_cube_specification915); 
                    	 value = select_statement_subcube19; 

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return value;
    }
Esempio n. 3
0
    // $ANTLR end "expression_property"


    // $ANTLR start "expression_simple"
    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:296:1: expression_simple returns [MdxExpression value] : ( expression_function | '(' expressions_list ')' | '{' ( expressions_list )? '}' | expression_case | STRING | INTEGER | FLOAT | identifier | RANET_EXPRESSION );
    public MdxExpression expression_simple() // throws RecognitionException [1]
    {   

        MdxExpression value = default(MdxExpression);

        IToken STRING31 = null;
        IToken INTEGER32 = null;
        IToken FLOAT33 = null;
        IToken RANET_EXPRESSION35 = null;
        MdxFunctionExpression expression_function27 = default(MdxFunctionExpression);

        List<MdxExpression> expressions_list28 = default(List<MdxExpression>);

        List<MdxExpression> expressions_list29 = default(List<MdxExpression>);

        MdxCaseExpression expression_case30 = default(MdxCaseExpression);

        string identifier34 = default(string);


        try 
    	{
            // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:297:2: ( expression_function | '(' expressions_list ')' | '{' ( expressions_list )? '}' | expression_case | STRING | INTEGER | FLOAT | identifier | RANET_EXPRESSION )
            int alt44 = 9;
            alt44 = dfa44.Predict(input);
            switch (alt44) 
            {
                case 1 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:297:4: expression_function
                    {
                    	PushFollow(FOLLOW_expression_function_in_expression_simple1668);
                    	expression_function27 = expression_function();
                    	state.followingStackPointer--;

                    	 value = expression_function27; 

                    }
                    break;
                case 2 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:298:4: '(' expressions_list ')'
                    {
                    	Match(input,61,FOLLOW_61_in_expression_simple1675); 
                    	PushFollow(FOLLOW_expressions_list_in_expression_simple1677);
                    	expressions_list28 = expressions_list();
                    	state.followingStackPointer--;

                    	Match(input,62,FOLLOW_62_in_expression_simple1679); 

                    		  value = null;
                    		  if  (expressions_list28!=null)
                    		   if (expressions_list28.Count==1)
                    		     value = expressions_list28[0] as MdxTupleExpression;
                    		  
                    		  if(value==null)
                    		    value = new MdxTupleExpression(expressions_list28); 
                    		    
                    		 

                    }
                    break;
                case 3 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:309:4: '{' ( expressions_list )? '}'
                    {
                    	Match(input,74,FOLLOW_74_in_expression_simple1688); 
                    	// D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:309:8: ( expressions_list )?
                    	int alt43 = 2;
                    	int LA43_0 = input.LA(1);

                    	if ( (LA43_0 == PROPERTIES || LA43_0 == DIMENSION || LA43_0 == INTEGER || LA43_0 == RANET_EXPRESSION || LA43_0 == NOT || (LA43_0 >= STRING && LA43_0 <= CASE) || (LA43_0 >= ID && LA43_0 <= QUOTED_ID) || LA43_0 == 61 || (LA43_0 >= 68 && LA43_0 <= 69) || LA43_0 == 74) )
                    	{
                    	    alt43 = 1;
                    	}
                    	switch (alt43) 
                    	{
                    	    case 1 :
                    	        // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:309:9: expressions_list
                    	        {
                    	        	PushFollow(FOLLOW_expressions_list_in_expression_simple1691);
                    	        	expressions_list29 = expressions_list();
                    	        	state.followingStackPointer--;


                    	        }
                    	        break;

                    	}

                    	Match(input,75,FOLLOW_75_in_expression_simple1695); 
                    	 value = new MdxSetExpression(expressions_list29); 

                    }
                    break;
                case 4 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:311:4: expression_case
                    {
                    	PushFollow(FOLLOW_expression_case_in_expression_simple1704);
                    	expression_case30 = expression_case();
                    	state.followingStackPointer--;

                    	 value = expression_case30;  

                    }
                    break;
                case 5 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:312:4: STRING
                    {
                    	STRING31=(IToken)Match(input,STRING,FOLLOW_STRING_in_expression_simple1711); 
                    	 value = new MdxConstantExpression(((STRING31 != null) ? STRING31.Text : null),MdxConstantKind.String); 

                    }
                    break;
                case 6 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:313:4: INTEGER
                    {
                    	INTEGER32=(IToken)Match(input,INTEGER,FOLLOW_INTEGER_in_expression_simple1718); 
                    	 value = new MdxConstantExpression(((INTEGER32 != null) ? INTEGER32.Text : null),MdxConstantKind.Integer); 

                    }
                    break;
                case 7 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:314:4: FLOAT
                    {
                    	FLOAT33=(IToken)Match(input,FLOAT,FOLLOW_FLOAT_in_expression_simple1725); 
                    	 value = new MdxConstantExpression(((FLOAT33 != null) ? FLOAT33.Text : null),MdxConstantKind.Float); 

                    }
                    break;
                case 8 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:315:4: identifier
                    {
                    	PushFollow(FOLLOW_identifier_in_expression_simple1732);
                    	identifier34 = identifier();
                    	state.followingStackPointer--;

                    	 value = new MdxObjectReferenceExpression(identifier34); 

                    }
                    break;
                case 9 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:316:4: RANET_EXPRESSION
                    {
                    	RANET_EXPRESSION35=(IToken)Match(input,RANET_EXPRESSION,FOLLOW_RANET_EXPRESSION_in_expression_simple1739); 
                    	 value = new MdxObjectReferenceExpression(((RANET_EXPRESSION35 != null) ? RANET_EXPRESSION35.Text : null)); 

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return value;
    }
Esempio n. 4
0
    // $ANTLR end "axis_name"


    // $ANTLR start "property"
    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:182:1: property returns [MdxExpression value] : compound_id ;
    public MdxExpression property() // throws RecognitionException [1]
    {   

        MdxExpression value = default(MdxExpression);

        string compound_id17 = default(string);


        try 
    	{
            // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:183:2: ( compound_id )
            // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:183:4: compound_id
            {
            	PushFollow(FOLLOW_compound_id_in_property871);
            	compound_id17 = compound_id();
            	state.followingStackPointer--;

            	 value = new MdxObjectReferenceExpression(compound_id17); 

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return value;
    }