Understanding BNF Notation

This section briefly explains the meaning of symbolic notations used to describe grammar in this document. The query grammar rules are presented using Backus-Naur Form (BNF) syntax notation.

The following table of conventions is not a complete description of BNF, but it can help you read the grammar rules presented in this document.

SymbolDescriptionExample

<word>

(A word in angle brackets.)

The word presented in angle brackets is not meant to be literally used in a statement; its rules are further defined elsewhere.

When reading the following syntax,

SELECT <axis-specification> ...

you know that axis-specification is not meant to be typed literally into the statement. The rules for axis-specification are further defined in the documentation (look for <axis-specification> ::= to get the definition).

<word> ::=

(A word in angle brackets, followed directly by the symbol ::=)

A definition, or BNF "production." The symbol ::= can be interpreted to mean "is defined as."

The word referred to elsewhere as the placeholder <word> is defined here, directly following <word> ::=.

The following syntax tells you that a tuple is defined as either one member in parenthesis, or two or more comma-separated members in parenthesis.

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

|

The pipe symbol or "OR" symbol.

Precedes alternatives. The symbol | can be interpreted to mean "or."

The following syntax:

ON COLUMNS|ROWS|PAGES|CHAPTERS|SECTIONS

can be used to build any of the following literal statement parts:

  • ON COLUMNS

  • ON ROWS

  • ON PAGES

  • ON CHAPTERS

  • ON SECTIONS

WORD

(Text in all caps.)

A query-grammar keyword, to be typed literally.

When reading the following syntax,

SELECT <axis-specification> ...

you know that SELECT is a keyword, and therefore should be typed literally into its proper location in the statement.

[<word>] or [word] or[WORD]

(Square brackets enclosing some word or item.)

An optional element.

In the following high-level query syntax,

[<with_section>]
SELECT [<axis_specification>
 [, <axis_specification>...]]
FROM [<cube_specification>]
[WHERE [<slicer_specification>]]
                

everything, technically, is optional except for SELECT and FROM. Therefore, a query containing only the words

SELECT FROM

would in fact be valid; however, it would select one consolidated data value from its best estimate of a cube context, which might not be very useful.

[, <word>...]

(A comma, a word, and an ellipsis, all enclosed in square brackets.)
You can optionally append a comma-separated list of one or more <words>.

The following syntax

SELECT [<axis_specification>
 [, <axis_specification<...]]

indicates that multiple, comma-separated axis specifications can optionally be supplied to the SELECT statement.