Elements

<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_delimit_end_symbol>

<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

<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, or 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