<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