Leaves
EssbaseのMDX Leaves関数は、指定されたメンバーの値に寄与するレベル0 (リーフ)のメンバーのセットを返します。
Leaves関数は、取得前のセットの事前拡張を回避しながら、メンバーまたはタプルの大規模セットをコンパクトに記述します。大規模セットは非常にスパースである傾向があり、入力メンバーに寄与し(#Missing値がない)、返されるメンバーはごくわずかであるためです。その結果、Leavesは、特に同時ユーザー環境で、同等の空でないDescendants関数呼び出しよりも、消費するメモリー・リソースが少なく、スケーラビリティが向上します。
#MISSING値を持つメンバーは、返されるセットに含まれません。
memberがプライマリ階層にある場合、返されるセットは、空でないレベル0の子孫のセットです。
Leavesによって返されるセットは、レベル0の空でない子孫のセットであり、いくつかの違いがあります。たとえば、memberが代替階層からのものである場合、返されるセットには、値がmemberの値に集約されるすべてのプライマリの格納されたレベル0メンバーが含まれます。これらの寄与するメンバーは次のいずれかです。
-
代替階層に沿ったmemberの直接の子孫
-
共有メンバーの手段でmemberの直接の子孫に値を寄与するメンバー
ほとんどの場合、Leaves関数は、取得前にセットを事前拡張しません。そのため、特に高同時ユーザー環境で、Descendants関数よりも消費するメモリー・リソースが少なく、大規模セットを扱う際のスケーラビリティが向上します。大規模セットは非常にスパースである傾向があり、そのため、MDXの現在のメンバー・スタックによって定義されるように、現在の観点で返されるメンバーはごくわずかです。
たとえば、医療提供者が、医師と地理のディメンションを含むデータベースを持っているとします。数十万の医師がいる可能性がありますが、特定の地理的場所の医師に関連付けられているデータを持っているのはごく一部です。Leavesは、セットが大規模であり、特定の観点からはスパースである問合せに最適です。
Select {[Copayments]} ON COLUMNS
CrossJoin(Leaves ([Doctors]), Leaves([Santa Clara County]) ON ROWS
Leaves関数は、大規模ディメンションでの問合せに役立ちます。
場合によっては、Leavesはセットの事前拡張を必要とし、メモリーの節約は限定的です。Leavesへの入力メンバーが勘定科目ディメンション、時間ディメンション、またはメンバーが10,000件未満のディメンションにある場合、セットの事前拡張が発生する可能性があります。
構文
Leaves ( member )
ノート
-
この関数は、集約ストレージ・データベースにのみ適用できます。Leaves()に非集約ストレージ入力メンバーを使用すると、エラーが返されます。
-
Leaves()は、保存された階層のメンバーに対してのみサポートされます。Leavesに動的階層内のメンバーを使用すると、エラーが返されます。
-
Head、Tail、Subsetなどのメタデータ関数を使用してLeavesの戻りセットを変更すると、問合せは最適化されません。たとえば、Leavesセットの半分を問い合せると、パフォーマンスは、空でないDescendants関数呼び出しの場合とほぼ同程度に低下します。
-
Leaves()は、大規模なスパース・ディメンションでの使用をお薦めします。一般に、入力セットに10,000個以上のメンバーが含まれている場合は、Leaves()を使用してパフォーマンスを最適化します。小さい密な入力セットの場合、CrossJoinを使用して軸にNON EMPTYキーワードを使用すると、パフォーマンスが向上する可能性があります。
例
次の例は、ASOSamp.Basicキューブに基づいています。
例1 (Leaves)
次の問合せは、ユニットデータが#MISSINGではないすべてのレベル0パーソナル・エレクトロニクス製品のユニット(パッケージあたりのアイテム)を返します。
SELECT
{Units} ON COLUMNS,
Leaves([Personal Electronics]) ON ROWS
FROM [ASOSamp.Basic]
Leavesは空ではないレベル0の子孫を返すため、前述の問合せは次の問合せと同じです。
SELECT
{Units} ON COLUMNS,
NON EMPTY Descendants([Personal Electronics], [Products].Levels(0), SELF) ON ROWS
FROM [ASOSamp.Basic]
前述の問合せは、次のグリッドを返します:
表4-106 MDX例からの出力グリッド
(軸) | 単位 |
---|---|
Digital Cameras | 3041 |
Camcorders | 3830 |
Photo Printers | 6002 |
Memory | 23599 |
Other Accessories | 117230 |
Boomboxes | 10380 |
Radios | 20009 |
[Handhelds]は、測定単位の値が#MISSINGであるため、結果セットから省略されています。
例2 (Leaves)
この例のために、[Small Items]という3番目の階層がProductsディメンションに追加されています。
![Productsディメンションにメンバー[Small Items]が追加されたアウトラインの抜粋。[Small Items]には、[Digital Cameras]、[Camcorders]、[Handhelds/PDAs]の子があります。 Productsディメンションにメンバー[Small Items]が追加されたアウトラインの抜粋。[Small Items]には、[Digital Cameras]、[Camcorders]、[Handhelds/PDAs]の子があります。](img/hier_smallitems.gif)
次の問合せ:
SELECT
{Units} ON COLUMNS,
Leaves ([Small Items]) ON ROWS
FROM [ASOSamp.Basic]
返されるグリッド:
表4-107 MDX例からの出力グリッド
(軸) | 単位 |
---|---|
Digital Cameras | 3041 |
Camcorders | 3830 |
Memory | 23599 |
Other Accessories | 117230 |
Leavesは、プライマリ・メンバーである[Digital Cameras]と[Camcorders]に加えて、プライマリ・メンバーである[Memory]と[Other Accessories]も返しました。これらのレベル0メンバーは、[Handhelds/PDAs]を介して[Small Items]に貢献したためです。