LoginSignup
1

More than 3 years have passed since last update.

【PBCS】ASO(集約ストレージ・オプション)- MDX式の利用その①

Last updated at Posted at 2019-04-26

MDXとは

・ASO(集約ストレージ・オプション)の中で計算式を記述するために使用される言語
・一方、BSOでは 計算関数(@から始まる関数群) および カルク言語 と呼ばれる演算子が提供されている
 ⇒ ASOで計算式を記述する場合にはMDX式への変換が必要!

MDXの基本

  1. ""(ダブルクオーテーション)ではなく [](大かっこ) でくくる
  2. 末尾には;(セミコロン)を 使用しない  
  /* BSOの場合 */ 
  "Member01"+"Member02";

  /* ASOの場合 */
  [Member01]+[Member02]
  1. ドリルダウンは .(ドット) を使用する
 [Period].[YearTotal].[H1].[Q1].[Apr]
  1. クロス演算は ,(カンマ) を使用する
 /* BSOの場合 */ 
   "Apr"->"Actual"->"Sales"
 /* ASOの場合 */
   [Apr],[Actual],[Sales]

主な変換例

(1) Case

・ELSEIFをMDX式に変換する際に使える

BSOの場合

IF(@ISMBR("Member1") OR @ISMBR("Member2"))
0;
ELSEIF(@ISMBR("Member3"))
1;
ELSEIF(@ISMBR("Member4"))
2;
ELSEIF(@ISMBR("Member5"))
3;
ELSE
9;
ENDIF

ASOの場合

IIF([Scenario].CurrentMember IS [Member1] OR 
[Scenario].CurrentMember IS [Member2]
,0,
CASE WHEN ([Scenario].CurrentMember IS [Member3]) THEN 1
  WHEN ([Scenario].CurrentMember IS [Act_PreAct]) THEN 2
  WHEN ([Scenario].CurrentMember IS [Bud_PreAct]) THEN 3
ELSE 9
END
)

(2) Descendants

・指定されたレベルまたは距離にあるメンバーの子孫のセットが戻される
@MEMBER@DESCENDANTS@IDESCENDANTからの変換に使用する

Descendants ( member, [{ layer | index }[, Desc_flags ]])

※【op】はオプション(任意)値
member:メンバー名(自身)
layer:戻される子孫の深さを示すレイヤーを指定【op】
index:戻される子孫の位置を示す、memberからの下位方向への階層の手順数【op】
Desc_flags:メンバー取得方法の詳細を示すキーワード【op】
  【SELF】layer内のメンバーのみ取得
  【AFTER】layerよりも下位のメンバーを取得。layerは含まない。
  【BEFORE】memberとその子孫のうち階層内でlayerよりも高いものを取得。layerは含まない。
  【BEFORE_AND_AFTER】AFTERとBEFOREで取得出来るメンバーの両方を取得。layerは含まない。
  【SELF_AND_AFTER】layer内のメンバーと、layerよりも下位のすべての子孫を取得。
  【SELF_AND_BEFORE】layerまでの、memberとそのすべての子孫を取得。
  【SELF_BEFORE_AFTER】memberとそのすべての子孫を取得。
  【LEAVES】memberとlayerの間のレベル0の子孫のみを取得。
  

<例①:自身を含むすべての子孫を取得(IDESCENDANTS)>

関数の場合

@IDESCENDANTS("Market")

MDXの場合

Descendants([Market])

MDXの場合②

Descendants([Market], [Market].level, SELF_BEFORE_AFTER)

<例②:自身を除くすべての子孫を取得(DESCENDANTS)>

関数の場合

@DESCENDANTS("Market")

MDXの場合

Descendants([Market], [Market].level, AFTER)

<例③:自身の配下にあるすべてのレベル0メンバーを取得(RELATIVE、LVL0DESCENDANTS)>

※Market配下の階層は10階層に満たないものと仮定する

関数の場合

@RELATIVE("Market",0)

※ LVL0DESCENDANTS("Market")と同義

MDXの場合

・Marketから10階層下は存在しないので、その間にあるすべての0メンバーが取得される

Descendants([Market],  10, LEAVES)

その②に続く
【PBCS】ASO(集約ストレージ・オプション)- MDX式の利用その②

その他変換方法はこちらを参照

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1