@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は次のようにします。

    1. リストを降順でソート[13,6,4,2]

    2. リスト[13,6,4,3,2]に[3]を挿入

    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

関連項目