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?

キューブの作成

この章では、単純なキューブを作成します。以下の項目について説明します。

基本的なキューブの作成

  1. 管理ポータルにアクセスし、前述したように SAMPLES ネームスペースに移動します。

  2. ホーム, DeepSee, アーキテクト をクリックします。

  3. [新規作成] をクリックします。

    ダイアログ・ボックスが表示されます。

  4. このダイアログ・ボックスで、以下を指定します。

    • [定義タイプ : キューブ] — これを選択します。

    • [キューブ名]Tutorial

    • [キューブのクラス名]Tutorial.Cube

    • [ソースクラス][参照] ボタンをクリックして、[DeepSee.Study.Patient] を選択し、[OK] をクリックします。

  5. [OK] をクリックします。

    キューブ・クラスが生成されます。これはスタジオでも表示および変更できます。

  6. 中央の領域にある太字の最上行 (Tutorial のラベル) をクリックします。これによって、キューブが選択され、右側で詳細を編集できます。

  7. [詳細] ペインで、[ヌル置換文字列]None と入力します。

  8. [保存] をクリックして、[OK] をクリックします。

    キューブ・クラスが更新されます。

左領域にあるクラス・ビューワの表示が以下のようになります。

generated description: patient class

Important:

クラス・ビューワは、ベース・クラスのクラス・プロパティ (リレーションシップ・プロパティ以外) の有益なビューを提供します。このビューを使用すると、これらのプロパティに基づく DeepSee 要素を非常に簡単に作成できます。ただし、この表示によって一部のプロパティにアクセスする便利な方法が提供されるとしても、ソース式を使用して任意のデータにアクセスすることも可能であるということを認識しておくことは重要です。これらのソース式は、キューブの構築時に評価されるため、実行時のパフォーマンスに影響しません。このチュートリアルでは、これらの点について後ほど説明します。

レベルおよびメジャーの追加

ここでは、Tutorial キューブにレベルとメジャーをいくつか追加します。

  1. クラス・ビューワ (左領域) からモデル・ビューワの [メジャー] ヘッダ (中央の領域) に以下の項目をドラッグ・アンド・ドロップします。

    • Age

    • TestScore

    これにより、Age および TestScore という名前のメジャーが、それぞれの名前を持つクラス・プロパティに基づいて作成されます。

  2. TestScore メジャーを以下のように変更します。

    1. [メジャー] ヘッダの下のメジャー名をクリックします。

    2. [詳細] ペイン (右領域) で、[名前]Test Score に変更します。

    3. [検索可能] をクリックします。

  3. 以下の手順で、Avg Age メジャーを作成します。

    1. 再度、クラス・ビューワからモデル・ビューワの [メジャー] ヘッダに [Age] プロパティをドラッグ・アンド・ドロップします。

      これによって、Age1 という名前の新しいメジャーが作成されます。

    2. モデル・ビューワでメジャー名をクリックして、[詳細] ペインで以下の詳細を編集します。

      • [集計][AVG] を選択します。

      • [名前]Avg Age と指定します。

      • [形式文字列]#.## を指定します。

  4. 以下の手順で、Avg Test Score メジャーを作成します。

    1. 再度、クラス・ビューワからモデル・ビューワの [メジャー] ヘッダに TestScore プロパティをドラッグ・アンド・ドロップします。これによって、TestScore1 という名前の新しいメジャーが作成されます。

    2. モデル・ビューワでメジャー名をクリックして、[詳細] ペインで以下の詳細を編集します。

      • [集計][AVG] を選択します。

      • [名前]Avg Test Score と指定します。

      • [形式文字列]#.## を指定します。

    これで、4 つのメジャーが作成されました。

    generated description: cube step1

  5. [保存] をクリックして、[OK] をクリックします。

    キューブ・クラスが更新されます。

  6. Age プロパティに基づいて、以下のようにディメンジョン、階層、およびレベルを追加します。

    1. [Age] プロパティを [ディメンジョン] ヘッダにドラッグ・アンド・ドロップします。

      アーキテクトによって、ディメンジョン、階層、およびレベルが即座に作成され、モデル・ビューワの表示が以下のようになります。

      generated description: age level step1

    2. 最初の [Age] 項目をクリックします。この項目には [データ・ディメンジョン] のラベルが付けられています。

    3. 右領域で、[名前] を編集して AgeD にします。

      モデル・ビューワの表示は以下のようになります。

      generated description: cube step2a

      DeepSee の使用計画によっては、ディメンジョン名が表示されない場合もあります。このチュートリアルでは、Patients サンプルで使用される規約に従います。ここでは、ピボット・テーブルでディメンジョンを行または列に使用しないことを前提にしています (この代わりにレベルを行または列として使用します)。

    4. オプション [このディメンジョンの All レベルの有効化] を選択します。

    5. [All メンバのキャプション] を編集して All Patients にします。

    6. [All メンバの表示名] を編集して All Patients にします。

  7. 以前と同じ方法でキューブ定義を保存します。

  8. Gender プロパティに基づいて、ディメンジョン、階層、およびレベルを追加します。前述の手順を繰り返しますが、以下の点が異なります。

    • [Gender] プロパティをドラッグ・アンド・ドロップします。

    • ディメンジョンの名前を GenD に変更します。

    • オプション [このディメンジョンの All レベルの有効化] は選択しません。

    モデル・ビューワの表示は以下のようになります。

    generated description: cube step3

  9. HomeCity プロパティに基づいて、ディメンジョン、階層、およびレベルを追加します。前述の手順を繰り返しますが、以下の点が異なります。

    • [HomeCity] プロパティを展開して、このフォルダ内の [Name] プロパティを [ディメンジョン] にドラッグ・アンド・ドロップします。

    • ディメンジョンの名前を HomeD に変更します。

    • レベルの名前を City に変更します。

    • オプション [このディメンジョンの All レベルの有効化] は選択しません。

    この新しいディメンジョン、階層、およびレベルについて、モデル・ビューワでは以下のように表示されます。

    generated description: cube step4

    この場合、[プロパティ] オプションは Caché ドット構文を使用していることに注意してください。

  10. プロパティを City レベルに追加します。

    1. 左側 (クラス・ビューワ領域) で [HomeCity] を展開します。

    2. [Population] をドラッグして、中央領域の [City] レベルにドロップします。

    3. [PrincipalExport] をドラッグして、中央領域の [City] レベルにドロップします。

    4. 新しい [PrincipalExport] プロパティを選択して、名前を Principal Export に変更します。

  11. PrimaryCarePhysician プロパティに基づいて、ディメンジョン、階層、およびレベルを追加します。以下はその方法です。

    1. [要素の追加] をクリックします。

    2. [新規要素名の入力] に、DocD と入力します。

    3. [データ・ディメンジョン] をクリックします。

    4. [OK] をクリックします。

    5. モデル・ビューワ領域で、[New_Level1] をクリックします。

    6. [名前]Doctor に変更します。

    7. [式] に以下の ObjectScript 式を入力します。

      %source.PrimaryCarePhysician.LastName_", "_%source.PrimaryCarePhysician.FirstName
      

      変数 %source は、現在のレコードを参照します。DeepSee はキューブの構築時にこの式を評価します。

    代わりに、以前と同じドラッグ・アンド・ドロップ手順を使用して、定義を編集することもできます。

  12. 以前と同じ方法でキューブ定義を保存します。

  13. キューブをコンパイルおよび構築します。そのためには、以下の操作を実行します。

    1. [コンパイル] をクリックすると、コンパイルが開始され、進捗状況がダイアログ・ボックスに表示されます。

    2. コンパイルが終了したら、[完了] をクリックします。

    3. [ビルド] をクリックして、さらに [ビルド] をクリックします。

    4. キューブおよびインデックスの構築が終了したら、[完了] をクリックします。

  14. 別のブラウザ・タブまたはウィンドウで、アナライザを開きます。

    左上の領域を確認します。この領域には、現在選択されているキューブまたはサブジェクト領域のタイトルが表示されます。以下のように表示されます。

    generated description: analyzer verify cube

    このタイトルが Tutorial でない場合は、変更ボタン generated description: button change subjectarea をクリックし、[Tutorial] をクリックして [OK] をクリックします。

アナライザの左の領域では、このキューブの現在の内容が以下のように表示されます。

generated description: tutorial cube pass1 in analyzer

このように表示されない場合は、サンプルのデータが生成されていること、およびキューブのコンパイルとビルドが完了していることを確認してください。

初期キューブの検証

ここでは、キューブを検証して、変更の必要があるかどうかを調べます。

キューブを検証するには、キューブの要素を左の領域からピボット・ビルダ領域にドラッグ・アンド・ドロップして、単純なピボット・テーブルを作成します。これは、[行] 領域とその右にある 3 つのボックスで構成されます。

まず、定義していないメジャー (Count) がアナライザで表示されていることに注目してください。このメジャーは自動的に提供され、ベース・クラスのレコードをカウントします。

以下の手順を実行して、新しいキューブを十分に理解します。

  1. 左の領域の各ディメンジョン名の横にある三角形をクリックします。

    この操作によって、以下のように表示されます。

    generated description: cube examine dimensions

  2. [Age] レベルを [行] 領域にドラッグ・アンド・ドロップします。以下のような表示になります。

    generated description: age level as rows

    このレベルのメンバが文字列として並べ替えられていることに注意してください。このレベルでは、数値でメンバを並べ替えるほうが適しているため、このレベルを調整する必要があります。

  3. [Doctor] レベルを [行] 領域にドラッグ・アンド・ドロップして、[Age] のすぐ上に配置します(この操作で、AgeDoctor に置換されます)。これで、以下のような表示になります。

    generated description: doctor level as rows

    Note:

    ここで作成される他のディメンジョンと異なり、Doctor ディメンジョンは、データ・セットのサイズに応じて非常に多くのメンバを所有できます。現実の実装では、このように低いレベルでディメンジョンを作成することはほとんどありません。このチュートリアルでは、このディメンジョンを使用して、いくつかのキー・ポイントを示します。

    医師名 , は、記録されている一次診療医のない患者を参照します (このような患者は、PrimaryCarePhysician フィールドの姓と名前がいずれも Null になります)。これは、このチュートリアルの次の部分でレベルを再定義するときに変更します。

    ID に基づくレベルを作成する場合は常に、その ID が一意であるかどうかを配慮することが重要です。多くの場合 (製品名、手順コード、部門名など)、ID は一意です。ただし、人名が一意であることを前提とすることは安全ではありません。このレベルは、直接医師名に基づいているため、DeepSee では同名の医師が結合されます。

    例えば、ある患者には、Doctor テーブルの行 17 で表される Agnes Djakovic という名前の医師がいて、別の患者には、名前は同じでも同じテーブルの行 380 で表される医師がいる場合があります。Doctor レベルには、これらの患者を結合する Agnes Djakovic という名前のメンバが存在することになります。

    このチュートリアルの後続部分では、より堅牢なアプローチを使用します。

  4. [Gender] レベルを [行] 領域にドラッグ・アンド・ドロップして、[Doctor] のすぐ上に配置します。この操作で、Doctor レベルが Gender レベルで置換されます。これで、以下のような表示になります。

    generated description: gender level as rows

    このレベルは特に変更する必要はありません。

  5. 左側で [City] レベルを展開します。以下のように表示されます。

    generated description: homed with properties

  6. [City] レベルを [行] 領域にドラッグ・アンド・ドロップして、[Gender] のすぐ上に配置します。これで、以下のような表示になります。

    generated description: city level as rows

  7. [Population][Principal Export] のプロパティを [列] にドラッグ・アンド・ドロップします。以下のように表示されます。

    generated description: properties demo cities w props

    このレベルは特に変更する必要はありません。

キューブの調整

ここでは、キューブに以下の変更を加えます。

  • Age のメンバの並べ替え方法を変更します。

  • Doctor レベルが同名の医師を結合しないようにします。

  • Doctor レベルに、, ではなく None (キューブの既定置換文字列) という名前のメンバが確実に存在するようにします。

  1. アーキテクトにアクセスします。前回調べたキューブ定義が表示されます。

  2. まず、Age レベルを調整して、メンバが数値で並べ替えられるようにします。そのためには、以下の操作を実行します。

    1. [Age] レベルをクリックします。

    2. [要素の追加] をクリックします。

    3. [入力] に、AgeSort と入力します。

    4. [プロパティ] をクリックします。

    5. [OK] をクリックします。

      プロパティが追加され、アーキテクトでそれが選択されます。

    6. [詳細] ペインで [式] を選択して以下を入力します。

      $CASE($LENGTH(%source.Age),2:%source.Age,:"0"_%source.Age)
      

      この式は、文字列の並べ替えで年齢が正しく並べ替えられるように、年齢の先頭にゼロを追加します。最初の年齢が 01 で、2 番目が 02 というように続きます (このサンプルの最高年齢は 99 歳であるため、年齢が 2 文字を超えることはありません)。

    7. [プロパティ値によるメンバのソート] で、[昇順] を選択します。

      このオプションにより、メンバの並べ替え方法の制御にこのプロパティの値が使用されます。

    8. キューブを保存します。

    Note:

    Patients サンプルでは別のアプローチを使用しますが、いずれのアプローチも有効です。

  3. Doctor レベルを再定義して、同名の医師を結合できないようにします。そのためには、以下の操作を実行します。

    1. [Doctor] レベルをクリックします。

    2. [式] フィールドで値を選択して、メモ帳またはその他の一時的な場所にこれをコピーします。

    3. [プロパティ] を選択して、PrimaryCarePhysician と入力します。

      これで、Doctor レベルが最低限の PrimaryCarePhysician プロパティに基づきます。これは OREF で医師ごとに一意です。

      これによって、このレベルでは偶然同名である異なる医師が結合されないようになります。

      また、この手順により、医師のいない患者に対する値が Null になります。これは、このレベルのそのようなメンバには、キューブの既定のヌル置換文字列が使用されることを意味します。

    4. [Doctor] レベルが選択された状態で、[要素の追加] をクリックします。

    5. [新規要素名の入力] に、Doctor Name と入力します。

    6. [プロパティ] をクリックします。

    7. [OK] をクリックします。

      プロパティが追加され、アーキテクトでそれが選択されます。

    8. [詳細] ペインで [式] を選択して以下を入力します。

      %source.PrimaryCarePhysician.LastName_", "_%source.PrimaryCarePhysician.FirstName
      
    9. [メンバ名として使用] を選択します。

      このオプションにより、このプロパティの値が各メンバの名前として使用されます。

    10. [プロパティ値によるメンバのソート] で、[昇順] を選択します。

      このオプションにより、このプロパティの値を基準にしてメンバが昇順で並べ替えられることになります。

  4. キューブをコンパイルします。

    コンパイルすると、アーキテクトでキューブが保存されます。

  5. キューブを構築します。

  6. Analyzer に移動して、[DeepSee]→[アナライザ] リンクをクリックし、最新のモデルで更新します。

  7. 変更をダブル・チェックします。以下のように表示されます。

    • [Age][行] にドラッグ・アンド・ドロップすると、メンバが数値順に並べ替えられることがわかります。

      generated description: age level as rows better sorting

    • [Doctor][行] にドラッグ・アンド・ドロップすると、None メンバが表示されます。

      generated description: doctor level as rows better

      生成されたデータによっては、重複している医師名も表示されます。以下はその例です。

      generated description: doctor level with duplicate names

キューブへのリストの追加

リストを使用すると、ユーザには最下位レベルのデータから選択したフィールドが表示されます。これはさまざまなシナリオで有益です。この情報は、ユーザが異常値のレコードや、追跡処理の必要なレコードを特定する際に役立ちます。

  1. まず、Patients テーブルで使用可能なフィールドを調べます。

    1. 管理ポータルにアクセスし、前述したように SAMPLES ネームスペースに移動します。

      (これが別のブラウザ・タブで開かれている場合は、そのタブに切り替えます。)

    2. [システム・エクスプローラ]→[SQL] をクリックします。

    3. [クエリ実行] タブをクリックします。

    4. 以下のクエリを実行します。

      select * from deepsee_study.patient

      これで、最初の 1000 人の患者が表示され、使用可能なフィールドが示されます。

    5. ここで以下のようなクエリを試行します。

      select patientid, age,testscore,homecity->name as "City",
      primarycarephysician->lastname as "Doctor" from DeepSee_Study.Patient
    6. このクエリをメモ帳やその他の使いやすい一時的な場所にコピーします。

    このブラウザ・タブまたはウィンドウは、後で使用できるように開いたままにしておきます。

  2. 今実行したクエリのフィールドを使用するリストを追加します。

    1. アーキテクトにアクセスします。

      (これが別のブラウザ・タブで開かれている場合は、そのタブに切り替えます。)

    2. [要素の追加] をクリックします。

    3. [新規要素名の入力] に、Sample Listing と入力します。

    4. [リスト] をクリックします。

    5. [OK] をクリックします。

      リストが追加されます。

    6. [詳細] ペインで、前の手順で保存したクエリから [フィールド・リスト] 領域にフィールドのリストをコピーします。具体的には、以下を貼り付けます。

      patientid, age,testscore,homecity->name as "City", primarycarephysician->lastname as "Doctor"
      

      システムでは、このフィールドのリストを使用して SQL クエリを構築します。

    7. キューブをコンパイルします。

      コンパイルすると、アーキテクトでキューブが保存されます。

      キューブを再構築する必要はありません。

  3. アナライザでこのリストにアクセスできることを確認します。そのためには、以下の操作を実行します。

    1. アナライザにアクセスします。

      (アナライザが別のブラウザ・タブで開かれている場合は、そのタブに切り替えて、[DeepSee]→[アナライザ] リンクをクリックし、最新のモデルで更新します。)

    2. 必要に応じて、単純なピボット・テーブルを作成します。

    3. ピボット・テーブルのプレビュー領域で、セルをクリックします。

    4. リストを表示ボタン generated description: button listing をクリックします。

      以下のように表示されます。

      generated description: listing tryout

      Note:

      既定では、最初の 1000 レコードが表示されます。これは、アナライザ内で変更できます。

    リストがサポートされないことを示すメッセージが表示された場合は、キューブが保存され、リコンパイルされていることを確認します。

  4. リストを変更して、レコードが別の方法で並べ替えられるようにします。

    1. 再度アーキテクトにアクセスします。

    2. [モデル・コンテンツ] 領域でリストをクリックします。

    3. [詳細] ペインで、[Order By] に以下のように入力します。

      age,homecity->name
      
    4. キューブをコンパイルします。

      コンパイルすると、アーキテクトでキューブが保存されます。

  5. リストが、まず年齢で並べ替えられ、次に各年齢内で市区町村を基準にして並べ替えられることを確認します。

    前と同様にリストを表示します。以下のような表示になります。

    generated description: listing tryout2

    下にスクロールして、患者が各年齢内で市区町村によって並べ替えられていることを確認します。

ファクト・テーブルおよびレベル・テーブルの確認

キューブ定義の作成を担当している場合、DeepSee がキューブ定義をどのように使用して DeepSee で直接使用されるテーブル (ファクト・テーブルレベル・テーブル) を構築するのかを理解しておくと役立ちます。ここではこれらのテーブルを検証します。

  1. 管理ポータルにアクセスし、前述したように SAMPLES ネームスペースに移動します。

  2. [システム・エクスプローラ]→[SQL] をクリックします。

  3. [クエリ実行] タブをクリックします。

  4. 以下の SQL クエリを実行します。これはキューブで使用されるベース・テーブルに対して実行されます。

    select top 1 age,gender,homecity->name,primarycarephysician->lastname,
    primarycarephysician->firstname, testscore from DeepSee_Study.patient

    詳細をメモしておきます。

    generated description: fact table compare to first patient

  5. 左側の領域で、テーブル Tutorial_Cube.Fact に移動します。

  6. [テーブルを開く] をクリックします。

    以下のように表示されます。

    generated description: fact table example

    このテーブルは、キューブのコンパイル時に生成され、キューブの構築時にデータが入力されます。ファクト・テーブルには、ソース・テーブルから使用したレコードごとに、行 (ファクト) が 1 行あります。ここでは、ファクトのそれぞれが 1 人の患者に対応します。

    このテーブルの最初の行は、ベース・テーブルの最初の行に対応します (13 歳で、テスト・スコアが 88 であった患者)。

  7. 以下の点に注意してください。

    • %sourceId フィールドは、ファクトの基になったソース・レコードの ID を示します。

    • 名前の先頭が Dx である各フィールドは、定義したレベルに対応します。ファクト・テーブルのこれらのフィールドには整数が格納され、これらはレベル・テーブルのレコードを参照します。

    • 名前の先頭が Mx である各フィールドは、定義したメジャーに対応します。ファクト・テーブルのこれらのフィールドには、数値 (整数ではない) が格納されます (これがメジャーの既定のデータ型であるため)。

    • MxTestScore フィールドの値が Null のファクトもあります。

  8. [ウィンドウを閉じる] をクリックします。

  9. テーブル [Tutorial_Cube.StarGender] に移動します。

  10. [テーブルを開く] をクリックします。表示は以下のようになります。

    generated description: level tables gender

    このテーブルには、Gender レベルのメンバの名前が格納されます。ファクト・テーブルの DxGender フィールドは、このテーブルの行を参照します。

    場合によって、MaleFemale の前に表示されることもあります。

    ここでは、システムで処理された最初の患者が女性であるために、Female メンバが先に表示されています。

    システムは、これらのテーブルにデータを生成する際に、ベース・テーブルのレコードを繰り返し処理します。各レコードについて、それぞれのレベルの定義が確認され、値が決定されて、その値が (必要に応じて) 対応するレベル・テーブルに追加され、ファクト・テーブルのレベル・フィールドに検索値が書き込まれます。

  11. [ウィンドウを閉じる] をクリックします。

  12. テーブル [Tutorial_Cube.StarAge] に移動します。以下のように表示されます。

    generated description: level tables age

    Age レベルはベース・クラスの Age フィールドによって定義されます。この値は DxAge 列に表示されます。このレベルには、レベル・メンバの並べ替え順序の定義に使用されるレベル・プロパティがあります。この値は、Dx781900468 列に示されています。

    このレベル・テーブルの最初のレコードは、13 歳のこの例で処理された最初の患者に対応します。

  13. [ウィンドウを閉じる] をクリックします。

  14. テーブル [Tutorial_Cube.StarNameViaHomeCity] に移動します。以下のように表示されます。

    generated description: level tables city

    City レベルはベース・クラスの HomeCity->Name フィールド によって定義されます。この値は DxNameViaHomeCity 列に表示されます。このレベルには、2 つのレベル・プロパティがあり、別の列に表示されています。

    このテーブルの最初のレコードは Magnolia です。これは、ベース・テーブルの最初の患者の出身地です。

  15. [ウィンドウを閉じる] をクリックします。

  16. テーブル [Tutorial_Cube.StarPrimaryCarePhysician] に移動します。以下のように表示されます。

    generated description: level tables doctor

    Doctor レベルはベース・クラスの PrimaryCarePhysician フィールドによって定義されます。これは DeepSee.Study.Doctor クラスのインスタンスへの参照 (OREF) です。OREF は整数に変換され、それが DxPrimaryCarePhysician 列に書き込まれます。

    このレベルでは、姓と名前をコンマを挟んで連結したレベル・プロパティによってメンバ名が定義されています。このレベル・プロパティの値は、Dx582175229 列に格納されます。

    このテーブルの最初の医師は Quince, Marvin です。これは、ベース・テーブルの最初の患者の一次診療医です。

    Null の医師の名前はコンマですが、これは表示されません。その代わり、このメンバには指定したヌル置換文字列が使用されます。

Tip:

これらのテーブルのフィールド名を使いやすくするために、定義したレベルおよびメジャーに対してオプション [ファクト・テーブルのフィールド名] を指定できます。このオプションは、特殊な内部処理が行われる時間レベル (次の章で説明) には適用されないことに注意してください。

FeedbackOpens in a new tab