示例#1
0
        public override MdxExpression Process(MdxExpression expr)
        {
            if (expr == null)
            {
                return(null);
            }

            MdxExpression filter = new MdxUnaryExpression
                                       ("NOT"
                                       , new MdxFunctionExpression
                                           ("ISANCESTOR"
                                           , new MdxObjectReferenceExpression(args.Member.UniqueName)
                                           , new MdxObjectReferenceExpression(args.Member.HierarchyUniqueName + ".CURRENTMEMBER")
                                           )
                                       );
            var tupleBase = GenTupleBase();

            if (tupleBase.Members.Count > 0)
            {
                filter = new MdxBinaryExpression
                             (filter
                             , new MdxUnaryExpression
                                 ("NOT"
                                 , new MdxBinaryExpression
                                     (GenTupleBaseCurrent()
                                     , GenTupleBase()
                                     , "IS"
                                     )
                                 )
                             , "OR"
                             );
            }

            return(new MdxFunctionExpression
                       ("FILTER"
                       , expr
                       , filter
                       ));
        }
示例#2
0
    // $ANTLR end "expression_power"


    // $ANTLR start "expression_unary"
    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:266:1: expression_unary returns [MdxExpression value] : ( '-' e1= expression_range_is | '+' e2= expression_range_is | NOT t1= expression_range_is | e3= expression_range_is );
    public MdxExpression expression_unary() // throws RecognitionException [1]
    {   

        MdxExpression value = default(MdxExpression);

        MdxExpression e1 = default(MdxExpression);

        MdxExpression e2 = default(MdxExpression);

        MdxExpression t1 = default(MdxExpression);

        MdxExpression e3 = default(MdxExpression);


        try 
    	{
            // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:267:2: ( '-' e1= expression_range_is | '+' e2= expression_range_is | NOT t1= expression_range_is | e3= expression_range_is )
            int alt38 = 4;
            switch ( input.LA(1) ) 
            {
            case 69:
            	{
                alt38 = 1;
                }
                break;
            case 68:
            	{
                alt38 = 2;
                }
                break;
            case NOT:
            	{
                alt38 = 3;
                }
                break;
            case PROPERTIES:
            case DIMENSION:
            case INTEGER:
            case RANET_EXPRESSION:
            case STRING:
            case FLOAT:
            case CASE:
            case ID:
            case QUOTED_ID:
            case 61:
            case 74:
            	{
                alt38 = 4;
                }
                break;
            	default:
            	    NoViableAltException nvae_d38s0 =
            	        new NoViableAltException("", 38, 0, input);

            	    throw nvae_d38s0;
            }

            switch (alt38) 
            {
                case 1 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:267:4: '-' e1= expression_range_is
                    {
                    	Match(input,69,FOLLOW_69_in_expression_unary1438); 
                    	PushFollow(FOLLOW_expression_range_is_in_expression_unary1442);
                    	e1 = expression_range_is();
                    	state.followingStackPointer--;

                    	 value = new MdxUnaryExpression("-",e1); 

                    }
                    break;
                case 2 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:268:4: '+' e2= expression_range_is
                    {
                    	Match(input,68,FOLLOW_68_in_expression_unary1449); 
                    	PushFollow(FOLLOW_expression_range_is_in_expression_unary1453);
                    	e2 = expression_range_is();
                    	state.followingStackPointer--;

                    	 value = new MdxUnaryExpression("+",e2); 

                    }
                    break;
                case 3 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:269:4: NOT t1= expression_range_is
                    {
                    	Match(input,NOT,FOLLOW_NOT_in_expression_unary1461); 
                    	PushFollow(FOLLOW_expression_range_is_in_expression_unary1465);
                    	t1 = expression_range_is();
                    	state.followingStackPointer--;

                    	 value = new MdxUnaryExpression("NOT",t1); 

                    }
                    break;
                case 4 :
                    // D:\\tfs\\Ranet.UILibrary.OLAP4\\trunk\\UILibrary.Olap\\Ranet.Olap.Mdx\\Compiler\\Parser\\mdx.g:270:4: e3= expression_range_is
                    {
                    	PushFollow(FOLLOW_expression_range_is_in_expression_unary1475);
                    	e3 = expression_range_is();
                    	state.followingStackPointer--;

                    	 value = e3; 

                    }
                    break;

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