EQLでは、管理対象属性に対する階層関数がサポートされます。
特定の子または祖先でフィルタリングすることや、階層の特定レベルまたは相対レベルを返すこともできます。管理対象属性には、SELECT文の中やその他の場所で別名を付けることができます。
関連する関数は次のとおりです。
関数 | 説明 |
---|---|
ANCESTOR(expr, int) | 名前付き属性の、指定された深さにある祖先を返します。要求された深さが属性値の深さよりも大きい場合は、NULLが返されます。ルートの深さは0です。 |
HIERARCHY_LEVEL(expr) | 名前付き属性のレベルを数値として返します。レベルとは、ルートからのパス上にある値の数です。ルートのレベルは常に0です。 |
TO_MANAGED_VALUE(attribute, value) | 特定の管理対象属性と管理対象値を表すリテラルから、管理対象値リテラルを返します。両方のパラメータが文字列リテラルであることが必要です。 |
IS_DESCENDANT(expr, value) | レコードが選択されるのは、名前付き属性が指定の属性であるか子であり、指定された値に一致する場合です。属性が、指定された階層のメンバーでない場合は、コンパイル時エラーになります。主キーを持つ属性が見つからない場合の結果はNULLになります。
この関数は、標準属性とともに使用することもできます。この場合は、レコードが選択されるのは指定された属性が存在しており、指定された値に一致する場合です。 |
IS_ANCESTOR(expr, value) | レコードが選択されるのは、名前付き属性が指定の属性であるか祖先である場合です。属性が、指定された階層のメンバーでない場合は、コンパイル時エラーになります。主キーを持つ属性が見つからない場合の結果はNULLになります。
この関数は、標準属性とともに使用することもできます。この場合は、レコードが選択されるのは指定された属性が存在しており、指定された値に一致する場合です。 |
GET_LCA(expr1, expr2) | この行関数は、2つの管理対象属性のLCA(最小共通祖先)を返します。2つの管理対象属性が同じ階層に属している必要があります。そうでない場合は、コンパイル時エラーになります。 |
LCA(attribute) | この集計関数は、指定された属性列内の管理対象属性のLCAを返します。LCAとは、指定されたすべてのメンバーの祖先が存在する、最も階層の浅いレベルのことです。この関数では、NULL値は無視されます。 |
RETURN Results AS SELECT ProductCategory AS PC, ARB(ANCESTOR(PC, HIERARCHY_LEVEL(ProductCategory)-1)) AS Anc WHERE IS_DESCENDANT(ProductCategory, 'CAT_BIKES') GROUP BY PC ORDER BY PC
RETURN Results AS SELECT ProductCategory AS PC, ANCESTOR(PC, 1) AS Ancestor WHERE ANCESTOR(ProductCategory, 1) = 'CAT_BIKES' GROUP BY PC ORDER BY PC
RETURN Results AS SELECT ProductCategory AS PC, ANCESTOR(PC, HIERARCHY_LEVEL(PC) - 1) AS Parent WHERE ANCESTOR(ProductCategory, 1) = 'CAT_BIKES' GROUP BY PC ORDER BY PC
2番目と3番目の例では、重複排除のためにGROUP BYを使用しています。さらに、ProductCategory AS PCという別名を付けていますが、この別名をWHERE句では使用できないことに注意してください。この別名が使用可能になるのはWHERE句の実行後であるからです。
RETURN Results AS SELECT HIERARCHY_LEVEL(TO_MANAGED_VALUE('ProductCategory', 'Bikes')) AS HL ...