Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

共有ディメンジョンおよび複合キューブの定義

この章では、共有ディメンジョンおよび複合キューブを定義する方法を説明します。以下のトピックについて説明します。

複合キューブはアーキテクトで定義できますが、共有ディメンジョンについてはスタジオを使用する必要があります。

背景情報は、"DeepSee モデルの定義" の “モデル・オプションの概要” の章を参照してください。

概要

このセクションでは、共有ディメンジョンおよび複合キューブの概要について説明します。

共有ディメンジョン

共有ディメンジョンとは、複数のキューブで使用可能なディメンジョンです。共有ディメンジョンにより、以下の操作が可能になります。

  • 両方のキューブのピボット・テーブルが組み込まれたダッシュボードを作成する。

  • ダッシュボードで、共有ディメンジョンを使用するフィルタを組み込む。

    テーブルがフィルタのターゲットとして構成されている場合、このフィルタは両方のディメンジョンからのピボット・テーブルに作用します。

  • 両方のキューブを使用するピボット・テーブルを作成する (次のセクションで説明する複合キューブも定義する場合のみ)。

通常、時間と場所に基づくディメンジョン (下記のメモを参照) は、関係を持たないキューブであっても共有可能です。

他のディメンジョンの共有が可能な場合もあります。例えば、あるキューブがトランザクションを、別のキューブがそのトランザクションを所有する顧客を表すとします。これら 2 つのキューブは、顧客の等級、ブローカなどの共通するディメンジョンを持つ可能性があります。

共有ディメンジョンは、以下の方法のいずれかで定義できます。

  • ディメンジョンは、形式的に共有できます。この場合、ディメンジョンはあるキューブで定義され、別のキューブ (複数も可) で参照されます。

    このようにする場合は、複合キューブも定義できます。このキューブは形式的にディメンジョンを共有している 2 つ以上のキューブを結合します。これによって、さまざまなキューブからの要素を単一のピボット・テーブルに結合することができます。

  • ディメンジョンは非公式に共有できます。この場合、各キューブに独自のディメンジョン定義があり、これらのキューブは互いに独立しています。

    この場合に、キューブを複合キューブ内で一緒に使用することはできません。ただし、前述したように、両方のキューブからピボット・テーブルを含むダッシュボードを作成して、それらにフィルタを適用することができます。

Note:

日付ディメンジョンは自動的に非公式に共有されます。すなわち、あるキューブの日付ディメンジョンは、同じ名前の日付ディメンジョンを定義している他のキューブに自動的に影響を及ぼします。日付ディメンジョンを共有するために作業は不要です。

複合キューブ

複合キューブとは、複数のキューブ (通常は 2 つ) を結合するサブジェクト領域です。これらのキューブでは、同名のディメンジョンのすべてが形式的に共有されたディメンジョンである必要があります。これによって、複数のキューブの要素が含まれるピボット・テーブルを作成できます。

複合キューブから作成されたピボット・テーブルを以下に示します。

generated description: compound cube pivot example

このピボット・テーブルの説明を以下に示します。

  • Doctor Count メジャーと Patients Per Week メジャーは Doctors キューブから得たものです。

    Patients Per Week メジャーは、指定された医師のセットの診察を受ける 1 週間の患者数です。

  • Avg Patient Allergy Count メジャーと Avg Patient Test Score メジャーは Patients キューブから得たものです。

    CompoundCube サブジェクト領域ではオーバーライドを定義しているため、これらのメジャーは、そのキューブ内とは異なる名前が付けられています。

  • ZIP レベルは、これらのキューブの両方により使用される共有ディメンジョン内にあります。

複合キューブでは、最初にリストしたキューブのディメンジョンと、形式的に共有されたすべてのディメンジョンが、使用可能なディメンジョンになります。利用可能なメジャーには、すべてのキューブのすべてのメジャーが含まれます。以下のルールが適用されます。

  • 複合キューブで使用されるすべてのキューブで名前が同じメジャーの場合、そのメジャーは共通のメジャーになります。このメジャーでは、値はすべてのキューブ全体で集約されます。例えば、あるキューブを Employees、他のキューブを Patients と仮定します。両方のキューブに Count メジャーがある場合、それらのカウントは一緒に集約されます。

    DeepSee には Count メジャーの名前を変更するオプションが用意されているため、その集約が適切でない場合には、この集約の発生を回避できます。

  • 1 つのキューブの中にのみ存在するメジャーの場合は、通常どおりに扱われます。

  • 形式的に共有されるレベルの場合、そのレベルのメンバと任意のキューブを使用して、それらのレコードのサブセットを選択することができます。前述の例では、32,006 のメンバはこの ZIP コードを持つすべての医師と、この ZIP コードを持つすべての患者に対応します。

    これは、すべてのキューブのメジャーが、潜在的にそのレベルのメンバに対して異なる値を保持している可能性があることを意味します。例えば、メジャー Patients Per Week (医師固有) とメジャー Avg Patient Allergy Count (患者固有)では、ZIP コードごとに保持している値が異なります。

  • 形式的に共有されないレベルの場合、そのレベルのメンバは、それを所有するキューブからレコードのサブセットを選択しますが、レコードはすべて他のキューブから選択します。

    これは、このレベルを定義するキューブのメジャーは、そのレベルのメンバに対して異なる値を潜在的に保持している可能性がありますが、その他のキューブのメジャーは常に同じ値を保持していることを意味します。以下の例では、Doctor Type ディメンジョンは共有されません。

    generated description: compound cube pivot example with nonshared dim

    Doctor Count メジャーと Avg Patients Per Week メジャー (どちらも医師に固有) は、医師のタイプごとに異なる値を持っています。

    その他のメジャーは患者に固有です。それらは各医師のタイプに対して同じ値を持ちます。この値は、すべての患者全体で集約されます。

形式的に共有されるディメンジョンの定義

形式的にディメンジョンを共有するには、以下の手順を実行します。

  1. あるキューブ定義で通常どおりディメンジョンを定義します。

    そのキューブを構築するときに、DeepSee は、通常の方法でそのディメンジョンのすべてのレベルの初期メンバを決定します。ソース・クラスが追加データを受信してキューブが更新されると、DeepSee は通常の方法でレベルのメンバを追加します。

  2. アーキテクトで別のキューブ定義を開き、以下のように共有ディメンジョンを追加します。

    1. [要素の追加] を選択します。

    2. [共有ディメンジョン] を選択します。

    3. 最初のドロップダウン・リストで、ディメンジョンを定義するキューブを選択します。

    4. 2 つ目のドロップダウン・リストで、ディメンジョンを選択します。

    5. [OK] を選択します。

    このディメンジョンのすべてのレベルについて、このキューブのファクト・テーブルは、もう一方のキューブのディメンジョン・テーブルをポイントします。

  3. 必要に応じて、2 つ目のキューブで、共有ディメンジョンのレベルのソース・データ定義をオーバーライドします。

    既定では、共有ディメンジョンは、依存キューブで使用された、同じソース・プロパティまたはソース式を使用します。これらをオーバーライドするには、スタジオでクラスを編集し、該当する <dimension> 要素を検索し、必要に応じて子の <hierarchy> 要素および <level> 要素を追加します。"DeepSee モデルの定義" の “キューブ・クラスのリファレンス情報” を参照してください。この場合は、ディメンジョン名、階層名およびレベル名が、他のキューブでの名前と同じになる必要があります。

以下の制約が適用されます。

  • ディメンジョンを所有するキューブは、最初に構築する必要があります。このプロセスでは、そのキューブで定義されたディメンジョンのテーブルが作成されます。他のキューブを構築すると、DeepSee がレコードを処理する際に、あらゆる共有ディメンジョンのディメンジョン・テーブルにレコードが追加されます。

  • 2 つ目のキューブのソース・データ定義をオーバーライドしない限り、同じレベル定義が両方のキューブに対して適切である必要があります。そのため、同一のソース・プロパティやソース式は、両方のキューブに適用できる必要があります。例えば、定義を所有するキューブがソース式 %source.Item.Category を使用する場合、このソース式は他方のキューブにも対応している必要があります。

  • そのディメンジョンを共有するキューブは、共有ディメンジョンのレベルでソース値 (メンバ・キー) が同じである必要があります。

    例えば、それぞれが市区町村名が組み込まれたテーブルに基づく 2 つのキューブについて考えてみましょう。これらのキューブが市区町村名に基づくレベルを共有するには、両方のソース・テーブルで市区町村名がまったく同じ (大文字と小文字の区別も含めて) であることが必要です(そうでない場合、JonesvilleJONESVILLE のような、複数の類似したメンバが存在するようになります)。

    ただし、双方のソース・テーブルが同じ値のセットを持つ必要はありません。例えば、一方のソース・テーブルで、他方にない市区町村をリストしていてもかまいません。ディメンジョン・テーブルには、値の上位集合すべてが含まれます。

また、これらのレベルを使用するフィルタのすべてで、ディメンジョンを共有するすべてのキューブのすべてのメンバがメンバのリストに含まれます。このため、例えば指定のダッシュボードで、フィルタ・ドロップダウンに見慣れない市区町村名、つまりそのダッシュボードで使用されるデータにはない市区町村名が表示される場合があります。この市区町村名は選択できますが、一致するデータは見つかりません。

HoleFoodsBudget キューブおよび CompoundCube/Doctors キューブの両方に共有ディメンジョンの例が含まれています。これらの例は、相互に関連性はありません。

非公式に共有されるディメンジョンの定義

非公式に共有されるディメンジョンを定義するには、論理ディメンジョン名、その階層名、レベル名、およびメンバ・キーが、関連するすべてのキューブで同じであることを確認します (ソース式や変換オプションなどの基礎となる詳細は重要ではありません。論理名が一致すること、およびメンバ・キーが一致することが重要です)。

このとき、これらのキューブのそれぞれでピボット・テーブルを定義し、そのピボット・テーブルを同じダッシュボードに配置することができます。共有ディメンジョンのいずれかを使用するフィルタ・ウィジェットを組み込むと、すべてのピボット・テーブルに影響する場合があります。

Patients キューブ (クラス DeepSee.Model.PatientsCubeOpens in a new tab 内にあります) には、HomeD ディメンジョンが含まれています。このディメンジョンには、H1 階層が含まれています。この階層には、ZIP レベルと City レベルが含まれています。

CityRainfall キューブ (クラス DeepSee.Model.RainfallCubeOpens in a new tab 内にあります) にも、HomeD ディメンジョンが含まれています。このディメンジョンは Patients キューブ内のディメンジョンと以下の点のみが異なっています。

  • HomeD ディメンジョンには表示名 CityD がある (内部名と同じではない)。

  • HomeD ディメンジョンには All メンバがある。

  • City レベルは City.Name ソース・プロパティを使用する (HomeCity.Name ではない)。

  • ZIP レベルは City.PostalCode ソース・プロパティを使用する (HomeCity.PostalCode ではない)。

これらの定義は、同じダッシュボード上の異なるピボット・テーブルでこれらのキューブを使用できること、および HomeD ディメンジョンを使用するどのフィルタに対しても同様の反応を得られることを意味します。このことを、ダッシュボード Dashboards/Demo Two Subject Areas Together で示します。ここには、Patients キューブを使用するピボット・テーブルと、CityRainfall キューブを使用する別のピボット・テーブルがあります。このダッシュボードには、両方のピボット・テーブルに作用するフィルタ・コントロールが組み込まれています。

同様に、Cities キューブ (クラス DeepSee.Model.CityCubeOpens in a new tab 内) には、HomeD という名前のディメンジョンがあり、このディメンジョンには H1 階層があり、この階層には ZIP および City レベルがあります。 HomeD の表示名は CityD で、このディメンジョンにはこのキューブで別の名前があるように見えます。前の説明と同様、Cities キューブと Patients キューブでは、レベルで使用されるソース・プロパティが異なります。

複合キューブの定義

複合キューブを作成するには、スタジオを使用する必要があります。複合キューブを作成するには、以下の手順をすべて実行します。

  • [ベース・キューブ] オプションにキューブのコンマ区切りのリストを指定して、サブジェクト領域を作成します。例えば、SAMPLES のサブジェクト領域 CompoundCube/CompoundCube の場合、[ベース・キューブ] は以下のようになります。

    CompoundCube/Patients,CompoundCube/Doctors,CompoundCube/CityRainfall
    

    また、右側の詳細領域の [依存] オプションを編集します。値には、すべてのキューブ・クラスの完全なパッケージおよびクラス名を指定します。

    どのサブジェクト領域クラスも常に、基にしている 1 つまたは複数のキューブ・クラスの後に、コンパイルする必要があります。これを制御するには、[依存] 設定が役に立ちます。

  • 複合キューブで使用するキューブで、必要に応じて Count メジャーを再定義します。これを実行するには、キューブの定義内で countMeasureName 属性と、countMeasureCaption 属性 (オプション) を指定します。以下に例を示します。

    <cube xmlns="http://www.intersystems.com/deepsee" 
    name="Doctors" 
    displayName="Doctors" 
    sourceClass="DeepSee.Study.Doctor" 
    countMeasureName="DoctorCount"  
    countMeasureCaption="Doctor Count">
    ...
    

    この変更には、これらのキューブの再構築は必要ありません。

  • 複合キューブではオプションとして、メジャー名の表示名を、複合キューブで使用する際により特定しやすい名前に変更することができます。以下に例を示します。

    <subjectArea xmlns="http://www.intersystems.com/deepsee/subjectarea" 
    name="CompoundCube" displayName="CompoundCube" 
    baseCube="Doctors,Patients">
    
    <measure name="Allergy Count" displayName="Patient Allergy Count"/>
    <measure name="Avg Allergy Count" displayName="Patient Avg Allergy Count"/>
    <measure name="Age" displayName="Patient Age"/>
    <measure name="Avg Age" displayName="Patient Avg Age"/>
    <measure name="Test Score" displayName="Patient Test Score"/>
    <measure name="Avg Test Score" displayName="Patient Avg Test Score"/>
    <measure name="Encounter Count" displayName="Patient Encounter Count"/>
    <measure name="Avg Enc Count" displayName="Patient Avg Enc Count"/>
    
    </subjectArea>

変更したすべてのキューブの定義をリコンパイルします。最後に、複合キューブをリコンパイルします。

複合キューブでは、最初にリストしたキューブのディメンジョンと、形式的に共有されたすべてのディメンジョンが、使用可能なディメンジョンになります。利用可能なメジャーには、すべてのキューブのすべてのメジャーが含まれます。

Note:

両方のキューブで同じ名前を持つディメンジョンは、形式的に共有される必要があります。両方のキューブで同じ名前を持つメジャーは、1 つに集約されます。

複合キューブの詳細リスト

複合キューブの詳細リストを定義するには、すべての参加キューブで同一の詳細リストを定義します。システムでこれらのリストの SQL UNION が生成されます。

リストは直接 SQL に基づく必要があります。データ・コネクタ経由の詳細リストは、複合キューブでは機能しません。

複合キューブの例

複合キューブの例は、SAMPLES ネームスペースのクラス DeepSee.Model.CompoundCube.CompoundCubeOpens in a new tab を参照してください。このクラスは以下のように定義されています。

Class DeepSee.Model.CompoundCube.CompoundCube Extends %DeepSee.SubjectArea 
[ DependsOn = (DeepSee.Model.CompoundCube.Patients, DeepSee.Model.CompoundCube.Doctors, 
DeepSee.Model.CompoundCube.CityRainfall) ]
{

/// This XData definition defines the SubjectArea.
XData SubjectArea [ XMLNamespace = "http://www.intersystems.com/deepsee/subjectarea" ]
{
<subjectArea name="CompoundCube/CompoundCube"  displayName="CompoundCube/CompoundCube"
    baseCube="CompoundCube/Patients,CompoundCube/Doctors,CompoundCube/CityRainfall"  >
</subjectArea>
}

}

キューブ CompoundCube/Patients (DeepSee.Model.CompoundCube.PatientsOpens in a new tab で定義されている) は、すべてのディメンジョンを定義しています。

他のキューブ (CompoundCube/DoctorsCompoundCube/CityRainfall) は、CompoundCube/Patients と共有するディメンジョンを定義しています。すべてのディメンジョンがすべてのキューブで定義されているわけではないことに注意してください。以下のテーブルに、各キューブで使用可能なディメンジョンを示します。

ディメンジョン CompoundCube/Patients キューブ CompoundCube/Doctors キューブ CompoundCube/CityRainfall キューブ
BirthD generated description: checkmark   generated description: checkmark
DocD generated description: checkmark generated description: checkmark  
DocTypeD generated description: checkmark generated description: checkmark  
HomeD generated description: checkmark generated description: checkmark generated description: checkmark

HomeD ディメンジョンは、3 つのキューブすべてで定義されているので、このディメンジョンは 3 つのキューブすべてのメジャーに影響します。例えば、ダッシュボード Demo Compound Cube には、以下のピボット・テーブルが含まれます。

generated description: compound cube ex1

Patient Count メジャーは CompoundCube/Patients で定義され、Doctor Count メジャーは CompoundCube/Doctors で定義され、Avg Monthly Rainfall Inches メジャーは CompoundCube/CityRainfall で定義されています。その値は、各市区町村の各メジャーで異なることに注意してください。

同じダッシュボードに、BirthD を行に使用するピボット・テーブルも含まれています。

generated description: compound cube ex2

CompoundCube/Doctors では BirthD ディメンジョンは定義されていないので、メジャー Doctor Count を、出生年代ごとに取得することはできません。Doctor Count 列の数値がすべてのセルで同じであることに注意してください。これは、すべての患者の 出生年代にわたる医師の合計数です。

最後に、Demo Compound Cube ダッシュボードには、DoctTypeD を行に使用するピボット・テーブルも含まれています。

generated description: compound cube ex3

CompoundCube/CityRainfall では DocTypeD ディメンジョンは定義されていないので、メジャー Avg Monthly Rainfall Inches を、医師のタイプごとに取得することはできません。このメジャーは、すべての患者にわたって集約されます (メジャーでの定義に従い、平均によって)。

FeedbackOpens in a new tab