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