SORTCOMPOSITEオプションは、コンポジットを明示的にループ処理するREPORTなどの文を発行するときに、Oracle OLAPでコンポジットの値にソートを実行するかどうかを示します。ソートを実行すると、コンポジットの値はコンポジットのベース・ディメンション値の現行の順序に並べられます。
デフォルトで、SORTCOMPOSITEはYESに設定されているため、Oracle OLAPは必要なソートを実行します。コンポジットの値がどのようにソートされてもかまわず、Oracle OLAPがソートにかける処理時間を節約する場合にのみ、SORTCOMPOSITEをNOに設定します。
SORTCOMPOSITEは、コンポジットを明示的にループ処理するように指定する場合のみ、たとえば、REPORT文のDOWNまたはACROSSキーワードの後にコンポジット名を指定する場合、Oracle OLAPの動作に影響します。コンポジットがベース・ディメンション値の現行の順序ですでにソートされている場合、Oracle OLAPが値を再度ソートすることはありません。
データ型
BOOLEAN
構文
SORTCOMPOSITE = {YES|NO}
引数
デフォルト。コンポジットに対して明示的に指定されたループ処理で、Oracle OLAPはコンポジットの値をコンポジットのベース・ディメンション値の順序に従ってソートします(この順序でまだソートされていない場合)。ソートの作業には一定の処理時間が必要なため、変数が大きい場合はパフォーマンスに影響することがあります。
コンポジットに対して明示的に指定されたループ処理で、Oracle OLAPはコンポジットのベース・ディメンション値の順序に従って値をソートしません。ソート・ステップが排除されるため、大きな変数が含まれている場合は、Oracle OLAPのパフォーマンスが向上します。「SORTCOMPOSITEをNOに設定した場合の結果」を参照してください。
注意
SORTCOMPOSITEをNOに設定した場合の結果
SORTCOMPOSITEをNOに設定すると、コンポジットの値のソート順序は未定義になります。Oracle OLAPで余分な動作をできるだけ実行せずに済む順序になるため、順序はループを必要とする文の前に実行したアクティビティによって決まります。順序はセッションごとに、またセッション内でもその時間ごとに異なります。コンポジットの値のデフォルトの順序とは限りません。
例
例6-99 コンポジットのソート
次の例で、coupon_countという変数には、特定地区において特定製品で引き換えられたクーポンの数が保持されています。coupon_countは、coupon_compositeというコンポジットでディメンション化されています。このコンポジットには、クーポンが配布された製品および地区の組合せが保持されています。
DEFINE coupon_composite COMPOSITE <product district> DEFINE coupon_count VARIABLE - INTEGER <month coupon_composite <product district>>
次の文を発行するとします。
SORTCOMPOSITE = YES LIMIT month TO FIRST 1 SORT product D TOTAL(coupon_count, product) REPORT DOWN coupon_composite W 15 coupon_count
SORTCOMPOSITEがYESに設定され、続くLIMITとSORTコマンドの後のREPORT文によって、次のレポートが生成されます。製品は、各製品のBostonとChicagoの数値の合計に従って降順にリストされます。
-COUPON_COUNT--
-----MONTH-----
PRODUCT DISTRICT Jan95
---------- ---------- ---------------
Racquets Boston 93
Tents Boston 42
Canoes Boston 67
Sportswear Boston 29
Racquets Chicago 102
Tents Chicago 51
SORTCOMPOSITEがNOに設定されている場合、Oracle OLAPは必ずしもcoupon_countのソートされた値に従ってproductディメンションをループ処理しません。ループ順序は、Oracle OLAPで余分な動作をできるだけ実行せずに済む順序になります。coupon_countが非常に大きな変数の場合、パフォーマンスが大幅に改善されることがあります。