The MDX Statement

The complete construct of the MDX statement follows:

<MDX_statement> ::= <select_statement>
                  | <create_formula_statement>
                  | <drop_formula_statement>

<select_statement> ::= [WITH <formula_specification>]
                        SELECT [<axis_specification>
                               [, <axis_specification>...]]
                        FROM [<cube_specification>]
                        [WHERE [<slicer_specification>]]
                        [<cell_props>]

<formula_specification> ::= <single_formula_specification>
                           [<single_formula_specification>...]

<single_formula_specification> ::= <member_specification>
                                 | <set_specification>

<member_specification> ::= MEMBER <member_name> AS <value_expression>
                           [, <solve_order_specification>]
                           [, <member_property_definition>...]

<member_name> ::= <member>.<identifier>
                | <cube_name>.<member>.<identifier>

Note

The identifier defines a new member. The qualification member has enough information to specify the dimension and the level in the dimension that this new member should be on.

Note

If <member_name> is part of a member specification that appears in a <create_formula_statement> or is part of a <drop_formula_statement>, it must be qualified by a cube name, as in the second production above.

<solve_order_specification> ::= SOLVE_ORDER = <unsigned_integer>

<member_property_definition> ::= <identifier> = <value_expression>

Note

Because the property definition appears in the context of a member definition, there is enough information to associate the identifier (which is the property name) in the above production with a member.

<set_specification> ::= SET <set_name> AS <set>

<set_name> ::= <identifier> | <cube_name>.<identifier>

Note

If <set_name> is part of a set specification that appears in a <create_formula_statement> or is part of a <drop_formula_statement>, it must be qualified by a cube name, as in the second production above.

<axis_specification> ::= [NON EMPTY] <set> [<dim_props>] ON <axis_name>

<axis_name> ::= COLUMNS
              | ROWS
              | PAGES
              | CHAPTERS
              | SECTIONS
              | AXIS(<index>)

<dim_props> ::= [DIMENSION] PROPERTIES <property> [, <property>...]

<cube_specification> ::= [<cube_name> [,<cube_name>...]]

<slicer_specification> ::= {<set> | <tuple>}

<cell_props> ::= [CELL] PROPERTIES <cell_property> [, <cell_property>...]

<cell_property> ::= <mandatory_cell_property>
                  | <optional_cell_property>
                  | <provider_specific_cell_property>

<mandatory_cell_property> ::= CELL_ORDINAL | VALUE | FORMATTED_VALUE

<optional_cell_property> ::= FORMAT_STRING
                           | FORE_COLOR
                           | BACK_COLOR
                           | FONT_NAME
                           | FONT_SIZE
                           | FONT_FLAGS

<provider_specific_cell_property> ::= <identifier>

<create_formula_statement> ::= CREATE [<scope>]<formula_specification>

<drop_formula_statement> ::= <drop_member_statement>
                           | <drop_set_statement>

<drop_member_statement> ::= DROP MEMBER <member_name>
                                     [, <member_name>...]

<drop_set_statement> ::= DROP SET <set_name> [, <set_name>...]

<scope> := GLOBAL | SESSION