Adobe Flex 3 ヘルプ

OLAP データグリッドについて

大量のデータを扱う場合は、データの範囲やサイズを適切に見極めるのが困難な場合があります。例えば、様々な製品の売上高を、地域別、さらには顧客別に分けて、一般的な 2 次元配列のスプレッドシートで集計するとします。この場合、スプレッドシートの行数が数百行に及び、列数も数十列、あるいは数百列に到達することも珍しくありません。このような大量のデータの集まりから有効な情報だけを抜き出すのは容易ではなく、データから特定の傾向やパターンを識別するのも困難な場合があります。

データの視覚化は、このような大規模なデータをコンパクトな形式で確認するための技術です。データの視覚化技術の 1 つとして挙げられるのが、横棒グラフや縦棒グラフ、円グラフなど、グラフを使用する方法です。Adobe® Flex™ では、様々なグラフをサポートしています。詳細については、チャートの概要を参照してください。

別の技術としては、OLAP(オンライン分析処理)データグリッドなどを使用して、データをコンパクトな形式に集計する方法が挙げられます。OLAP データグリッドは、Microsoft Excel のピボットテーブルに類似した技術です。OLAP データグリッドでは、スプレッドシートのような 2 次元の行と列で、データ集計が表示されます。ただし、表示されるデータは、集計方法の設定に基づいて集約されています。

注意: Flex の OLAP データグリッドはピボットテーブルに類似した技術ですが、データ集計に関するより高度な機能群を提供します。

例えば、売上高の情報をフラットなデータ構造のレコードとして収集し、サーバーに保存したとします。各レコードには、単一の四半期における、単一の製品に関する単一の顧客取引の情報が含まれています。次のコードは、このフラットなデータの形式を示したものです。

data:Object = {
    customer:"AAA", 
    product:"ColdFusion",
    year:"2007",
    quarter:"Q1"
    revenue: "100.00" 
}

何百もの顧客を持ち、数十種類、数百種類もの製品を扱う大きな企業では、このテーブルは数千行もの大きさになることが容易に予測できます。この情報を標準的なスプレッドシートで表示するのではなく、Flex アプリケーションにダウンロードして製品別および四半期別に売上高を集計し、集計データを OLAP データグリッドに表示することができます。このデータの集計から、時間経過に伴う各製品の売上高の傾向を判断することができます。

OLAPDataGrid コントロールについて

OLAP データグリッドの表示には、Flex OLAPDataGrid コントロールを使用します。次の図は、製品と四半期ごとに集計された売上高情報を表示する OLAPDataGrid コントロールを示したものです。

êªïiÇýélîºäŽÇðÇýÇ…èWåvÇŠÇÍǾîÑè„çÇèÓïÒÇšï\é¶Ç²ÇÈ OLAPDataGrid ÉRÉìÉgÉçÅ[Éã

すべての Flex データグリッドコントロールと同様に、OLAPDataGrid コントロールは、行と列の 2 次元でデータを表現するように設計されています。

この例は、次の例のように、2 年間の各四半期の売上高を比較するように変更することができます。

2 îNä'ÇÃäeélîºäŽÇÃîÑè„çÇÇÃî‰är

前の図の OLAPDataGrid コントロールの列には、年度と四半期の情報が階層的に表示されています。コントロールの列と行の両方に、複数レベルの階層を追加することができます。

OLAP データグリッドの作成について

次の図は、データを集計して OLAPDataGrid コントロールで表示する場合のデータフローを示したものです。

ÉfÅ[É^ÇšèWåvǵǃ OLAPDataGrid ÉRÉìÉgÉçÅ[ÉãÇÝï\é¶Ç²ÇÈèÍçáÇÃÉfÅ[É^ÉtÉçÅ[

次の手順は、このプロセスを詳しく説明したものです。

  1. はじめにフラットなデータを用意します。通常はレコードのセットとして配列されたデータで、各レコードには同じデータフィールドが含まれています。例えば、スプレッドシートのフラットなデータや、リレーショナルデータベースのデータを用意します。

    次のコードは、フラットなデータ形式の例を示したものです。

    data:Object = {
        customer:"AAA", 
        product:"ColdFusion",
        quarter:"Q1"
        revenue: "100.00" 
    }
    
    
  2. OLAP スキーマを定義して、フラットな表現のデータを OLAP キューブに変換する方法を記述します。OLAP スキーマでは、フラットなデータを OLAP キューブで表現する方法と、OLAP クエリでデータを集計する方法を定義します。

    OLAP キューブは、リレーショナルデータベースのテーブルに似た特性を持ちます。ただし、一般的にテーブルが 2 次元の構造(行と列)を持つのに対し、OLAP キューブでは任意の次元数の構造を構築することができます。この例では、customer、product、quarter という 3 つのディメンション(次元)をキューブに定義します。customer、product、quarter の有効な値の組み合わせのすべてが、キューブの中で固有のポイントを定義します。キューブの各ポイントの値が、customer、product および quarter の値の組み合わせに該当する売上高を表します。

  3. OLAP キューブから集計データを抽出するクエリを作成します。このクエリの結果が、OLAPDataGrid コントロールでの表示に使用されます。

    OLAP キューブにデータを設定したら、集計データを抽出するクエリを記述します。このクエリの結果が、OLAPDataGrid コントロールでの表示に使用されます。複数のクエリを記述して、異なるタイプのデータ集計を作成することができます。

  4. クエリの結果を OLAPDataGrid コントロールへの入力として使用し、クエリ結果を表示します。

OLAP キューブについて

OLAP キューブには、任意の数のディメンションを構築することができます。単純な構築方法として考えられるのが、フラットなデータセットのフィールドに合わせて OLAP キューブのディメンションを定義する方法です。例えば、フラットなデータに 3 つのフィールドがあるとします。

data:Object = {
    product:"ColdFusion"
    quarter :"Q1"
    revenue: "100.00", 
}

各レコードのデータフィールドには次の値を格納します。

  • product フィールドには、ColdFusion、Flex、Dreamweaver、および Illustrator という値を格納します。
  • quarter フィールドには、Q1、Q2、Q3、および Q4 という値を格納します。
  • revenue フィールドには、各四半期の製品の売上高をドル単位で格納します。

データを集計するには、quarter および product という 2 つのディメンションを持つ OLAP キューブを作成します。キューブの各ディメンションに対応した値は、「メンバー」と呼ばれます。例えば、キューブの product というディメンションは、ColdFusion、Flex、Dreamweaver、および Illustrator というメンバーを持ちます。quarter というディメンションのメンバーは、Q1、Q2、Q3 および Q4 です。

2 つのディメンションによって定義されたキューブの任意のポイントの値は、キューブの「メジャー」と呼ばれます。例えば、(Q1, ColdFusion) で定義されたキューブのポイントのメジャーは 100.00 になります。スキーマでは、OLAP キューブの単一のポイントに対して 1 つまたは複数のメジャーを定義できます。

Flex では、キューブのメジャーの値について、数値のみサポートしています。数値の利点としては、OLAPDataGrid コントロールに表示するデータを容易に集計できることが挙げられます。主な集計タイプには、合計、平均、最小値、最大値などがあります。例えば、revenue メジャーの集計方法を SUM に指定したとします。また、ColdFusion の売上高情報をキューブから抽出するとします。集計された売上高データには、各四半期の ColdFusion の売上高をすべて合計したデータが含まれます。

OLAP スキーマについて

フラットなデータを OLAP キューブに変換するには、OLAP スキーマを作成して、キューブのディメンション数と、各ディメンションに対応したメンバーを構成するフラットなデータのフィールド、さらにキューブのポイントに対応したメジャーを構成するフラットなデータのフィールドを定義します。

例えば、売上高のレコードを含む次のようなフラットなデータがあるとします。

data:Object = {
    customer:"AAA", 
    product:"ColdFusion",
    quarter:"Q1"
    revenue: "100.00" 
}

次の例は、このデータをキューブで表現するために使用する OLAP スキーマの定義を含む OLAPCube の定義を示したものです。このスキーマでは、データの customer、product および quarter フィールドに基づいて、3 次元の OLAP キューブを定義しています。

<mx:OLAPCube name="FlatSchemaCube" 
    dataProvider="{flatData}" 
    id="myMXMLCube"
    complete="runQuery(event);">
     
    <mx:OLAPDimension name="CustomerDim">
        <mx:OLAPAttribute name="Customer" dataField="customer"/>
        <mx:OLAPHierarchy name="CustomerHier" hasAll="true">
            <mx:OLAPLevel attributeName="Customer"/>
        </mx:OLAPHierarchy>
    </mx:OLAPDimension>
    
    <mx:OLAPDimension name="ProductDim">
        <mx:OLAPAttribute name="Product" dataField="product"/>
        <mx:OLAPHierarchy name="ProductHier" hasAll="true">
            <mx:OLAPLevel attributeName="Product"/>
        </mx:OLAPHierarchy>
    </mx:OLAPDimension>

    <mx:OLAPDimension name="QuarterDim">
        <mx:OLAPAttribute name="Quarter" dataField="quarter"/>
        <mx:OLAPHierarchy name="QuarterHier" hasAll="true">
            <mx:OLAPLevel attributeName="Quarter"/>
        </mx:OLAPHierarchy> 
    </mx:OLAPDimension>
    
    <mx:OLAPMeasure name="Revenue" 
        dataField="revenue" 
        aggregator="SUM"/>
</mx:OLAPCube>

このスキーマの以下の点に注目してください。

  • 最初にすべてのディメンションを定義し、次にすべてのメジャーを定義します。
  • 各ディメンションの最初の行で、フラットなデータのデータフィールドを OLAPAttribute インスタンスに関連付けます。次に OLAPLevel.attributeName プロパティを使用して、属性をディメンションのレベルに関連付け、そのディメンションのメンバーに値を設定します。例えば、このスキーマでは CustomerDim ディメンションの顧客レベルに対し、フラットなデータの customer フィールドのデータを設定します。
  • OLAP スキーマのディメンションは、常に 1 レベル以上の階層構造を持ちます。このスキーマでは、各ディメンションの階層は、フラットなデータのフィールドに対応した 1 レベルのみで構成されます。これは、最も単純な形式のディメンションです。スキーマによっては、複数のレベルの階層構造を定義し、複雑なディメンションを作成する場合があります。詳細については、OLAP スキーマの作成を参照してください。
  • メジャーの定義では、OLAP キューブの各ポイントに対応する値を含むフラットなデータのデータフィールドと、メジャーを OLAP クエリで集計する方法を指定します。この例では、売上高を合計して集計します。つまり、この OLAP のすべてのクエリは、売上高の合計を返します。その他の集計方法のタイプとして、最小値、最大値および平均などがあります。
  • この OLAPCube の定義では、complete イベントのイベントハンドラを指定します。キューブに対するクエリは、初期化が完了するまで呼び出せません。初期化の完了は、complete イベントの送出によって、キューブから通知されます。

アプリケーションの要求によっては、同じフラットなデータセットから複数の OLAP キューブを作成し、各キューブで異なるスキーマを使用して、それぞれ独自のディメンションとメジャーの配列を作成します。詳細および OLAP スキーマの例については、OLAP スキーマの作成を参照してください。

OLAP クエリについて

OLAP クエリは、OLAPDataGrid コントロールで表示する集計データを OLAP キューブから抽出します。クエリでは、クエリの特性を定義するディメンションと、クエリ結果を作成するために集計するメジャーを指定します。

前の節では、売上高情報の OLAP スキーマを定義しました。このスキーマでは、CustomerDim、ProductDim および QuarterDim の各ディメンションと、SUM の集計方法で集計する売上高の単一のメジャーを定義しています。そのため、次の条件で売上高を集計するクエリを作成することができます。

  • 各四半期の製品別
  • 各製品の顧客別
  • 各四半期の顧客別
  • 各ディメンションのメンバーによるその他の任意の組み合わせ

クエリは、OLAPQuery クラスのインスタンスとして ActionScript で構築し、OLAPCube.execute() メソッドを呼び出して実行します。これにより、AsyncToken クラスのインスタンスが返されます。

クエリには、行軸と列軸という、2 つの IOLAPQueryAxis 型の軸が必要です。行軸では OLAPDataGrid コントロールの各行のデータ集計情報を定義し、列軸では各列のデータ収集情報を定義します。

各軸のデータ収集情報を指定するには、次の例のように、OLAPSet クラスを使用します。

// 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 productSet:OLAPSet = new OLAPSet;
// Add the Product to the row to aggregate data 
// by the Product dimension.
productSet.addElements(
    cube.findDimension("ProductDim").findAttribute("Product").children);
// Add the OLAPSet instance to the axis.
rowQueryAxis.addSet(productSet);
            
// Get the column axis from the query instance, and configure it
// to aggregate the columns by the Quarter dimension. 
var colQueryAxis:IOLAPQueryAxis = query.getAxis(OLAPQuery.COLUMN_AXIS);         
var quarterSet:OLAPSet= new OLAPSet;
quarterSet.addElements(
    cube.findDimension("QuarterDim").findAttribute("Quarter").children);
colQueryAxis.addSet(quarterSet);

// Execute the query.
var token:AsyncToken = cube.execute(query);
// Set up handlers for the query results.
token.addResponder(new AsyncResponder(showResult, showFault));

このクエリの以下の点に注目してください。

  • OLAPQuery.getAxis() メソッドを呼び出して各軸を初期化します。
  • OLAPSet.addElements() メソッドを呼び出して各 OLAPSet インスタンスを設定し、軸の設定に使用する情報を指定します。
  • AsyncToken クラスで定義されたクエリ結果を処理するために、2 つの関数を設定します。この例では、クエリが正しく処理されると、関数 showResult() がクエリ結果を処理します。また、クエリの実行時に検出されたエラーは、関数 showFault() が処理します。AsyncToken クラスの使用について詳しくは、クエリを実行し、結果を OLAPDataGrid コントロールに返すを参照してください。

詳細および OLAP クエリの例については、OLAP クエリの作成を参照してください。

OLAPDataGrid コントロールと AdvancedDataGrid コントロールの違い

OLAP クエリの結果表示には、OLAPDataGrid コントロールを使用します。OLAPDataGrid コントロールは AdvancedDataGrid コントロールのサブクラスで、その機能の多くを継承しています。ただし、OLAPDataGrid コントロールにデータを渡す方法により、AdvancedDataGrid コントロールとはいくつかの点で異なります。

  • OLAPDataGrid コントロールでは、列のドラッグは許可されていません。
  • セルデータはクエリの結果であり、OLAP キューブの単一のデータ値に対応していないので、OLAPDataGrid コントロールのセルを編集することはできません。
  • OLAPDataGrid コントロールのヘッダーをクリックしても、列をソートすることはできません。ソートはディメンションレベルでサポートされており、そのディメンションのメンバーの順序を変更することができます。

OLAPDataGrid コントロールのデータの設定は、コントロールのデータプロバイダを OLAPResult クラスのインスタンスに設定することで実行します。これにより、OLAP クエリの結果がコントロールに設定されます。このコントロールを使用する詳しい例については、OLAPDataGrid コントロールの使用例を参照してください。

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート