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


 

MDX Elements

The construct of elements in MDX are as follows:

<identifier> ::= <regular_identifier> | <delimited_identifier>

<regular_identifier> ::= <alpha_char> [{<alpha_char> | <digit> 
                                       | <underscore>}...]

<delimited_identifier> ::=
   <start_delimiter>{<double_end_delimiter> | <nondelimit_end_symbol>}
      [{<double_end_delimiter> | <nondelimit_end_symbol> }...] 
   <end_delimiter>

<start_delimiter> ::= <open_bracket>

<end_delimiter> ::= <close_bracket>

<double_end_delimiter> ::= <end_delimiter> <end_delimiter>

<nondelimit_end_symbol> ::= !! Any character except <end_delimiter>

<cube_name> ::= [ [ [ <data_source>.] <catalog_name>.] [<schema_name>.]
                <identifier>

<data_source> ::= <identifier>

<catalog_name> ::= <identifier>

<schema_name> ::= <identifier>

<dim_hier> ::= [<cube_name>.]<dimension_name>
             | [[<cube_name>.]< dimension_name>.]<hierarchy_name>

<dimension_name> ::= <identifier>
                   | <member>.DIMENSION
                   | <level>.DIMENSION
                   | <hierarchy>.DIMENSION

<dimension> ::= <dimension_name>

<hierarchy> ::= <hierarchy_name>

<hierarchy_name> ::= <identifier>
                   | < member>.HIERARCHY
                   | <level>.HIERARCHY

<level> ::= [<dim_hier>.]< identifier>
          | <dim_hier>.LEVELS(<index>)
          | <member>.LEVEL

Note   The first production is for the case when named levels are supported. The second production is for the case when named levels are not supported.

<member> ::= [<level>.]<identifier>
           | <dim_hier>.<identifier>
           | <member>.<identifier>
           | <member_value_expression>

Note   The <member>.<identifier> recognizes the fact that members may sometimes need to be qualified by their parent names. For example, "Portland" is a city in Oregon and also in Maine. So a reference to Portland will be either Oregon.Portland or Maine.Portland.

<property> ::= <mandatory_property> | <user_defined_property>

<mandatory_property> ::= CATALOG_NAME
                       | SCHEMA_NAME
                       | CUBE_NAME
                       | DIMENSION_UNIQUE_NAME
                       | HIERARCHY_UNIQUE_NAME
                       | LEVEL_UNIQUE_NAME
                       | LEVEL_NUMBER
                       | MEMBER_UNIQUE_NAME
                       | MEMBER_NAME
                       | MEMBER_TYPE
                       | MEMBER_GUID
                       | MEMBER_CAPTION
                       | MEMBER_ORDINAL
                       | CHILDREN_CARDINALITY
                       | PARENT_LEVEL
                       | PARENT_UNIQUE_NAME
                       | PARENT_COUNT
                       | DESCRIPTION

<user_defined_property> ::= <dim_hier>.<identifier> 
                          | <level>.<identifier> 
                          | <member>.<identifier>

Note   The three productions recognize the fact that a property can apply to all the members of a dimension, to all the members of a level, or just to a member.

<tuple> ::= <member> 
          | (<member> [, <member>...]) 
          | <tuple_value_expression>

Note   Each member must be from a different dimension or from a different hierarchy.

<set> ::= <member>:<member>

Note   Each member must be from the same hierarchy and the same level.

        | <set_value_expression>
        | <open_brace>[<set>|<tuple> [, <set>|<tuple>...]]<close_brace>

Note   Duplicates (if any) are always retained when specifying sets in this fashion.

        | (<set>)

<open_brace> ::= {

<close_brace> ::= }

<open_bracket> ::= [

<close_bracket> ::= ]

<underscore> ::= _

<alpha_char> ::= a | b | c | ...| z | A | B | C | ... | Z

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9