集約ストレージおよびMDXアウトライン式
ブロック・ストレージ・アウトラインの式を記述するために、Essbaseでは、一連の計算関数、および計算機(Calc)言語と呼ばれる演算子が提供されています。 Calculator言語は、集約ストレージ・データベースのメンバー式の記述には使用できません。 集約ストレージ・アウトラインの式ではMDX言語が使用されます。
次の項では、ブロック・ストレージから集約ストレージに移行されたアウトラインのMDXで計算機式をリライトする方法について説明します。 式をリライトする前に、集約ストレージ・アウトラインの基本的な動作を理解しておく必要があります。 集約ストレージの詳細は、「Essbaseキューブの設計およびメンテナンス」を参照してください。
計算関数からMDX関数への変換
計算機の式をMDXに変換する場合は、ブロック・ストレージ・アウトラインと集約ストレージ・アウトラインの次の違いに注意してください:
-
メンバーおよびそれに関連付けられたすべてのセルのストレージ特性は、「動的計算」 (および「動的計算および保管」)属性と保管済属性を介してブロック・ストレージ・アウトラインで定義されます。 このような属性は、集約ストレージ・アウトラインには存在しません。 明示的にタグ付けされた勘定科目ディメンションに沿った上位レベルのメンバーおよび式が添付されたメンバーは、常にこのようなデータベースで動的に計算されます。
-
ブロック・ストレージ・アウトラインでは、計算順序はアウトラインでのメンバーの表示順序に依存しますが、式は集約ストレージ・アウトラインでの依存関係の順序で実行されます。 また、セルの評価であいまいさが発生した場合の計算順序、および集約ストレージ・アウトラインでは2パス計算タグは必要ありません。
-
ブロック・ストレージ・アウトラインのレイアウトおよびディメンションの密と疎への分離は、特定の計算のセマンティクスに影響を与え、トップダウン計算モード、セルおよびブロック計算モード、方程式の作成ブロックなどの概念を高めます。 ディメンションを密および疎に分割しない集約ストレージ・アウトラインの簡略化には、このような概念は必要ありません。
計算式をMDXに変換するための一般的なガイドライン
この項では、計算機式をMDXに変換するための一般的なガイドラインをいくつか示します。
集約ストレージ・アウトラインを使用するようにアプリケーションが再設計されていることを確認してください。 この場合、式が、費用タグ付けに依存する差異関数や共有メンバーを操作する関数(@RDESCENDANTSなど)など、ブロック・ストレージ固有のアウトライン構造体を参照していないことを確認してください。 このような構造体は、集約ストレージ・アウトラインでは無効です。
MDXに直接対応するものが存在する、明示的にタグ付けされた勘定科目ディメンションに添付された式の各関数を書き換えます。 「表4-23」には、特定の情報と例が用意されています。 次に、間接リライトが必要な関数を特定します。 「表4-23」では、これらの関数の情報および例も提供しています。
ブロック・ストレージ・アウトラインの式の計算順序セマンティクスを理解します。 ブロック・ストレージと同じ結果が得られるように、集約ストレージ・アウトラインに依存する式を慎重に編成します。
式がカスタム定義関数またはマクロを参照する場合は、可能であれば他のMDX関数を使用して書き換えることを検討してください。
次の表に、Calculator言語のすべての関数とMDXでの類似点(およびその逆)を示します。 直接アナ・ログが存在しない場合は、トランスフォーメーション・ルールおよび例が提供されます。
表4-23計算機能からMDX関数へのマッピング
電卓 | MDX | Remarks/Examples |
---|---|---|
@ABS | Abs |
電卓
MDX
|
@ALLANCESTORS | Ancestors | 共有メンバーは、集約ストレージ・アウトラインには関係ありません。 |
@ALIAS | 必要ありません。 | MDXでは、@ALIASへの引数をそのまま外部関数に渡すことができます。 |
@ANCEST | 入力としてCurrentMemberを使用した「祖先」。 タプルを使用して、結果を@ANCEST関数のオプションの3番目の引数と結合します。 | 電卓 MDX
|
@ANCESTORS | Ancestors | 電卓 MDX
|
@ANCESTVAL | 入力としてCurrentMemberを使用した「祖先」。 タプルを使用して、結果を@ANCESTVAL関数のオプションの3番目の引数と結合します。 | 電卓 MDX
|
@ATTRIBUTE | Attribute |
電卓
MDX
|
@ATTRIBUTEBVAL | [BaseDim] .CurrentMember.AttributeDim | 「MDXプロパティについて」を参照。「電卓」 MDX
|
@ATTRIBUTESVAL | [BaseDim] .CurrentMember.AttributeDim | 「MDXプロパティについて」を参照。「電卓」 MDX
|
@ATTRIBUTEVAL | [BaseDim] .CurrentMember AttributeDim | 「MDXプロパティについて」を参照。「電卓」 MDX
|
@AVG |
@AVGへの入力セット内のすべての要素のディメンションが同じ場合は、Avgを使用します。 SKIPNONEをINCLUDEEMPTYに変換します。 @AVGへの入力セット内のすべての要素のディメンションが同じでない場合は、タプルを明示的に追加し、セットのカーディナリティ(セット内のタプルの数)で除算することで平均を実行します。 |
MDX Avg関数は、デフォルトで欠落しているセル値をスキップすることに注意してください。 電卓
MDX
SKIPMISSINGをSKIPNONEに置き換えると、変換は次のように変わります:
SKIPZEROの場合、変換は次のとおりです:
SKIPBOTHの場合、変換は次のとおりです:
|
@AVGRANGE | CrossJoin (「最初の引数」, set created out of second argument). 残りは、入力セットのすべての要素のディメンショナリティが同一の場合、@AVGに似ています。 |
電卓
MDX
SKIPMISSINGをSKIPNONEに置き換えると、変換は次のようになります:
SKIPZEROを使用する場合、変換は次のようになります:
|
@CHILDREN | Children |
電卓
MDX
または
|
@CONCATENATE | Concat |
電卓
MDX
|
@CORRELATION | MDXではサポートされません。 | . |
@COUNT |
SKIPNONEの場合はCountを使用します。 SKIPMISSINGの場合はNonEmptyCountを使用します。 SKIPZEROについては、次の列の例を参照してください。 SKIPBOTHには、Count (「フィルタ」 (set, value <> 0 && value <> MISSING)を使用します) |
電卓
MDX
Countは常に空のセルを含めてカウントされますが、NonEmptyCountはカウントされないことに注意してください。 SKIPNONEの場合、変換は次のようになります:
SKIPZEROの場合、変換は次のとおりです:
|
@CURGEN | Generation (CurrentMember(dimension)) |
電卓
MDX
|
@CURLEV | Level (CurrentMember(dimension)) |
電卓
MDX
|
@CURRMBR | CurrentMember |
電卓
MDX
|
@CURRMBRRANGE | RelMemberRange |
電卓
MDX
|
@DESCENDANTS | Descendants (member) | 例は、MDX Descendantsのドキュメントを参照してください。 |
@EXP | Exp |
電卓
MDX
|
@FACTORIAL | Factorial |
電卓
MDX
|
@GEN, @LEV | Generation, Level | . |
@GENMBRS, @LEVMBRS | layer . 「メンバー」 | . |
@IALLANCESTORS | Ancestors | 共有メンバーは、集約ストレージ・アウトラインには関係ありません。 |
@IANCESTORS | Ancestors | 共有メンバーは、集約ストレージ・アウトラインには関係ありません。 |
@ICHILDREN | Union(member, member.Children) |
電卓
MDX
|
@IDESCENDANTS | Descendants(member) |
電卓
MDX
|
@ILSIBLINGS | MemberRange (member.FirstSibling,member) |
電卓
MDX
|
@INT | Int |
電卓
MDX
|
@ISACCTYPE | IsAccType | 例については、MDX IsAccTypeのドキュメントを参照してください。 |
@ISANCEST | IsAncestor |
電卓
MDX
|
@ISCHILD | IsChild | 例については、MDX IsChildのドキュメントを参照してください。 |
@ISDESC | 例を参照してください。 |
電卓
MDX
または
|
@ISGEN | IsGeneration |
電卓
MDX
|
@ISIANCEST | IIF(Is(member, ancestormember) OR IsAncestor(member, ancestormember), <true-part>, <false-part>) |
電卓
MDX
|
@ISIBLINGS | Siblings(member) | 指定されたメンバーとその兄弟を含むセットを戻します。 |
@ISICHILD | IIF(Is(member, childmember) OR IsChild(member, childmember), <true-part>, <false-part>) |
電卓
MDX
|
@ISIDESC | 例を参照してください。 |
電卓
MDX
|
@ISIPARENT | IIF(Is(member, parentmember) |
電卓
MDX
|
@ISISIBLING | IsSibling(member, siblingmember) |
電卓
MDX
|
@ISLEV | IsLevel | . |
@ISMBR | IIF(Count(Intersect (member-set, member)) = 1, true-part, false-part) | カリキュレータを使用すると、MDXセットのルールをサブスクライブしていないメンバーまたはクロス・メンバーのコレクションを2番目の引数として表示できます。 この機能は、2番目のセットの各要素を列挙して交差をテストしないと簡単に複製できません。
ただし、2番目の引数がMDXセット・ルールをサブスクライブしている場合は、次に示すように変換が容易になります。 例: 電卓
MDX
|
@ISPARENT | IsChildを使用します。 |
電卓
MDX
|
@ISSAMEGEN,@ISSAMELEV | IIF (member.Generation = CurrentMember(dimension).Generation, <true-part>, <false-part>) |
電卓
MDX
|
@ISSIBLING | IsSibling | 例については、MDX IsSiblingのドキュメントを参照してください。 |
@ISUDA | IsUda | 例については、MDX IsUdaのドキュメントを参照してください。 |
@LIST | . | メンバー・セットがMDXセット・ルールをサブスクライブしていない場合は、明示的な列挙が必要です。 rangelistの場合は、CrossJoin(member, set)を使用します。 |
@LN, @LOG, @LOG10 | Ln, Log, Log10 | . |
@LSIBLINGS | MemberRange(member.FirstSibling, member.Lag(1))
MemberRange(member.Lead(1), member.LastSibling) |
電卓
MDX
電卓
MDX
|
@MATCH | . | . |
@MAX | Max | 引数リストがセットの場合はMaxを使用します。 それ以外の場合は、引数リストの明示的な列挙によって、Case構文を使用してロジックを書き換えます。
電卓
MDX
|
@MAXRANGE | Max |
電卓
MDX OR
|
@MAXS | Max |
電卓
MDX
SKIPZEROの場合、変換は次のとおりです:
SKIPBOTHの場合、Maxはデフォルトで欠落値をスキップするため、変換はSKIPZEROと同じです。 |
@MAXSRANGE | Max |
電卓
MDX
SKIPZEROの場合、変換は次のとおりです:
SKIPBOTHの場合、Maxはデフォルトで欠落値をスキップするため、変換はSKIPZEROと同じです。 |
@MDANCESTVAL | 例に示すように、「祖先」、ValueおよびCurrentmemberを使用します。 |
電卓
MDX MeasuresディメンションからのSales、マーケット・ディメンションに沿った現在のメンバーの祖先、およびProductディメンションに沿った現在のメンバーの祖先で構成されるタプルを構築します。 次に、タプルの値を取得します。
|
@MDPARENTVAL | 例に示すように、Parent、ValueおよびCurrentMemberを使用します。 |
電卓
MDX MeasuresディメンションからのSales、マーケット・ディメンションに沿った現在のメンバーの親、およびProductディメンションに沿った現在のメンバーの親で構成されるタプルを構築します。 次に、タプルの値を取得します。
|
@MDSHIFT | @NEXTに相当するMDXを参照し、シフトする必要があるディメンションごとに繰り返します。 各ディメンションの結果をCrossJoinし、最終タプルの値を取得します。 @MDANCESTVALのコメントを参照してください。 | . |
@MEDIAN | MDXではサポートされません。 | . |
@MEMBER | MDXでは不要です。 | . |
@MERGE | Union(set1,set2) | @MERGEへの入力として指定されたリストがMDXセットのルールをサブスクライブしていない場合、@MERGE関数は変換できません。 次の例では、リストがMDXセット・ルールをサブスクライブすることを前提としています。
電卓
MDX
|
@MIN | Min | 引数リストがセットの場合はMinを使用します。 それ以外の場合は、引数リストの明示的な列挙によって、Case構文を使用してロジックを書き換えます。
電卓
MDX
|
@MINRANGE | Min |
電卓
MDX OR
|
@MINS | Min |
電卓
MDX
SKIPZEROの場合、変換は次のとおりです:
SKIPBOTHの場合、変換は次のとおりです:
|
@MINSRANGE | Min |
電卓
MDX
SKIPZEROの場合、変換は次のとおりです:
SKIPBOTHの場合、変換は次のとおりです:
|
@MOD | Mod | . |
@MODE | MDXではサポートされません。 | . |
@NAME | MDXでは不要です。 | . |
@NEXT |
@NEXT(member,[n, range])は、指定されたメンバーから範囲内のn番目のセル値を戻します。 指定されたメンバーが範囲内に存在しない場合、この関数は欠落している値を戻します。 範囲が指定されていない場合、時間ディメンションのlevel-0メンバーが使用されます。 MDXには、任意の範囲に相当する関数はありません。 ただし、範囲が特定のレベルまたは世代のメンバーに制限されている場合、NextMember (n= 1の場合)またはLead/Lagを使用すると、サンプルの変換に示すように動作します。 これは一般的なケースです。 |
電卓
MDX
代替方法: 電卓
MDX
|
@NEXTS | MDXではサポートされません。 | . |
@PARENT | Parent | . |
@PARENTVAL | 入力としてCurrentMemberを使用したParent。 タプルを使用して、結果を@PARENTVAL関数のオプションの秒引数と結合します。 |
電卓
MDX
|
@POWER | Power | . |
@PRIOR |
@PRIOR(member,[n, range])は、指定されたメンバーから範囲内のn番目のセル値を戻します。 指定されたメンバーが範囲内に存在しない場合、この関数は欠落している値を戻します。 範囲が指定されていない場合、時間ディメンションのlevel-0メンバーが使用されます。 MDXには、任意の範囲に相当する関数はありません。 ただし、範囲が特定のレベルまたは世代のメンバーに制限されている場合、PrevMember (n= 1の場合)またはLead/Lagを使用すると、サンプルの変換に示すように動作します。 これは一般的なケースです。 |
電卓
MDX
代替方法: 電卓
MDX
|
@PRIORS | MDXではサポートされません。 | . |
@RANGE | CrossJoin(member, rangeset) | 範囲が指定されていない場合、計算機は自動的に時間ディメンションのlevel-0メンバーを使用します。 この機能はMDXには存在しないため、範囲を明示的に含める必要があります。
電卓
MDX
|
@RANK | MDXではサポートされません。 これはベクトル関数です。 | . |
@REMAINDER | Remainder | . |
@REMOVE | Except(set1, set2) | 変換は、set1およびset2が真のMDXセットの場合にのみ機能します。
電卓
MDX
|
@ROUND | Round | . |
@SHIFT | @PRIORおよび@NEXTを参照してください。 | . |
@SIBLINGS | Siblings | . |
@STDEV, @STDEVP, @STDEVRANGE | MDXではサポートされません。 | . |
@SUBSTRING | MDXではサポートされません。 | . |
@SUM | Sum | explistの各要素をタプルに変換し、タプルが集合的にセットを形成できるようにします。 |
@SUMRANGE | Sum(CrossJoin(member, Xrangelist)) |
電卓
MDX
|
@TODATE | Todate | . |
@TRUNCATE | Truncate | . |
@UDA | Uda | . |
@VAR, @VARPER | Arg1 - Arg2 | 集約ストレージ・アウトラインには費用タグがありません。 したがって、差異機能はデフォルトで減算に設定されます。 |
@VARIANCE, @VARIANCEP | MDXではサポートされません。 | . |
@WITHATTR | WithAttr | . |
@XRANGE | MDXではサポートされません。 | . |
@XREF | MDXではサポートされません。 | . |