Adobe Flex 3 ヘルプ

OLAPDataGrid の表示の設定

OLAPDataGrid コントロールの表示を制御するには、コールバック関数を使用してコントロールのセルにスタイルを適用するか、アイテムレンダラーを使用して表示を制御します。

コールバック関数を使用した OLAPDataGrid コントロールのセルのスタイル操作

コールバック関数を使用してセルのスタイルを制御するには、OLAPDataGrid.styleFunction プロパティを使用してコールバック関数を指定します。コールバック関数には次のシグネチャが必要です。

function_name(row:IOLAPAxisPosition, column:IOLAPAxisPosition, value:Number):Object

row は行軸上のこのセルに関連付けられている IOLAPAxisPosition で、column は列軸上のこのセルに関連付けられている IOLAPAxisPosition です。また、value はセルの値です。

この関数は、スタイルの設定を指定する 1 つまたは複数の styleName:value のペアが含まれたオブジェクトか、null を返します。styleName フィールドは、color など、スタイルプロパティの名前になります。また、value フィールドは、0x00FF00 など、スタイルプロパティの値になります。例えば、次のようなシンタックスを使用して 2 種類のスタイルを返すことができます。

{color:0xFF0000, fontWeight:"bold"}

OLAPDataGrid コントロールは、表示を更新する場合にコールバック関数を呼び出します。例えば、アプリケーションの起動時に最初に描画する場合や、invalidateList() メソッドを呼び出した場合が該当します。

次の例は、OLAPDataGrid コントロールの使用例の節で示された例を変更したもので、1000 を超える値を持つセルをすべて緑で表示するコールバック関数が追加されています。

<mx:Script>
    <![CDATA[
        ...        

        // Callback function that hightlights in green
        // all cells with a value greater than or equal to 1000.
        public function myStyleFunc(row:IOLAPAxisPosition, column:IOLAPAxisPosition, 
            value:Number):Object 
        {
            if (value >= 1000) 
            return {color:0x00FF00}; 
                
            // Return null if value is less than 1000.
            return null;      
        }        
     ]]>
</mx:Script>

...

<mx:OLAPDataGrid id="myOLAPDG" 
    width="100%" height="100%"
    styleFunction="myStyleFunc"/>

前の例で実行する SWF ファイルは以下のとおりです。

OLAPDataGrid コントロールでのアイテムレンダラーの使用

OLAPDataGrid コントロールのセルの外観と動作をカスタマイズするには、カスタムアイテムレンダラーを作成します。アイテムレンダラーとアイテムエディタの概要については、アイテムレンダラーとアイテムエディタの使用を参照してください。

OLAPDataGrid コントロールでアイテムレンダラーを使用するには、アイテムレンダラーを特定の列ではなく OLAPDataGrid コントロール自体に割り当てます。この処理には OLAPDataGrid.itemRendererProviders プロパティを使用します。itemRendererProviders プロパティには、OLAPDataGridItemRendererProvider インスタンスの配列が格納されています。各 OLAPDataGridItemRendererProvider インスタンスによって、単一のアイテムレンダラーの特性が定義されます。

アイテムレンダラーを OLAPDataGrid コントロールに割り当てるには、OLAPDataGridRendererProvider.renderer プロパティを使用します。この方法は、AdvancedDataGrid.rendererProviders プロパティを使用する方法とほとんど同じです。また、OLAPDataGridRendererProvider.formatter プロパティを使用して、フォーマッタクラスを割り当てることもできます。次の例は、OLAPDataGrid コントロールの使用例の節で示された例を変更したもので、コントロールの各セルに CurrencyFormatter フォーマッタを適用するアイテムレンダラーが追加されています。

...
<mx:CurrencyFormatter id="usdFormatter" precision="2" 
    currencySymbol="$" decimalSeparatorFrom="."
    decimalSeparatorTo="." useNegativeSign="true" 
    useThousandsSeparator="true" alignSymbol="left"/>

...

<mx:OLAPDataGrid id="myOLAPDG" 
    width="100%" height="100%">

    <mx:itemRendererProviders>
        <mx:OLAPDataGridItemRendererProvider 
            uniqueName="[QuarterDim].[Quarter]"
            type="{OLAPDataGrid.OLAP_HIERARCHY}"
            formatter="{usdFormatter}"/>
    </mx:itemRendererProviders>
</mx:OLAPDataGrid>

前の例で実行する SWF ファイルは以下のとおりです。

アイテムレンダラーを割り当てるには、OLAPDataGridItemRendererProvider クラスの uniqueName プロパティおよび type プロパティを使用します。uniqueName プロパティでは、アイテムレンダラーを使用して変更するクエリのエレメントを指定します。これは、OLAPDataGrid コントロールの対応するセルになります。type プロパティでは、uniqueName プロパティで指定されたエレメントのディメンション、階層またはレベルなど、エレメントタイプを指定します。

この例のクエリを定義する関数は次のとおりです。

// Create the OLAP query.
private function getQuery(cube:IOLAPCube):IOLAPQuery {
    // 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);

    return query;       
}

QuarterDim の軸が、QuarterDim ディメンションの Quarter 階層のクエリを作成している点に注意してください。そのため、uniqueName プロパティを [QuarterDim].[Quarter] に設定し、type プロパティを OLAPDataGrid.OLAP_HIERARCHY に設定します。この例の OLAP コードの構造について詳しくは、単純な OLAP キューブのクエリの記述を参照してください。

QuarterDim に対して次のようにクエリを指定することで、キューブをドリルダウンするようにこの例を変更することができます。

quarterSet.addElements(
    cube.findDimension("QuarterDim").findHierarchy("QuarterHier").
    findLevel("Quarter").members);

この場合、uniqueName プロパティおよび type プロパティを次のように変更します。

<mx:OLAPDataGrid id="myOLAPDG" 
    width="100%" height="100%">

    <mx:itemRendererProviders>
        <mx:OLAPDataGridItemRendererProvider 
            uniqueName="[QuarterDim].[QuarterHier].[Quarter]"
            type="{OLAPDataGrid.OLAP_LEVEL}"
            formatter="{usdFormatter}"/>
    </mx:itemRendererProviders>
</mx:OLAPDataGrid>

前の例で実行する SWF ファイルは以下のとおりです。

この例では、QuarterDim のクエリで、OLAP キューブのディメンション、階層およびレベルを指定していることに注意してください。このため、この構造に合わせて uniqueName プロパティを変更し、type プロパティを OLAPDataGrid.OLAP_LEVEL に設定します。

アイテムレンダラーの競合の解決

OLAPDataGrid コントロールの各セルは、コントロールの行に沿ったメンバーと列に沿ったメンバーの交差領域の結果です。ただし、アイテムレンダラーを OLAPDataGrid コントロールに割り当てる場合は、1 つのディメンションの行または列に対して uniqueName プロパティおよび type プロパティを指定するだけです。そのため、コントロールの同じセルに対して、2 つの異なるアイテムレンダラーが割り当てられてしまう場合もあります。

複数のアイテムレンダラーが競合する場合、OLAPDataGrid コントロールは次の優先順位でアイテムレンダラーを適用します。

  1. type = OLAPDataGrid.OLAP_MEMBER
  2. type = OLAPDataGrid.OLAP_LEVEL
  3. type = OLAPDataGrid.OLAP_HIERARCHY
  4. type = OLAPDataGrid.OLAP_DIMENSION

そのため、OLAPDataGrid.OLAP_LEVELtype 値を持つアイテムレンダラーと OLAPDataGrid.OLAP_HIERARCHYtype 値を持つアイテムレンダラーが同じセルに適用されている場合、OLAPDataGrid コントロールは OLAPDataGrid.OLAP_LEVELtype 値を持つアイテムレンダラーを適用します。

2 つのアイテムレンダラーが type プロパティに同じ値を持っている場合、OLAPDataGrid コントロールはアイテムにより近いほうを特定し、そちらを使用します。

アイテムレンダラーを使用した OLAPDataGrid コントロールへのスタイルの適用

次の例に示すように、アイテムレンダラーを使用して、OLAPDataGrid コントロールの特定のセルにスタイルを適用することができます。

<mx:Style>
    .cellStyle
    {
        color:#ff0000;
        fontWeight:"bold"
    }
</mx:Style>

    ...

<mx:OLAPDataGrid id="myOLAPDG" 
    width="100%" height="100%">

    <mx:itemRendererProviders>
        <mx:OLAPDataGridItemRendererProvider 
            uniqueName="[QuarterDim].[Quarter]"
            type="{OLAPDataGrid.OLAP_HIERARCHY}"
            formatter="{usdFormatter}"
            styleName="cellStyle"/>
    </mx:itemRendererProviders>
</mx:OLAPDataGrid>

前の例で実行する SWF ファイルは以下のとおりです。

この例では、スタイル定義を作成して OLAPDataGrid コントロールのセルに適用し、CurrencyFormatter フォーマッタの場合と同じセルに適用されるようにしています。

 

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