@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]のランクは1、[4]のランクは2、[2]のランクは3です。 この場合、ランク4の値はありません。
-
valueが定数値で、その値がデータ・セット(XrangeList)に含まれていない場合、Essbaseは定数値をリストに挿入し、それに応じてランク付けします。 たとえば、値リストに[2,4,6,13]が含まれており、このリストの値を(降順に)ランク付けする場合、Essbaseは次のように動作します:
-
リストを降順にソートします[13,6,4,2]
-
[3]をリスト[13,6,4,3,2]に挿入
-
リスト内のランク[3]: この場合、[3]のランクは4です。
-
-
計算スクリプトで@RANKを使用する場合は、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