次の方法で共有


不規則階層

不規則階層は、レベル数が不均等なユーザー定義階層です。 一般的な例としては、高レベルのマネージャーが直属の部下と非マネージャーの両方を直属の部下として持つ組織図や、ワシントン D.C.、バチカン市国、ニューデリーなどの親の州または州がない国と地域で構成される地理的階層などがあります。

ディメンション内のほとんどの階層では、各レベルのメンバー数が同じレベルの他のメンバーと同じになります。 不規則階層は、少なくとも 1 つのメンバーの論理親がメンバーのすぐ上のレベルにないという点で異なります。 この場合、階層はドリルダウン パスごとに異なるレベルに下がります。 クライアント アプリケーションでは、ドリルダウン パスが不必要に複雑になる可能性があります。

クライアント アプリケーションは、不規則な階層の処理方法によって異なります。 モデルに不規則階層が存在する場合は、期待するレンダリング動作を得るために少し余分な作業を行う準備をしてください。

最初の手順として、クライアント アプリケーションでドリルダウン パスの処理方法を確認します。 たとえば、Excel では、欠損値のプレースホルダーとして親名が繰り返されます。 この動作を自分で確認するには、Adventure Works 多次元モデルの Sales Territory ディメンションを使用してピボットテーブルを作成します。 Sales Territory 属性としてグループ、国、地域を持つピボットテーブルでは、地域の値が欠けている国にはプレースホルダーが表示されます。この場合、上位の親(国名)が繰り返し表示されます。 この動作は、Excel 内で固定されている MDX Compatibility=1 接続文字列プロパティから派生します。 クライアントが探しているドリルダウン動作を自然に提供しない場合は、モデルのプロパティを設定して、少なくともそれらの動作の一部を変更できます。

このトピックには、次のセクションが含まれています。

不規則階層のドリルダウン ナビゲーションを変更するためのアプローチ

ドリルダウン ナビゲーションが期待される値を返さない場合、または使用するのが難しいと認識される場合、不規則階層の存在は問題になります。 不規則階層の結果として発生するナビゲーションの問題を解決するには、次のオプションを検討してください。

  • 通常の階層を使用しますが、各レベルで HideMemberIf プロパティを設定して、不足しているレベルをユーザーに視覚化するかどうかを指定します。 HideMemberIfを設定するときは、既定のナビゲーション動作をオーバーライドするために、接続文字列にMDXCompatibilityも設定する必要があります。 これらのプロパティを設定する手順については、このトピックを参照してください。

  • 親子関係の階層構造を作成し、レベルメンバーを明確に管理します。 この手法の図については、 SSAS の不規則階層 (ブログ記事) を参照してください。 オンライン ブックの詳細については、「 Parent-Child 階層」を参照してください。 親子階層を作成する欠点は、ディメンションごとに 1 つだけを持つことです。通常、中間メンバーの集計を計算するときにパフォーマンスの低下が発生します。

ディメンションに複数の不規則階層が含まれている場合は、最初のアプローチを使用して、 HideMemberIf設定する必要があります。 不規則階層の操作に関する実際的な経験を持つ BI 開発者は、物理データ テーブルの追加の変更を要求し、レベルごとに個別のテーブルを作成します。 この手法の詳細については、Martin Mason の SSAS Financial Cube-Part 1a-Ragged Hierarchies(ブログ)を参照してください。

HideMemberIf を設定して通常の階層内のメンバーを非表示にする

不規則なディメンションのテーブルでは、論理的に不足しているメンバーをさまざまな方法で表すことができます。 テーブル セルには、null または空の文字列を含めることができます。または、プレースホルダーとして機能する親と同じ値を含めることができます。 プレースホルダーの表現は、 HideMemberIf プロパティとクライアント アプリケーションの MDX Compatibility 接続文字列プロパティによって決定される子メンバーのプレースホルダーの状態によって決まります。

不規則階層の表示をサポートするクライアント アプリケーションの場合は、これらのプロパティを使用して、論理的に不足しているメンバーを非表示にすることができます。

  1. SSDT で、ディメンションをダブルクリックしてディメンション デザイナーで開きます。 最初のタブである [ディメンション構造] には、[階層] ペインに属性階層が表示されます。

  2. 階層内のメンバーを右クリックし、[プロパティ] を選択 しますHideMemberIfを、以下に示す値のいずれかに設定します。

    HideMemberIf の設定 説明
    Never レベル メンバーが非表示になることはありません。 これが既定値です。
    OnlyChildWithNoName レベル メンバーが親の唯一の子であり、その名前が null または空の文字列である場合、レベル メンバーは非表示になります。
    OnlyChildWithParentName レベル メンバーが親の唯一の子であり、その名前がその親の名前と同じである場合、レベル メンバーは非表示になります。
    NoName レベル メンバーは、その名前が空の場合は非表示になります。
    ParentName レベル メンバーの名前が親の名前と同じ場合、レベル メンバーは非表示になります。

MDX 互換性を設定して、クライアント アプリケーションでのプレースホルダーの表現方法を決定する

階層レベルで HideMemberIf を設定した後、クライアント アプリケーションから送信される接続文字列の MDX Compatibility プロパティも設定する必要があります。 MDX Compatibility設定は、HideMemberIfを使用するかどうかを決定します。

MDX 互換性設定 説明 使用方法
1 プレースホルダー値を表示します。 これは、Excel、SSDT、SSMS で使用される既定値です。 不規則階層の空のレベルをドリルダウンするときにプレースホルダー値を返すようにサーバーに指示します。 プレースホルダーの値をクリックすると、引き続き子 (リーフ) ノードに移動できます。

Excel は Analysis Services への接続に使用される接続文字列を所有し、新しい接続ごとに常に MDX Compatibility を 1 に設定します。 この動作により、下位互換性が維持されます。
2 プレースホルダー値 (null 値または親レベルの重複) を非表示にしますが、関連する値を持つ他のレベルとノードを表示します。 MDX Compatibility=2 は通常、不規則階層の観点から優先設定と見なされます。 Reporting Services レポートと一部のサード パーティ製クライアント アプリケーションでは、この設定を保持できます。

こちらもご覧ください

User-Defined 階層の作成
ユーザー階層
Parent-Child 階層
接続文字列のプロパティ (Analysis Services)