MDX文法ルール
EssbaseでのMDXの構文の包括的なビューを次に示します。
このドキュメントでは、MDXの構文を「BNF表記法」を使用して説明します。
[<with_section>]
[<insert_specification>]
[<export_specification>]
SELECT [<axis_specification>
[, <axis_specification>...]]
[<subselect>]
[FROM [<cube_specification>]]
[WHERE [<slicer_specification> [<dim_props>]]
<insert_specification> ::=
INSERT
<source_tuple> TO <target_tuple>
....
<source_tuple> TO <target_tuple>
[<offset> <debitmember> <creditmember>]
[USING <load_buffer_method>]
INTO <cube_specification>
<subselect>
<export_specification> ::=
EXPORT INTO FILE <file_name> [<OVERWRITE> <USING COLUMNDELIMITER <delimiter_character>>]
<subselect> ::=
FROM SELECT [<axis_specification>
[, <axis_specification>...]]
<cube_specification> ::=
'[' <ident_or_string>.<ident_or_string> ']'
| <delim_ident>.<delim_ident>
<delim_ident> ::=
'[' <ident> ']'
| <ident_or_string>
<ident_or_string> ::=
' <ident> '
| <ident>
ノート:
<ident>は、有効なEssbaseアプリケーション/データベース名を参照します。 キューブ仕様では、識別子が2つある場合、最初の識別子はアプリケーション名で、2番目の識別子はデータベース名である必要があります。 たとえば、次の識別子はすべて有効です:
-
Sample.Basic
-
[Sample.Basic]
-
[Sample].[Basic]
-
'Sample'.'Basic'
<axis_specification> ::=
[NON EMPTY] <set> [<dim_props>] ON
COLUMNS | ROWS | PAGES | CHAPTERS |
SECTIONS | AXIS (<unsigned_integer>)
<dim_props> ::=
[DIMENSION] PROPERTIES <property> [, <property>...]
<slicer_specification> ::= <set> | <tuple> | <member>
ノート:
スライサ内の<set>
のカーディナリティは1である必要があります。
<member> ::=
<member-name-specification>
| <member_value_expression>
<member-name-specification> ::=
「メンバー名」は、次の方法で指定できます:
-
実際の名前または別名(
Cola
,Actual
,COGS
や[100]
など)を指定します。メンバー名がnumberで始まるか、空白が含まれている場合は、
[100]
などの角カッコで囲む必要があります。 わかりやすく、コードを読みやすくするために、すべてのメンバー名に角カッコを付けることをお薦めします。属性メンバーの場合は、(メンバーを一意に識別するために修飾された)長い名前を使用する必要があります。たとえば、
[12]
のみではなく、[Ounces_12]
を使用します。 -
ディメンション名または祖先メンバー名のいずれかをメンバー名の接頭辞として指定します(例:
[Product].[100-10]
および[Diet].[100-10]
)。これは、あいまいさが排除され、共有メンバーを正確に参照できるため、すべてのメンバー名にお薦めします。ノート:
資格には1つの祖先のみを使用します。 複数の祖先が含まれている場合、Essbaseはエラーを返します。 たとえば、
[Market].[New York]
はNew Yorkの有効な名前であるため、[East].[New York]
です。 ただし、[Market].[East].[New York]
はエラーを返します。 -
WITHセクションで定義された計算済メンバーの名前を指定します。
-
重複メンバー名が有効になっているアウトラインについては、「重複するメンバー名および別名を指定するMDX構文」も参照してください。
<member_value_expression> ::=
Parent ( <member> [,<hierarchy>] )
| <member>.Parent [(<hierarchy>)]
| FirstChild ( <member> )
| <member>.FirstChild
| LastChild ( <member> )
| <member>.LastChild
| PrevMember ( <member> [,<layertype>] )
| <member>.PrevMember [( <layertype> ) ]
| NextMember ( <member> [,<layertype>] )
| <member>.NextMember [( <layertype> ) ]
| FirstSibling ( <member> [,<hierarchy>])
| <member>.FirstSibling [(<hierarchy>)]
| LastSibling ( <member> [,<hierarchy>])
| <member>.LastSibling [(<hierarchy>)]
| Ancestor ( <member> , <layer> | <index> [,<hierarchy>] )
| Lead ( <member>, <index> [,<layertype>] [,<hierarchy>] )
| <member>.Lead ( <index> [,<layertype>] [,<hierarchy>] )
| Lag ( <member>, <index> [,<layertype>] [,<hierarchy>] )
| <member>.Lag ( <index> [,<layertype>] [,<hierarchy>] )
| CurrentAxisMember()
| CurrentMember ( <dim_hier> )
| <dim_hier>. CurrentMember
| DefaultMember ( <dim_hier> )
| <dim_hier>. DefaultMember
| OpeningPeriod ( [<layer> [,<member>]] )
| ClosingPeriod ( [<layer> [,<member>]] )
| Cousin (<member>, <member>)
| ParallelPeriod( [<layer>[, <index>[, <member> [,<hierarchy>]]]] )
| Item ( <tuple>, <index> )
| tuple[.Item] ( <index> )
| LinkMember ( <member>, <hierarchy> )
| member.LinkMember ( <hierarchy> )
| DateToMember (<date>, <dim_hier> [ ,<genlev>] )
| StrToMbr (<string_value_expr> [,<dimension>] [, MEMBER_NAMEONLY | <alias_table_name>])
<dim_hier> ::= <dimension>
<dimension> :: =
<dimension-name-specification>
| Dimension ( <member> | <layer> )
| <member>.DIMENSION
| <layer>.DIMENSION
<dimension-name-specification> ::=
Same as <member_name-specification> case 1.
e.g. Product, [Product]
<hierarchy> ::=
A hierarchy refers to a root member of an alternate hierarchy, which is always at
generation 2 of a dimension. Member value expressions are not allowed as hierarchy
arguments.
<layertype> ::=
GENERATION | LEVEL
<layer> ::=
<layer-name-specification>
| Levels ( <dim_hier>, <index> )
| <dim_hier>.Levels ( <index> )
| Generations ( <dim_hier>, <index> )
| <dim_hier>.Generations ( <index> )
| <member>.Generation
| <member>.Level
<layer-name-specification> ::=
「レイヤー名」は、次の方法で指定できます:
-
世代名またはレベル名(
States
やRegions
など)を指定します。世代名またはレベル名は、
[Regions]
などの角カッコで囲むことができます。 角カッコを使用することをお薦めします。 -
ディメンション名を世代名またはレベル名とともに指定します(例:
Market.Regions
および[Market].[States]
)。この命名規則をお薦めします。
<tuple> ::=
<member>
| ( <member> [,<member>].. )
| <tuple_value_expression>
tupleは、同じディメンションのメンバーを複数持つことはできないという制限のあるメンバーの集合です。 たとえば、(Actual, Sales)
はタプルです。 両方のメンバーが同じディメンションのものであるため、(Actual, Budget)
はタプルではありません。
<tuple_value_expression> ::=
CurrentTuple ( <set> )
| <set>.Current
| Item ( <set>, <index> )
| <set>[.Item] (<index>)
setは、すべてのタプルのメンバーが同じディメンションから同じ順序で存在する必要があるタプルのコレクションです。
たとえば、{(Actual, Sales), (Budget, COGS)}
はセットです。
2番目のタプルにはシナリオ・ディメンションとProductディメンションのメンバーがあるのに対し、最初のタプルにはシナリオ・ディメンションとMeasuresディメンションのメンバーがあるため、{(Actual, Sales), (COGS, [100])}
は設定されません。
2番目のタプルにはScenarioディメンションとMeasuresディメンションのメンバーがあるのに対し、最初のタプルにはMeasuresディメンションとScenarioディメンションのメンバーがあるため、{(Actual, Sales). (COGS, Budget)}
は設定されません(ディメンションの順序は異なります)。
ノート:
関数への入力セットのサイズの範囲は、0から4294967295タプルです。
<set> ::=
MemberRange ( <member>, <member>
[,<layertype>] [,<hierarchy>] )
| <member> : <member>
| { <tuple>|<set> [, <tuple>|<set>].. }
| ( <set> )
| <set_value_expression>
<set_value_expression> ::=
| Members ( <dim_hier> )
| <dim_hier>.Members
| Members ( <layer> )
| <layer>.Members
| Children ( <member> )
| <member>.Children
| CrossJoin ( <set> , <set> )
| CrossJoinAttribute ( <set> , <set> )
| Union ( <set> , <set> [,ALL] )
| Intersect ( <set> , <set> [,ALL])
| Except ( <set> , <set> [,ALL])
| Extract ( <set> , <dim_hier> [, <dim_hier>].. )
| Head ( <set> [, <index>])
| Subset ( <set> , <index> [,index])
| Tail ( <set> [,index])
| Distinct ( <set> )
| Siblings ( <member> [, <selection_flags>, [INCLUDEMEMBER|EXCLUDEMEMBER]] )
| <member>.Siblings
| Descendants ( <member> , [{<layer>|<index>}[, <Desc_flags>]] )
| PeriodsToDate ( [<layer>[, <member> [,<hierarchy>]]] )
| LastPeriods ( <index>[, <member> [,<hierarchy>]] )
| xTD ( [<member>] )
where xTD could be {HTD|YTD|STD|PTD|QTD|MTD|WTD|DTD}
| Hierarchize ( <set> [,POST] )
| Filter ( <set> , <search_condition> )
| Order ( <set>, <value_expression> [,BASC | BDESC] )
| TopCount ( <set> , <index> [,<numeric_value_expression>] )
| BottomCount ( <set> , <index> [,<numeric_value_expression>] )
| TopSum ( <set> , <numeric_value_expression>
, <numeric_value_expression> )
| BottomSum ( <set> , <numeric_value_expression>
, <numeric_value_expression> )
| TopPercent ( <set> , <percentage> , <numeric_value_expression> )
| BottomPercent ( <set> , <percentage> , <numeric_value_expression> )
| Generate ( <set> , <set> [, [ALL]] )
| DrilldownMember ( <set> , <set>[, RECURSIVE] )
| DrillupMember ( <set> , <set> )
| DrilldownByLayer ( <set> [, {<layer>|<index>] )
| DrilldownLevel ( <set> [, {<layer>|<index>] )
| DrillupByLayer ( <set> [, <layer>] )
| DrillupLevel ( <set>[, <layer>] )
| WithAttr ( <member> , <character_string_literal>, <value_expression> )
| WithAttrEx ( <member> , <character_string_literal>, <value_expression>, ANY, <tuple>|<member> [, <tuple>|<member>] )
| Attribute ( <member> )
| AttributeEx ( <member>, ANY, <tuple>|<member> [, <tuple>|<member>] )
| Uda ( <dimension> | <member> , <string_value_expression> )
| RelMemberRange ( <member>, <prevcount>, <nextcount>,
[,<layertype>] [,<hierarchy>] )
| Ancestors ( <member>, <layer>|<index> )
| <conditional_expression>
ノート:
<conditional_expression>
は、前述の本番環境で<set>
を返すことが想定されています。
<Desc_flags> ::=
SELF
| AFTER
| BEFORE
| BEFORE_AND_AFTER
| SELF_AND_AFTER
| SELF_AND_BEFORE
| SELF_BEFORE_AFTER
| LEAVES
<selection_flags> ::=
LEFT
| RIGHT
| ALL
<value_expression> ::=
<numeric_value_expression>
| <string_value_expression>
<numeric_value_expression> ::=
<term>
| <numeric_value_expression> + <term>
| <numeric_value_expression> - <term>
<term> ::=
<factor>
| <term> * <factor>
| <term> / <factor>
<factor> ::=
[+ | -]<numeric_primary>
<numeric_primary> ::=
<value_expr_primary>
| <numeric_value_function>
| <mathematical_function>
| <date_function>
ノート:
前述の本番の<value_expr_primary>
のデータ型は数値である必要があります。
<base> ::=
<numeric_value_expression>
<power> ::=
<numeric_value_expression>
<mathematical_function> ::=
Abs ( <numeric_value_expression> )
| Exp ( <numeric_value_expression> )
| Factorial ( <index> )
| Int ( <numeric_value_expression> )
| Ln ( <numeric_value_expression> )
| Log ( <numeric_value_expression> [, <base>] )
| Log10 ( <numeric_value_expression> )
| Mod ( <numeric_value_expression> , <numeric_value_expression> )
| Power ( <numeric_value_expression> , <power> )
| Remainder ( <numeric_value_expression> )
| Stddev ( <set> [,<numeric_value_expression> [,IncludeEmpty] ] )
| Stddevp ( <set> [,<numeric_value_expression> [,IncludeEmpty] ] )
| Round ( <numeric_value_expression> , <index> )
| Truncate ( <numeric_value_expression> )
<date_function> ::=
DateRoll(<date>, <date_part>, <index>)
| DateDiff(<date>, <date>, <date_part>)
| DatePart(<date>, <date_part>)
| Today()
| TodateEx(<date_format_string>, <string>)
| GetFirstDate(<member>)
| GetLastDate(<member>)
| UnixDate(<numeric_value_expression>)
| GetFirstDay(<date>, <date_part>)
| GetLastDay(<date>, <date_part>)
| GetNextDay(<date>, <week-day-specification>, [0|1] )
| GetRoundDate(<date>, <date_part>)
<date>引数は、入力日を表す数値です。 この数値は、1970年1月1日の深夜から経過した秒数です。 この番号を取得するには、次のいずれかの関数を使用: Today()、TodateEx()、GetFirstDate()、GetLastDate()。
<date_part> ::=
DP_YEAR
| DP_QUARTER
| DP_MONTH
| DP_WEEK
| DP_DAY
| DP_DAYOFYEAR
| DP_WEEKDAY
ノート:
DP_DAYOFYEAR
およびDP_WEEKDAY
は、関数DateRollおよびDateDiffでは有効な引数ではありません。
<week-day-specification> ::=
1 | 2 | 3 | 4 | 5 | 6 | 7
e.g. 1 implying Sunday, 7 implying Saturday
<date_format_string> ::=
"mon dd yyyy"
| "Month dd yyyy"
| "mm/dd/yy"
| "mm/dd/yyyy"
| "yy.mm.dd"
| "dd/mm/yy"
| "dd.mm.yy"
| "dd-mm-yy"
| "dd Month yy"
| "dd mon yy"
| "Month dd, yy"
| "mon dd, yy"
| "mm-dd-yy"
| "yy/mm/dd"
| "yymmdd"
| "dd Month yyyy"
| "dd mon yyyy"
| "yyyy-mm-dd"
| "yyyy/mm/dd"
| "Long format"
| "Short format"
<string_value_expression> ::=
<string_value_primary>
| FormatDate (<date>, <date_format_string>)
| Concat (<string_value_expression> [<, string_value_expression> ...])
| Left(<string_value_expression>, <length>)
| Right(<string_value_expression>, <length>)
| Substring(<string_value_expression>, <index> [, <index>])
| Upper(<string_value_expression>)
| Lower (<string_value_expression>)
| RTrim(<string_value_expression>)
| LTrim(<string_value_expression>)
| NumToStr(<value_expr_primary>)
| EnumText(<textlistname> | <member>, <numeric_value_expression>)
<value_expr_primary> ::=
<unsigned_numeric_literal>
| ( <numeric_value_expression> )
| <tuple>[.RealValue]
| <member>[.RealValue]
| <tuple> [.Value]
| <member>[.Value]
| CellValue()
| <property>
| <conditional_expression>
| MISSING
<string_value_primary> ::=
<character_string_literal>
| <string_property>
ノート
-
<conditional_expression>
は、前述の本番環境で数値を返すことが想定されています。 -
文字列リテラルは二重引用符(")で区切られます。
<conditional_expression> ::=
<if_expression>
| <case_expression>
| CoalesceEmpty ( <numeric_value_expression>
, <numeric_value_expression>)
<case_expression> ::=
<simple_case> | <searched_case>
<if_expression> ::=
IIF ( <search_condition>, <true_part>, <false_part> )
<true_part> ::=
<value_expression> | <set>
<false_part> ::=
<value_expression> | <set>
<simple_case> ::=
Case <case_operand>
<simple_when_clause>...
[ <else_clause> ]
END
<simple_when_clause> ::=
WHEN <when_operand>
THEN <result>
<else_clause> ::=
ELSE <value_expression> | <set>
<case_operand> ::=
<value_expression>
<when_operand> ::=
<value_expression>
<result> ::=
<value_expression> | <set>
<searched_case> ::=
Case
<searched_when_clause>...
[ <else_clause> ]
END
<searched_when_clause> ::=
WHEN <search_condition>
THEN <result>
<numeric_value_function> ::=
Avg ( <set> [, <numeric_value_expression>] [, IncludeEmpty] )
| Max ( <set> [, <numeric_value_expression>])
| Min ( <set> [, <numeric_value_expression>])
| Sum ( <set> [, <numeric_value_expression>])
| NonEmptyCount ( <set> [, <numeric_value_expression>])
| Count ( <set> [, IncludeEmpty] )
| <dts-specification> ::= DTS (<dts-operation-specification>,<member>)
<dts-operation-specification> ::= HTD|YTD|STD|PTD|QTD|MTD|WTD|DTD
| Todate ( <string_value_expression> , <string_value_expression> )
| Ordinal (<layer>)
| Aggregate (<set> [,<member-name-specification>])
| Rank (<member_or_tuple>, <set> [,<numeric_value_expression>
[, <rank_flags>]])
| NTile (<member_or_tuple>, <set>, <index>,
<numeric_value_expression>)
| Percentile (<set>, <numeric_value_expression>,
<numeric_value_expression>)
| Median (<set>, <numeric_value_expression>)
| Len (<string_value_expression>)
| InStr (<index>, <string_value_expression>,
<string_value_expression>, <numeric_value_expression>)
| StrToNum (<string_value_expression>)
| EnumValue(<enum_string>)
| JulianDate(<date>)
ノート:
集約関数の<member-name-specification>は、勘定科目ディメンション・メンバー名を参照する必要があります。
ノート:
<enum_string>は、列挙文字列を表します。 次の形式である必要があります。 メンバーはテキスト・タイプのメンバーを参照する必要があります。
<enum_string> ::=
<textlist-name-specification>.<character_string_literal>
| <member>.<character_string_literal>
<textlist-name-specification> ::=
Same as <member_name-specification> case 1. The text list name specification should refer to the name of a text list object.
e.g. AccountStatus, [AccountStatus]
<member_or_tuple> ::=
<member>
| <tuple>
<index> ::=
<numeric_value_expression>
ノート:
入力<index>引数の範囲は -2147483647から2147483647です。
<percentage> ::=
<numeric_value_expression>
<search_condition> ::=
<bool_term>
| <search_condition> OR <bool_term>
<bool_term> ::=
<bool_factor>
| <bool_term> AND <bool_factor>
<bool_factor> ::=
<bool_primary>
| NOT <bool_primary>
<bool_primary> ::=
<value_expression> [=|>|<|<>|>=|<=] <value_expression>
| <property> IN <member>|<character_string_literal>
| <property>
| IsEmpty ( <value_expression> )
| ( <search_condition> )
| IsSibling(<member>,<member> [, INCLUDEMEMBER])
| IsLeaf(<member>)
| IsGeneration(<member>,<index>)
| IsLevel(<member>,<index>)
| IsAncestor(<member>,<member> [, INCLUDEMEMBER])
| IsChild(<member>,<member> [, INCLUDEMEMBER])
| IsUda (<member>, <string_value_expression>)
| IsAccType (<member>, <AcctTag>)
| Is ( <member> , <member> )
| <member> Is <member>
| IsValid (<member> | <tuple> | <set> | <layer> | <property>)
| IsMatch (<string_value_expression>, <string_value_expression>, [,MATCH_CASE|IGNORE_CASE])
| Contains (<member_or_tuple>, <set>)
ノート:
ブール値を持つプロパティのみを<bool_primary>
として使用できます。
<AcctTag> ::=
FIRST
| LAST
| AVERAGE
| EXPENSE
| TWO-PASS
<rank_flags> ::=
ORDINALRANK
| DENSERANK
| PERCENTRANK
<with_section> ::=
WITH <frml_spec>
<frml_spec> ::=
<single_frml_spec>
| <frml_spec> <single_frml_spec>
<single_frml_spec> ::=
<set_spec>
| <perspective_specification>
| <member_specification>
<set_spec> ::=
SET <set_name> AS ' <set> '
<set_name> ::=
定義するセットの名前。 名前は、データベース・メンバーの名前/別名、世代/レベル名またはUDA名と同じにすることはできません。
<perspective_specification> ::=
PERSPECTIVE REALITY | <tuple> FOR <dimension-name-specification>
<member_specification> ::=
MEMBER <member_name> AS '
<nonempty_specification>
<numeric_value_expression> '
[, <solve_order_specification>]
<member_name> ::=
<dimension-name-specification>.<calculated member name>
<calculated member name> ::=
計算済メンバーに使用する名前は、データベース・メンバーの名前/別名、世代/レベル名またはUDA名と同じにすることはできません。
<solve_order_specification> ::=
SOLVE_ORDER = <unsigned_integer>
<property> ::=
<member>.<property_specification>
| <dim_hier>.<property_specification>
| <property_specification>
| <property_expr_specification>
ノート:
前述のルールの最後の3つの選択肢は、「DIMENSION PROPERTIES」セクション内でのみ使用できます。
軸にProductとMarketの2つのディメンションがあるとします。 DIMENSION PROPERTIES Gen_number, [Product].level_number
を使用すると、世代番号は両方のディメンションのメンバーの出力に表示されますが、レベル番号はProductディメンションのメンバーにのみ表示されます。
値式内で、[Product].Gen_number
は[Product]という名前のメンバーの世代番号を参照します。
[Product].CurrentMember.Gen_number
は、[Product]ディメンションの現在のメンバーの世代番号を参照します。
たとえば、
Filter ([Product].Members, [Product].Gen_number > 1)
空のセットを返します。 Product.Generationは1であるため、[Product].Membersの各タプルの検索条件は失敗します。
Filter ([Product].Members, [Product].CurrentMember.Gen_number > 1)
最上位ディメンション・メンバー[Product]を除く、Productディメンションのすべてのメンバーを戻します。
<string_property> ::= <member>.<property_specification>
ノート:
前述のルールでは、MEMBER_NAME、MEMBER_ALIASなどの文字列プロパティを指定します。
<property_specification> ::=
MEMBER_NAME
| MEMBER_ALIAS
| GEN_NUMBER
| LEVEL_NUMBER
| <dimension-name-specification>
| <uda-specification>
ノート:
<property_specification>
の<dimension-name-specification>
は、属性dimension-nameの指定である必要があります。 属性ディメンション名は、対応する基本ディメンションのメンバーのプロパティとして扱われます。
<uda-specification> ::=
<uda-specification>
では、ユーザー定義Attribute(UDA)を指定します。 UDAプロパティはブール値プロパティです。 TRUE値は、メンバーのUDAが存在することを示します。 たとえば、
Filter (Market.Members, Market.CurrentMember.[Major Market])
アウトラインの"Major Market" UDAでタグ付けされたMarketディメンション・メンバーを返します。
<property_expr_specification> ::=
PROPERTY_EXPR ( <dimension name>,
<property_name>,
<member_value_expression>,
<display_name>)
<property_name> ::=
<property_specification>
<display_name> ::=
<character_string_literal>
プロパティの詳細は、「MDXプロパティについて」を参照してください。
次のルールでは、集約ストレージ・アプリケーションのEssbaseアウトライン式の構文について説明します。
<formula_specification> ::= <nonempty_specification>
<numeric_value_expression>
<nonempty_specification> ::= NONEMPTYMEMBER <nonempty_member_list>
| NONEMPTYTUPLE ( <nonempty_member_list> )
<nonempty_member_list> ::= <nonempty_member_name>
| <nonempty_member_name> [ , <nonempty_member_list> ]
<nonempty_member_name> ::=
An Essbase member name or a calculated member name (only when used in another calculated member).
ノート:
NONEMPTYMEMBERディレクティブのメンバー名(または複数の名前が指定されている場合はメンバー名)は、それが指定されている計算済メンバーまたは式メンバーと同じディメンションに属している必要があります。
<signed_numeric_literal> ::=
[+|-] <unsigned_numeric_literal>
<unsigned_numeric_literal> ::=
<exact_numeric_literal>
| <approximate_numeric_literal>
<exact_numeric_literal> ::=
<unsigned_integer>[.<unsigned_integer>]
| <unsigned_integer>.
| .<unsigned_integer>
<unsigned_integer> ::=
{<digit>}...
<approximate_numeric_literal> ::=
<mantissa>E<exponent>
<mantissa> ::=
< exact_numeric_literal>
<exponent> ::=
[<sign>]<unsigned_integer>
<digit> ::=
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
ノート:
数値は、E文字を使用して科学表記法(仮数/指数)で入力することもできます。
<character_string_literal> ::=
<quote>[<character_representation>...] <quote>
<character_representation> ::=
<nonquote_character>
| <quote_symbol>
<nonquote_character> ::=
Any character in the character set other than <quote>
<quote_symbol> ::=
<quote> <quote>
<quote> ::= "
The following is the syntax for Format Strings in Essbase:
MdxFormat( string_value_expression )