MDAC 2.5 SDK - OLE DB Programmer's Reference
Chapter 25: MDX Grammar


 

MDX Statement Definitions

<value_expression> ::= <numeric_value_expression> 
                     | <string_value_expression> 

<numeric_value_expression> ::= <term> 
                             | <numeric_value_expression> {<plus> | <minus>} <term>

<term> ::= <factor> | <term> {<asterisk> | <solidus>} <factor>

<factor> ::= [<sign>] <numeric_primary>

<sign> ::= + | -

<plus> ::= +

<minus> ::= -

<asterisk>::= *

<solidus> ::= /

<numeric_primary> ::= <value_expression_primary> 
                    | <numeric_value_function>

Note   The data type of <value_expression_primary> in the above production must be numeric.

<value_expression_primary> ::= <unsigned_numeric_literal>
                             | (<value_expression>)
                             |  <character_string_literal>
                             | [<cube_name>.]<tuple>[.VALUE]
                             |  <property>[.VALUE]
                             |  <conditional_expression>

<conditional_expression> ::= <if_expression> | <case_expression>

<if_expression> ::= IIF(<search_condition>, <true_part>, <false_part>)

<true_part> ::= <value_expression>

<false_part> ::= <value_expression>

<case_expression> ::= <simple_case> | <searched_case> | <coalesce_empty>

<simple_case> ::= CASE <case_operand>
                       <simple_when_clause>...
                       [<else_clause>]
                     END

<searched_case> ::= CASE
                       <searched_when_clause>...
                       [<else_clause>]
                     END

<simple_when_clause> ::= WHEN <when_operand> THEN <result>

<searched_when_clause> ::= WHEN <search_condition> THEN <result>

<else_clause> ::= ELSE <value_expression>

<case_operand> ::= <value_expression>

<when_operand> ::= <value_expression>

<result> ::= <value_expression>

<coalesce_empty> ::= COALESCEEMPTY (<value_expression> ,
                                     <value_expression>
                                    [, <value_expression> ]...)

<unsigned_numeric_literal> ::= <exact_numeric_literal> 
                             | <approximate_numeric_literal>

<exact_numeric_literal> ::= <unsigned_integer>[.<unsigned_integer>]
                          | <unsigned_integer>.
                          | .<unsigned_integer>

<unsigned_integer> ::= {<digit>}...

<approximate_numeric_literal> ::= <mantissa>E<exponent>

<mantissa> ::= < exact_numeric_literal>

<exponent> ::= [<sign>]<unsigned_integer>

<string_value_expression> ::= <value_expression_primary>
                            | <string_value_expression>
                              <concatenation_operator>
                              <value_expression_primary>

Note   The data type of <value_expression_primary> in the above production shall be a character string.

<character_string_literal>::= <quote>[<character_representation>...] 
                              <quote>

<character_representation> ::= <nonquote_character> | <quote_symbol>

<nonquote_character> ::= !! 
                    Any character in the character set other than <quote>

<quote_symbol> ::= <quote> <quote>

<quote>  ::= '

<concatenation_operator> ::= ||