集約ストレージとMDXアウトライン式
ブロック・ストレージ・アウトラインの式を記述するために、Essbaseでは、一連の計算関数、および計算機(Calc)言語と呼ばれる演算子が提供されています。計算機言語を使用して、集約ストレージ・データベースのメンバー式を作成することはできません。集約ストレージ・アウトラインの式はMDXを使用して記述します。
次のセクションでは、ブロック・ストレージから集約ストレージに移行されたアウトラインの計算機式をMDXで書き換えるための情報を提供します。数式を書き直す前に、集約ストレージのアウトラインの基本的な動作をよく理解している必要があります。
計算機関数のMDX関数への変換
計算機式をMDXに変換するときは、ブロック・ストレージ・アウトラインと集約ストレージ・アウトラインの次の違いに注意してください。
-
メンバーのストレージ特性、したがってそれに関連するすべてのセルは、動的計算(および動的計算/保管)属性と保存された属性を介してブロック・ストレージ・アウトラインで定義されます。このような属性は、集約ストレージ・アウトラインには存在しません。明示的にタグ付けされた勘定科目ディメンションに沿った上位レベルのメンバーと、数式が添付されたメンバーは、このようなデータベースで常に動的に計算されます。
-
ブロック・ストレージ・アウトラインでは、計算順序は、メンバーがアウトラインに表示される順序に依存しますが、数式は集約ストレージ・アウトラインでの依存関係の順序で実行されます。さらに、セルの評価があいまいな場合の計算順序、および2パス計算タグは集約ストレージ・アウトラインでは必要ありません。
-
ブロック・ストレージ・アウトラインのレイアウトとディメンションの密および疎への分離は、特定の計算のセマンティクスに影響を与え、トップダウン計算モード、セルおよびブロック計算モード、方程式のブロック作成などの概念を生み出します。ディメンションを密と疎に分離しない集約ストレージ・アウトラインの単純さは、そのような概念を必要としません。
計算機の数式をMDXに変換するための一般的なガイドライン
このセクションでは、計算機の数式をMDXに変換するための一般的なガイドラインをいくつか示します。
集約ストレージ・アウトラインを使用するようにアプリケーションが再設計されていることを確認してください。この点で、経費のタグ付けに依存する分散関数や共有メンバー(@RDESCENDANTSなど)を操作する関数など、ブロック・ストレージ固有のアウトライン構造を数式が参照しないようにしてください。そのような構成は、集約ストレージ・アウトラインでは無効です。
MDXの直接の相対要素が存在する、明示的にタグ付けされた勘定科目ディメンションに添付された式の各関数を書き直します。表4-23に、具体的な情報と例を示します。次に、間接的な書き換えが必要な関数を特定します。表4-23は、これらの関数の情報と例も示しています。
ブロック・ストレージ・アウトラインの式の計算順序のセマンティクスを理解します。ブロック・ストレージと同じ結果が得られるように、集約ストレージ・アウトラインで従属式を慎重に整理します。
数式がカスタム定義関数またはマクロを参照している場合は、可能であれば、他のMDX関数を使用してそれらを書き直すことを検討してください。
次の表に、計算機言語のすべての関数とMDXの類似関数(およびその逆)を示します。直接アナログが存在しない場合は、変換ルールと例が提供されます。
表4-23計算機からMDX関数へのマッピング
| 計算機 | MDX | コメントと例 |
|---|---|---|
| @ABS | Abs |
計算機 MDX |
| @ALLANCESTORS | Ancestors | 共有メンバーは、集約ストレージ・アウトラインには関係しません。 |
| @ALIAS | 必要ありません。 | MDXでは、@ALIASへの引数は外部関数にそのまま渡せます。 |
| @ANCEST | CurrentMemberを入力として持つAncestor。タプルを使用して、結果を@ANCEST関数の省略可能な3番目の引数と組み合せます。 | 計算機MDX |
| @ANCESTORS | Ancestors | 計算機MDX |
| @ANCESTVAL | CurrentMemberを入力として持つAncestor。タプルを使用して、結果を@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 (first argument, 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 (Filter(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.Members | . |
| @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を使用します。それ以外の場合、引数リストを明示的に列挙することで、ケース構造を使用してロジックを書き換えます。
計算機 MDX |
| @MAXRANGE | Max |
計算機 MDX または |
| @MAXS | Max |
計算機 MDX SKIPZEROの場合、変換は次のとおりです。 SKIPBOTHの場合、Maxはデフォルトで欠落値をスキップするため、変換はSKIPZEROの場合と同じです。 |
| @MAXSRANGE | Max |
計算機 MDX SKIPZEROの場合、変換は次のとおりです。 SKIPBOTHの場合、Maxはデフォルトで欠落値をスキップするため、変換はSKIPZEROの場合と同じです。 |
| @MDANCESTVAL | 例に示すように、Ancestor、Value、Currentmemberを使用します。 |
計算機 MDX MeasuresディメンションからのSales、Marketディメンションに沿った現在のメンバーの祖先、Productディメンションに沿った現在のメンバーの祖先から構成されるタプルを作成します。次に、タプルの値を取得します。 |
| @MDPARENTVAL | 例に示すように、Parent、Value、CurrentMemberを使用します。 |
計算機 MDX MeasuresディメンションからのSales、Marketディメンションに沿った現在のメンバーの親、Productディメンションに沿った現在のメンバーの親から構成されるタプルを作成します。次に、タプルの値を取得します。 |
| @MDSHIFT | @NEXTに相当するMDXを参照し、シフトする必要のあるディメンションごとにこれを繰り返します。CrossJoinは各ディメンションの結果を取得し、最終的なタプルの値を取得します。@MDANCESTVALのコメントを参照してください。 | . |
| @MEDIAN | MDXではサポートされません。 | . |
| @MEMBER | MDXでは必要ありません。 | . |
| @MERGE | Union(set1,set2) | @MERGEへの入力として指定されたリストが、MDXセットのルールにサブスクライブしていない場合、@MERGE関数は変換できません。次の例では、リストがMDXセット・ルールにサブスクライブしていることを前提としています。
計算機 MDX |
| @MIN | Min | 引数リストがセットである場合、Minを使用します。それ以外の場合、引数リストを明示的に列挙することで、ケース構造を使用してロジックを書き換えます。
計算機 MDX |
| @MINRANGE | Min |
計算機 MDX または |
| @MINS | Min |
計算機 MDX SKIPZEROの場合、変換は次のとおりです。 SKIPBOTHの場合、変換は次のとおりです。 |
| @MINSRANGE | Min |
計算機 MDX SKIPZEROの場合、変換は次のとおりです。 SKIPBOTHの場合、変換は次のとおりです。 |
| @MOD | Mod | . |
| @MODE | MDXではサポートされません。 | . |
| @NAME | MDXでは必要ありません。 | . |
| @NEXT |
@NEXT(member,[n, range])は、指定したメンバーからの範囲内のn番目のセル値を返します。指定したメンバーが範囲内に存在しない場合、関数は欠落値を返します。範囲が指定されていない場合、時間ディメンションのレベル0メンバーが使用されます。 MDXには、任意の範囲に対する同等の関数はありません。ただし、範囲が特定のレベルまたは世代のメンバーに制限されている場合は、NextMember (if n=1)またはLead/Lagは、サンプル変換に示されているように機能します。これはおそらく一般的なケースです。 |
計算機 MDX 代替: 計算機 MDX |
| @NEXTS | MDXではサポートされません。 | . |
| @PARENT | Parent | . |
| @PARENTVAL | CurrentMemberを入力として持つParent。タプルを使用して、結果を@PARENTVAL関数の省略可能な2番目の引数と組み合せます。 |
計算機 MDX |
| @POWER | Power | . |
| @PRIOR |
@PRIOR(member,[n, range])は、提供されたメンバーからの範囲内のn番目のセル値を返します。指定したメンバーが範囲内に存在しない場合、関数は欠落値を返します。範囲が指定されていない場合、時間ディメンションのレベル0メンバーが使用されます。 MDXには、任意の範囲に対する同等の関数はありません。ただし、範囲が特定のレベルまたは世代のメンバーに制限されている場合は、PrevMember (if n=1)またはLead/Lagは、サンプル変換に示されているように機能します。これはおそらく一般的なケースです。 |
計算機 MDX 代替: 計算機 MDX |
| @PRIORS | MDXではサポートされません。 | . |
| @RANGE | CrossJoin(member, rangeset) | 計算機は、範囲が指定されていない場合、時間ディメンションのレベル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ではサポートされません。 | . |