OLAPDataGrid コントロールで表示する集計データを OLAP キューブから抽出するには、OLAP クエリを使用します。OLAP クエリでは、OLAPDataGrid コントロールでデータを表示できるように、行と列で構成された 2 次元テーブルで結果セットを定義します。
次の表では、クエリの定義に使用するクラスとインターフェイスについて説明します。
|
クラス |
インターフェイス |
説明 |
|---|---|---|
|
AsyncToken |
|
OLAPQuery.execute() メソッドの結果です。 |
|
OLAPCell |
IOLAPCell |
タプルで定義されたキューブの領域です。 |
|
OLAPMember |
IOLAPMember |
ディメンションのメンバーです。 |
|
OLAPQuery |
IOLAPQuery |
クエリインスタンスです。 |
|
OLAPQueryAxis |
IOLAPQueryAxis |
クエリの軸です。 |
|
OLAPResult |
IOLAPResult |
クエリ結果です。 |
|
OLAPSet |
|
軸に対するメンバーのセットです。 |
|
OLAPTuple |
IOLAPTuple |
1 つ以上のメンバーを含むタプルです。 |
クエリは、次の手順で準備します。
OLAPCube.refresh() メソッドを呼び出し、キューブの入力データを初期化するまで、OLAP キューブに対してクエリを実行することはできません。キューブの初期化が完了すると、OLAP キューブから complete イベントが送出され、キューブに対してクエリを実行する準備が整ったことが通知されます。
イベントハンドラを使用してキューブを初期化し、クエリを呼び出します。次の例では、アプリケーションの creationComplete イベントを使用してキューブを初期化し、キューブの complete イベントを使用してクエリを実行します。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler();">
<mx:Script>
<![CDATA[
private function creationCompleteHandler():void {
// You must initialize the cube before you
// can execute a query on it.
myMXMLCube.refresh();
}
// Event handler to execute the OLAP query
// after the cube completes initialization.
private function runQuery(event:CubeEvent):void {
...
}
]]>
</mx:Script>
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube"
complete="runQuery(event);">
...
</mx:OLAPCube>
次の例は、各四半期の製品ごとの売上高のクエリ結果を表示した OLAPDataGrid コントロールを示しています。
クエリを作成するには、行軸、列軸、およびスライサ軸(オプション)を定義する必要があります。各軸は、IOLAPQueryAxis インターフェイスのインスタンスです。次の表で、各タイプの軸について説明します。
|
軸 |
説明 |
|---|---|
|
行 |
OLAPDataGrid コントロールの各行に表示されるデータを定義します。前の図では、各製品を示す行を定義しています。この軸は必須です。 |
|
列 |
列に表示するデータを定義します。前の図では、各年を示す列を定義しています。この軸は必須です。 |
|
スライサ |
オプションでフィルタを定義して、クエリ結果のサイズを縮小します。主に、2 次元以上のディメンションから次元数を減少させるために使用し、OLAPDataGrid コントロールに結果を表示できるようにします。また、デフォルト以外のメジャーに対してデータ集計を返す場合にも、スライサアクセスを使用します。スライサ軸の使用について詳しくは、スライサ軸の作成を参照してください。 |
OLAPQueryAxis インスタンスを構築する場合は、OLAPQuery.getAxis() メソッドを使用して軸を初期化し、次の例のように、行軸、列軸またはスライサ軸として設定します。
// Create an instance of OLAPQuery to represent the query.
var query:OLAPQuery = new OLAPQuery;
// Get the row axis from the query instance.
var rowQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.ROW_AXIS);
// Create an OLAPSet instance to configure the axis.
...
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);
...
クエリ軸にデータを設定する OLAP キューブのディメンションのメンバーを指定するには、OLAPSet クラスを使用します。OLAPSet インスタンスにメンバーを追加するには、OLAPSet.addElement() メソッドまたは OLAPSet.addElements() メソッドを呼び出します。これらのメソッドについて次の表で説明します。
|
OLAPSet メソッド |
説明 |
|---|---|
| addElement(e:IOLAPElement):void |
セットに単一のエレメントを追加します。
|
| addElements(members:IList):void |
セットに複数のエレメントを追加します。 |
詳細については、単純な OLAP キューブのクエリの記述および複雑な OLAP キューブのクエリの記述を参照してください。
OLAP キューブは複雑になる場合があり、Flex が OLAP クエリの結果を計算している間、アプリケーションが停止してしまう場合があります。そのため、クエリの実行時は、クエリの結果を処理する 2 つのコールバック関数を設定します。Flex は、クエリが完了すると、これらの関数を呼び出します。このアーキテクチャを使用するとクエリを非同期に実行できるので、クエリの処理中もアプリケーションの実行を継続できます。
クエリは、OLAPCube.execute() メソッドを呼び出して実行します。OLAPCube.execute() メソッドは、AsyncToken クラスのインスタンスを返します。AsyncToken クラスは AsyncResponder クラスと共に使用し、実行の完了時にクエリ結果を処理する 2 つのコールバック関数を指定します。
この例では、クエリが正しく処理されると、関数 showResult() がクエリ結果を処理します。また、クエリの実行時に検出されたエラーは、関数 showFault() が処理します。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler();">
<mx:Script>
<![CDATA[
private function creationCompleteHandler():void {
// You must initialize the cube before you
// can execute a query on it.
myMXMLCube.refresh();
}
// Create the OLAP query.
private function getQuery(cube:IOLAPCube):IOLAPQuery {
...
}
// Event handler to execute the OLAP query
// after the cube completes initialization.
private function runQuery(event:CubeEvent):void {
// Get cube.
var cube:IOLAPCube = IOLAPCube(event.currentTarget);
// Create a query instance.
var query:IOLAPQuery = getQuery(cube);
// Execute the query.
var token:AsyncToken = cube.execute(query);
// Set up handlers for the query results.
token.addResponder(new AsyncResponder(showResult, showFault));
}
// Handle a query fault.
private function showFault(error:ErrorMessage, token:Object):void {
Alert.show(error.faultString);
}
// Handle a query success.
private function showResult(result:Object, token:Object):void {
if (!result) {
Alert.show("No results from query.");
return;
}
myOLAPDG.dataProvider= result as OLAPResult;
}
]]>
</mx:Script>
<mx:OLAPCube name="FlatSchemaCube"
dataProvider="{flatData}"
id="myMXMLCube"
complete="runQuery(event);">
...
</mx:OLAPCube>
<mx:OLAPDataGrid id="myOLAPDG" width="100%" height="100%" />
これまでに示したクエリでは、多くの場合、ProductDim および TimeDim など、OLAP キューブの 2 つのディメンションだけを参照してきました。ここでは、クエリから省略した他のディメンションがどのように扱われているかを説明します。
すべてのディメンションには、明示的または暗黙的なデフォルトメンバーがあります。ディメンションを参照せずにクエリを実行すると、デフォルトメンバーを使用して、そのディメンションのデータが集計されます。スキーマのデフォルトメンバーの定義について詳しくは、スキーマのデフォルトメンバーの作成を参照してください。
クエリを定義する場合は、OLAPDataGrid のセルに値が含まれていない状況が作成される場合があります。例えば、顧客と製品に基づいてデータを集計する場合、Illustrator を購入したことがない顧客が存在する場合もあります。そのような顧客と製品の組み合わせの場合、対応する OLAPDataGrid のセルには「NaN」というストリングが表示されます。
このストリングは、OLAPDataGrid.defaultCellString を設定することによってカスタマイズできます。例えば、このストリングを「No value」に設定する場合は、次のように OLAPDataGrid コントロールを作成します。
<mx:OLAPDataGrid id="myOLAPDG"
defaultCellString="No value"
width="100%" height="100%"/>
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート