キューブ継承を使用する方法
場合によっては、類似した複数のキューブの定義が必要になります。DeepSee では、単純な継承メカニズムによって、これらのキューブをさらに容易に定義できます。この章では、このメカニズムの使用方法を説明します。この手順の一部では、スタジオを使用する必要があります。
キューブ継承の概要
キューブ継承メカニズムを使用するには、以下を実行します。
-
類似したすべてのキューブに含める必要のある主要な項目を含むキューブ・クラスを 1 つ定義します。
このキューブは親キューブになります。
-
必要に応じて、このキューブを抽象としてマークし、直接使用できないようにします。
そのためには、このクラスの <cube> 要素で abstract="true" を指定します。この操作によって、コンパイラはこのキューブを検証しなくなり、アナライザはこれを表示しなくなり、これを対象にしたクエリを実行できなくなります。
スタジオを使用してこの変更を加える必要があります。
-
子キューブをそれぞれのキューブ・クラスで定義します。これらの各キューブに対して inheritsFrom 属性を指定します。この属性の値として、親キューブの論理名を指定します。
この手順により、既定で、サブキューブのそれぞれに親キューブのすべての定義が組み込まれます。
inheritsFrom に指定できるキューブは 1 つに限られます。inheritsFrom には、別のキューブから継承するキューブを指定できます。
これらのキューブをアーキテクトで定義できますが、inheritsFrom 属性を指定するには、スタジオを使用する必要があります。
-
親キューブが子キューブの前にコンパイルされていることを確認してください。そのためには、それぞれの子キューブ・クラスで DependsOn コンパイラ・キーワードを指定します。この手順では、スタジオを使用する必要があります。
-
必要に応じて、親キューブで指定されたディメンジョン、メジャー、またはその他の最上位レベル要素を再定義します。そのためには、子キューブで定義を指定し、親キューブと同じ論理名を使用します。新しい定義で、親キューブからの対応する定義が完全に置換されます。“項目の非表示または削除” も参照してください。
この手順ではアーキテクトを使用できます。
-
必要に応じて、子キューブで追加の定義 (ディメンジョン、メジャー、リストなど) を指定します。
この手順ではアーキテクトを使用できます。
キューブ継承メカニズムにクラス継承とのリレーションシップはありません。各サブキューブは独自のファクト・テーブルとインデックスを保持し、(実行時に) これらは親キューブに依存しません。キューブ継承メカニズムは、構築時にのみ使用され、そのキューブの定義にのみ影響します。
キューブ継承とアーキテクト
アーキテクトでサブキューブを表示する際は、継承要素を表示またはオーバーライドしたり、新しい要素を定義したりできます。左側の領域にはキューブのソース・クラスが表示されるため、このクラスから項目をドラッグ・アンド・ドロップして、サブキューブ内の要素として使用できます。アーキテクトの中央の領域には、継承項目 (斜体) とローカル定義項目 (通常書体) の両方が表示されます。
アーキテクトの中央の領域で継承項目を選択すると、[詳細] ペインの上部に以下のように表示されます。
[詳細] ペインの残り部分は表示専用です。
以下のサブセクションでは、継承項目を再定義する方法、オーバーライド項目を削除する方法、およびローカル要素を追加する方法を説明します。キューブのコンパイルと構築については、"DeepSee モデルの定義" を参照してください。サブキューブは、他の種類のキューブと同じように扱われます。
継承要素の再定義
継承要素を再定義するには、その要素を中央の領域でクリックしてから、右側の [詳細] ペインで [カスタマイズ] ボタンをクリックします。カスタマイズする要素が最上位レベル要素でない場合は、その要素が含まれた最上位レベル要素をクリックしてから、右側の [詳細] ペインで [カスタマイズ] ボタンをクリックします。
[カスタマイズ] をクリックすると、親キューブからサブキューブに定義がコピーされて、継承された定義をオーバーライドするローカル定義が作成されます。この時点で、このローカル定義を編集できます。
オーバーライド項目の削除
継承された定義をオーバーライドするローカル定義を削除する手順は以下のとおりです。
-
アーキテクトの中央領域で、その項目の行の [X] をクリックします。
-
[OK] をクリックしてこの操作を確定します。
ローカル要素の追加
サブキューブにローカル要素を追加するには、[要素の追加] ボタンを使用するか、通常のドラッグ・アンド・ドロップ操作を使用します ("DeepSee モデルの定義" を参照)。
%cube ショートカット
親キューブに %cube 変数を使用するソース式が含まれている場合は、DeepSee でそのキューブを構築可能にするためには、以下のいずれかの操作を実行する必要があります。
-
親キューブ・クラスを拡張するように、子キューブ・クラスを変更します (つまり、クラス継承を使用します)。
-
%cube を使用する要素をオーバーライドします。ローカル定義内で、%cube を通常の完全構文 (##class(package.class)) に置換します。
項目の非表示または削除
メジャー、ディメンジョン、計算メンバ、または計算メジャーを非表示にするには、その項目のオーバーライドを追加して、そのオーバーライドで [隠し] オプションを選択します。この場合でもその項目は作成されますが、アナライザには表示されません。
レベルまたは階層を非表示にするには、それらが含まれているディメンジョンを再定義します。そのためには、そのディメンジョンのオーバーライドを追加します。そのオーバーライドで、このディメンジョンに含まれる必要のある階層とレベルをすべて定義します。継承されたディメンジョンは、この新しいディメンジョンに完全に置き換えられます。例えば、新しいディメンジョンでは、親キューブ内の対応するディメンジョンよりも少ない、または多い数のレベルを定義できます。
継承とリレーションシップ
親キューブにリレーションシップがあると、これらのリレーションシップは継承されますが、必ずしも便利な方法で継承されるとは限りません。リレーションシップは必ず元のキューブを指すためです。
例えば、2 つのキューブ (Patient と Encounter) が相互に関連付けられていて、それぞれにサブキューブ (CustomPatient と CustomEncounter) を作成するとします。既定では、CustomPatient には元の Encounter キューブを指すリレーションシップがあります。同様に、CustomEncounter キューブには Patient キューブを指すリレーションシップがあります。CustomPatient と CustomEncounter との間にリレーションシップが必要な場合、そのリレーションシップを明示的にサブキューブで定義する必要があります。