@RANK
Essbaseの@RANK計算関数は、指定されたデータ・セットの値のうち、指定されたメンバーまたは指定された値のランクを返します。値のランクは、ソートされたデータ・セット内のその位置(ランク)と同等です。
構文
@RANK (rankOrderType, SKIPNONE | SKIPMISSING | SKIPZERO | SKIPBOTH, value, XrangeList)
パラメータ
- rankOrderType
-
データ・セットをソートする順序のタイプ。オプション:
- ASCEND XrangeListにリストされている値を昇順でランク付けします。
- DESCEND XrangeListにリストされている値を降順でランク付けします。これはデフォルトです。
- SKIPNONE
-
ランクの計算中に、内容に関係なく、データ・セットで指定したすべてのセルが含まれます。
- SKIPMISSING
-
ランクの計算中に、すべての
#MISSING
値をデータ・セットから除外します。 - SKIPZERO
-
ランクの計算中に、すべてのゼロ(0)値をデータ・セットから除外します。
- SKIPBOTH
-
ランクの計算中に、すべてのゼロ(0)値と
#MISSING
値をデータ・セットから除外します。 - value
-
(1)ランクが計算されるメンバーまたはメンバーの組合せ、または(2)ランクが計算される定数値。
- XrangeList
-
ランクが計算される数値のリスト。このトピック全体で、データ・セットと総称されます。
有効なメンバー名、メンバー名のカンマ区切りリスト、ディメンション間メンバー、またはメンバー・セット関数か範囲関数(@XRANGEを含む)からの戻り値にできます。
XrangeListの詳細は、範囲リスト・パラメータを参照してください。
ノート
-
SKIP処理後、@RANKはデータ・セットを降順(15341、9650、6556、4255、1989など)または昇順(1989、4255、6556、9650、15341など)でソートします。値のランクは、ソートされたデータ・セット内での位置を降順で識別します(たとえば、15341は1にランク付けされ、1989は5にランク付けされます)。
-
#MISSING
の入力値は、#MISSING
を返します。#MISSING
は、SKIP処理後に、比較する値がない場合にも返されます。 -
@RANKは、重複する値に同じランクを割り当てます。ただし、重複する値の存在はランク番号に影響します。たとえば、値のリストに[2,2,4,5]が含まれている場合、Essbaseは、最初にリストを降順[5,4,2,2]でソートし、次にこれをランク付けます。[5]はランク1、[4]はランク2、[2]はランク3になります。この場合、ランク4の値はありません。
-
valueが定数値であり、その値がデータ・セット(XrangeList)に含まれていない場合、Essbaseはこの定数値をリストに挿入し、それに応じてランク付けします。たとえば、値のリストに[2,4,6,13]が含まれていて、このリストで[3]の値を(降順で)ランク付けする場合、Essbaseは次のようにします。
-
リストを降順でソート[13,6,4,2]
-
リスト[13,6,4,3,2]に[3]を挿入
-
リスト内で[3]をランク付け: この場合、[3]のランクは4です。
-
-
計算スクリプトで@RANKを使用する場合は、FIX文内で使用してください。FIXの使用は必須ではありませんが、FIXを使用すると計算パフォーマンスが向上する場合があります。
-
スパース・ディメンションの広い範囲で@RANKを使用する場合は、計算機キャッシュのサイズを増やす必要がある場合があります。
例
例1
次の例は、Sample Basicデータベースに基づいています。Measuresディメンションに追加のメンバーであるSales Rankが含まれているとします。Essbaseは、一連の製品の売上高値をランク付けします。
"Sales Rank" = @RANK(SKIPBOTH,Sales,
@RANGE(Sales,@LEVMBRS(Product,1)));
この例では、次のレポートが作成されます式でSKIPBOTHが指定されているため、Sales->Diet Drinksの#MI
値は、ランク付けされたリストに含まれません。
New York Actual Jan
Sales Sales Rank
===== ==========
Colas 678 1
Root Beer 551 4
Cream Soda 663 2
Fruit Soda 587 3
Diet Drinks #MI #MI
例2
次の例は、Sample Basicデータベースに基づいています。Measuresディメンションに追加のメンバーであるExpense Rankが含まれているとします。Essbaseは、一連の製品の総経費値を昇順でランク付けします(最小経費にはランク1が割り当てられます)。
この例では、ASCENDを使用して値を昇順でランク付けします。
"Expense Rank" = @RANK(ASCEND,SKIPBOTH,"Total Expenses",@RANGE("Total Expenses",@LEVMBRS(Product,1)));
この例では、次のレポートが作成されます
New York Actual Jan
Total Expense Expense Rank
============= ==========
Colas 145 2
Root Beer 215 4
Cream Soda 213 3
Fruit Soda 100 1
Diet Drinks #MI #MI
例3
次の例では、YearディメンションがSample Basicに追加されていることを前提としています。データ・セット内のディメンション間メンバーを使用して値をランク付けします。
FIX(Product)
"Sales Rank" = @RANK(SKIPBOTH,Sales,@XRANGE("2011"->"Sep", "2012"->"Mar"));
ENDFIX
前述の計算は、XrangeListで指定した次の多次元範囲で実行されます。
2011->Sep
2011->Oct
2011->Nov
2011->Dec
2012->Jan
2012->Feb
2012->Mar