MDX機能指定で指定された構文に従うMDXクエリーは、MDX-APIによってサーバーに提出できます。クエリーの結果は、このAPIを使用して、クライアントによって取得できます。
MDXステートメントの構文は、『Oracle Essbaseテクニカル・リファレンス』のMDXのセクションで説明しています。
いくつかの基本的なMDXの概念および用語をここで説明します。MDXクエリーは、いくつかの軸仕様およびオプションのスライサ仕様からなります。各軸は、集合値式を指定します。集合は、タプルの順序付けられたコレクションであり、タプルは、1つ以上の次元メンバーの連続です。集合内のタプルは、次元性が均質です(各タプルには、同じ順序で同じ次元からのメンバーが含まれます)。
Sample Basicデータベースに基づく集合式の1例は次のとおりです:
Union( CrossJoin({[Sales], [Profit]}, {[Actual], [Budget]}), Union( CrossJoin([Total Expenses].Children, {[Actual]}), {([Opening Inventory], [Variance]), ([Additions], [Variance %])} ) )
この式は、Union、CrossJoin、ChildrenといったMDX関数を使用します。この式の値は集合です:
{ ([Sales], [Actual]), ([Sales], [Budget]), ([Profit], [Actual]), ([Profit], [Budget]), ([Marketing], [Actual]), ([Payroll], [Actual]), ([Misc], [Actual]), ([Opening Inventory], [Variance]), ([Additions], [Variance %]) }
CrossJoinの結果で、最初の次元の変化が最も遅くなるように、タプルが順序付けられていることに注意してください。この集合内のタプルには([Measures]、[Scenario])という次元性があります。軸集合全体にわたってタプルの次元性は重複してはいけません。
集合式に加えて、各軸は、軸名 (COLUMNS、ROWS、PAGESなど)または軸番号 (AXIS(0)、AXIS(1)など)を指定します。各軸から1つずつ、タプルのあらゆる可能な組合せからなるキューブが、クエリーの結果を構成します。軸およびスライサにない次元は、デフォルトでは、結果キューブを定義するときに自身のルート・メンバーを含むことになります。スライサ(存在する場合)は、単一のタプルで、集合を指定します。これは、それぞれの次元に関係のあるメンバーを識別します。これにより、最終結果を、軸から作成された1枚のキューブにします。MDXクエリーの結果は、結果キューブ内のセルのデータ値のみでなく、各軸およびスライサに関するメタデータを含んでいます。
完全なMDXクエリーを次に示します:
SELECT Union( CrossJoin({[Sales], [Profit]}, {[Actual], [Budget]}), Union( CrossJoin([Total Expenses].Children, {[Actual]}), {([Opening Inventory], [Variance]), ([Additions], [Variance %])} ) ) ON COLUMNS, CrossJoin( [200].Children, {[East], [West]} ) ON ROWS FROM Sample.Basic WHERE {[Jan]}
このクエリーの結果では、列軸に9個のタプルがあり、行軸に8個のタプルがあります。つまり、全部で72個のセルがあります。各セルには序数(すなわちオフセット)があり、これは各軸に沿ったタプルの位置により異なります。オフセットおよび位置は0から始まります。最初の軸位置が最も速く変化するように、セルは順序付けられています。
たとえば、列軸のタプル3および行軸のタプル4によって識別されるセルは、3 + 9*4 = 39のオフセットに位置します。
列軸のタプル3は([Profit]、[Budget])です。
行軸のタプル4は([200-30]、[East])です。
したがって、セル39は([Profit]、[Budget]、[200-30]、[East]、[Jan])になります。
クラスタの概念は、効率のために必要です。集合は、タプルの順序付けられたコレクションであると考えることができます。または、クラスタの順序付けられたコレクションと考えることができます。クラスタは、各集合の次元からのメンバーのあらゆる組合せを含むタプルのコレクションです。CrossJoin関数の出力と同様に(最初の次元の変化が最も遅くなるように)、タプルを順序付ける必要があります。CrossJoin関数の使用により、クラスタが作成されますが、サーバーは、他の関数の結果からでもクラスタを特定できます。