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); }
// $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; }
// $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; }
// $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; }