ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

HIERCHECK

HIERCHECKは、指定したaggmapの特定のリレーションまたはすべてのリレーションにおける階層に循環構造があるかどうかをチェックするためのファンクションです。階層ディメンションの親リレーションは、ディメンションのそれぞれの値の親を表します。(循環構造が現れるのは、親リレーションの中でディメンション値が誤ってそれ自身の祖先または子孫として指定された場合です。)

またHIERCHECKによるチェックを、階層に関するその他の状況について行うよう指定することもできます。


関連項目:

HIERSHAPEファンクション

戻り値

BOOLEAN

構文

コマンドとして使用する場合

HIERCHECK parent-relation [STATUS|NOSTATUS|valueset-name] [MULTIPATH] [CONSISTENT]-

[BALANCED levelrelation-name]

または

HIERCHECK aggmap-name [MULTIPATH] [CONSISTENT]levelrelation-name]

パラメータ

parent-relation

チェックする親リレーションの名前を指定するテキスト式。

aggmap-name

aggmapの名前を表すテキスト式。HIERCHECKでは、aggmapにおけるすべてのリレーションがチェックされます。

STATUS

HIERCHECKにおいて、リレーションの現行のディメンション・ステータスが使用されるよう指定します。

valueset

ステータスにおいて、HIERCHECKの実行対象となるリレーションのディメンションの値を指定します。

NOSTATUS

HIERCHECKにおいて、リレーションのデフォルトのディメンション・ステータスが使用されるよう指定します。

MULTIPATH

HIERCHECKにおいて、それぞれの子からその親へのパスが複数存在するかどうかのチェックが行われるよう指定します。

CONSISTENT

HIERCHECKにより、階層に整合性があるかどうかのチェックが行われるよう指定します。階層に整合性があるとは、異なる階層のすべてのノードが同じ子を持つことをいいます。

BALANCED levelrel-name

levelrel-nameに指定したレベル・リレーションを使用することにより、HIERCHECKにおいて、次の項目がすべて真かどうかのチェックが行われるよう指定します。

  • 階層内でNAレベルを持つ要素はすべて、リーフを持たないルートであるか、またはリーフであるかのどちらかである。

  • 階層内で同じ(非NA)レベルにある要素はすべて、その階層のルート(複数可)からの深さが同じである。

  • 階層内でレベル(非NA)が異なる要素は互いに深さが異なる。

使用上の注意

HIERCHECKを使用する理由

階層を作成したときに、それが有効であることを確認するための方法としてHIERCHECKを使用することをお薦めします。つまり、変数のデータをロールアップする前に、ディメンションの階層が正しく構成されているかどうかを確認する必要があるということです。たとえば、AGGREGATEコマンドでは、HIERCHECKを使用して、実行時の無限ループの発生を回避します。階層ディメンションのレベルを設定した後は、階層ディメンションによってディメンション化される変数にデータをロードする前、または変数に対して初めてAGGREGATEコマンドを使用する前に、親リレーションでループがあるかどうかをチェックしてください。最初にHIERCHECKを使用してすべての階層ディメンションの親リレーションをチェックしなくても変数をロールアップできますが、最初にHIERCHECKを使用することを習慣にしてください。

AggmapでHIERCHECKを使用する場合のステータス

aggmapにおけるリレーション内に値セットが存在する場合、HIERCHECKではこの値セットを使用して、リレーションのディメンション・ステータスが決定されます。それ以外の場合はすべて、リレーションのデフォルトのディメンション・ステータスが使用されます。

リレーションのディメンションではないすべてのディメンションに対しては、現在のステータスが使用されます。

HIERCHECKによってトリガーされるエラー・メッセージ

HIERCHECKでは、親リレーションの中にループが検出されるとエラーが通知され、実行が停止されます(つまり、HIERCHECKは常に、最初のエラー・メッセージが出た段階で停止します)。エラー・メッセージに示されるのは、ループに含まれるディメンション値、ループが発生する追加ディメンション値と呼ばれる階層の名前(親リレーションに1つ以上の名前付き階層がある場合)、およびループが検出された親リレーションの名前です。親リレーションにループがない場合、メッセージは表示されません。例7-108「ループのチェック」を参照してください。

例7-108 ループのチェック

次の例は、親リレーションを作成し、それにループがあるかどうかをチェックする方法を示します。最初に、ディメンションを定義してそれに値を追加します。

DEFINE geography DIMENSION ID
MAINTAIN geography ADD 'U.S.'
MAINTAIN geography ADD 'East' 'Central' 'West'
MAINTAIN geography ADD 'Boston' 'Atlanta' 'Chicago' 'Dallas' 'Denver' 'Seattle'

次に、そのディメンションをそれ自身に関連付けます。次の文は、GEOG.GEOGという名前の親リレーションを定義し、この親リレーションは、GEOGRAPHYディメンションをそれ自身に関連付けます。

define geog.geog RELATION geography <geography>

さらに、ディメンション値の階層を指定します。この例では、階層に3つのレベル(国、地域、都市)があります。階層を指定して、最上位レベルを除くすべてのレベルに対して、親ディメンション値を子ディメンション値に(たとえば、EastBostonに)割り当てます。これを行うために、値をリレーションに格納します。最初にLIMITコマンドを使用して子をグループ化し、次に、グループ化した子に親を割り当てます。

LIMIT geography TO 'East' 'Central' 'West'
geog.geog = 'U.S.'
LIMIT geography TO 'Boston' 'Atlanta'
geog.geog = 'East'
LIMIT geography TO 'Chicago' 'Dallas'
geog.geog = 'Central'
LIMIT geography TO 'Denver' 'Seattle'
geog.geog = 'West'

これにより、次の文に示すように、親リレーションgeog.geogでループがあるかどうかをチェックできます。

HIERCHECK geog.geog

この場合、HIERCHECKはエラー・メッセージを生成しないので、geog.geogにはループがありません。HIERCHK.LOOPFNDがNOに設定され、HIERCHK.LOOPVALSおよびHIERCHK.XTRADIMSがNAの設定のままです。

リレーションに格納される値に次の誤りがあったとします。

LIMIT geography TO 'East' 'Central' 'West'
geog.geog = 'East'

この文は、Eastをそれ自身の親としているのが誤りなので、AGGREGATEコマンドで無限ループが発生します。次に示すように、geog.geogリレーションでループがあるかどうかをチェックする文を実行するとエラー・メッセージが生成されます。

HIERCHECK geog.geog
ERROR: HIERCHECK has detected one or more loops in the hierarchy represented by GEOG.GEOG. The values involved are 'East'.