データ型の変換
一部の関数では、特定のデータ型のデータ値を適切に評価する必要があります。たとえば、数学的な計算を実行する関数では入力引数が整数値または浮動小数点値の必要があり、文字列を操作する関数では文字列値を指定する必要があります。場合によっては、データ値の型を変換して正しく導出する必要があります。Oracle Data Relationship Managementには、式でデータ型の変換を処理する一連の関数が用意されています。
プロパティ・レベルの制限
通常、粒度の低いレベルでデータを管理するために作成されるプロパティ定義は、それより粒度の高いレベルでデータを管理する他のプロパティを参照できます。
ローカル・ノード––他のローカル・ノード、グローバル・ノード、階層またはバージョン・プロパティを参照できます
グローバル・ノード––他のグローバル・ノードまたはバージョン・プロパティを参照できます
階層––他の階層またはバージョン・プロパティを参照できます(検索のみ)
バージョン––他のバージョン・プロパティを参照できます(検索のみ)
他のノードからのプロパティの参照
派生プロパティまたは検証が、式を計算中である現在のノードとは異なるノードからのプロパティ値を評価または取得することは普通です。Data Relationship Managementには、同じバージョン内のノードのプロパティ値にアクセスできる機能があります。
NodePropValue
ParentPropValue
HierNodePropValue
AncestorProp
DualAncestorProp
AscNodeProp
ReplacePropValue
ListPropValues
ListNodePropValues
グローバル・ノード・プロパティからローカル・ノード・プロパティを参照
グローバル・ノード・プロパティは、値を返すときに階層コンテキストを必要としませんが、ローカル・ノード・プロパティには階層を指定する必要があります。グローバル・ノードに対して計算される派生プロパティまたは検証が、標準のPropValueまたはNodePropValue関数を使用してローカル・ノード・プロパティ値を参照することはできません。グローバル・ノード・プロパティはローカル・ノード・プロパティを参照できますが、そのとき使用するHierNodePropValue関数で特定の階層を指定し、その階層におけるローカル・ノードのプロパティ値を取得する必要があります。
関数のネスト
関数を同じ式に組み合せることを、関数のネストと呼びます。同じ式の中で、1つの関数の出力が別の関数の入力引数として使用されます。ネストした関数を評価するとき、Data Relationship Managementは最も内側の関数を最初に実行し、実行を順に外側へと移していきます。関数は、同じ式の中で明示的にネストする場合も、異なる式を使用するプロパティを参照する1つの式によって暗黙的にネストされる場合もあります。
プロパティを他のプロパティの変数として使用
Data Relationship Managementでは、ネストした関数の組合せを使用して他のプロパティまたはノードとリテラル値を参照できるため、結果として長く複雑な式になることがあります。別のプロパティ定義を使用して式のロジックをモジュール化すれば、同じ結果を得るために必要な式の構文を単純化できます。この方法を利用すれば、式の管理は大幅に簡単になります。
また、同じプロパティ定義内で、あるいは特定のノードに対する複数のプロパティ定義にまたがって、式が同じデータを評価したり、何度も同じ計算を実行することが可能です。このロジックをはるかに大きい式に埋め込む、またはプロパティ定義内で実装すると、このような評価と計算が複数回実行されるため、プロパティの計算を必要とする操作のパフォーマンスに影響することがあります。別々のプロパティ定義の中で重複する式ロジックを切り分け、冗長な処理を最小限に抑えることができます。
再帰を使用した階層関係の走査
低い階層レベルにおけるノードのビジネス・ルールが、それより上位にある祖先ノードのプロパティ値の評価を必要とする場合があります。このように低いレベルのノードからプロパティ値を参照する方法の1つとして、参照すべき値を管理する継承をプロパティ定義で有効にすることが考えられます。ただし、多くの場合、プロパティ定義に継承を使用する方法は適切ではありません。
現在のプロパティ定義を自己参照する特定の階層式関数を使用して、階層の分岐まで上位方向に再帰すれば、祖先ノードのプロパティ値を取得または評価できます。
ParentPropValue--現在の階層で祖先の分岐まで上位方向に再帰するには、この関数を使用します。例: If(Equals(Integer,PropValue(Core.Level),1),Label Only,ParentPropValue(Essbase.DataStorage))
HierNodePropValue--別の階層で祖先の分岐まで上位方向に再帰するには、この関数を使用します。例: If(Equals(Boolean,PropValue(Custom.PlanPoint),True),Abbrev(),HierNodePropValue(Geography,HierNodePropValue(Geography,Abbrev(),Core.Parent),Custom.PlanMember))