-
アーキテクトにアクセスし、Tutorial キューブを表示します。
-
DiagnosesAsLB プロパティを使用するディメンジョン、階層およびレベルを以下のように追加します。
-
[要素の追加] をクリックします。
-
[新規要素名の入力] に、DiagD と入力します。
-
[データ・ディメンジョン] をクリックします。
-
[OK] をクリックします。
ディメンジョン、階層およびレベルが生成されます。
-
レベルの名前を Diagnoses に変更します。
-
レベルが選択されている状態で、[プロパティ] の検索ボタンをクリックし、[DiagnosesAsLB] プロパティを選択して、[OK] をクリックします。
-
[ソース値リストタイプ] で、[$LIST 構造] をクリックします。このタイプは、$LIST 関数によって返される形式、または %ListOpens in a new tab タイプを持つデータを参照します。
-
キューブ・クラスを保存します。
-
アーキテクトで、前出の手順と同様にディメンジョン、階層、およびレベルを追加しますが、以下の変更点があります。
-
ディメンジョン名は AllerD にします。
-
レベル名は Allergies にします。
-
[プロパティ] の値は指定しないでください。
直接使用できるプロパティはありません。式を使用してアレルギーのリストを抽出する必要があります。
-
[式] に以下の値を指定します。
##class(Tutorial.Cube).GetAllergies(%source.%ID)
キューブを構築する際に、この式がファクト・テーブルの行ごとに 1 回ずつ評価されます。
変数 %source は、現在のレコードを参照します。この式は、患者の ID を取得し、ユーティリティ・メソッド (これから作成) を呼び出して、患者のアレルギーのリストを返します。
-
忘れずに [ソース値リストタイプ] で [$LIST 構造] を選択してください。
キューブ・クラスを保存します。
次の手順では、このユーティリティ・メソッドを作成します。
-
スタジオを開き、サンプルをインストールしたネームスペースにアクセスします。
-
作成したキューブ・クラス [Tutorial.Cube] を開きます。
-
以下のように、GetAllergies() という名前のメソッドを追加します。
ClassMethod GetAllergies(ID As %Numeric) As %List
{
Set allergies=##class(BI.Study.Patient).%OpenId(ID,0).Allergies
If (allergies.Count()=0) {Quit $LISTFROMSTRING("")}
Set list=""
For i=1:1:allergies.Count() {
Set $LI(list,i)=allergies.GetAt(i).Allergen.Description
}
Quit list
}
このメソッドは、患者の ID が指定されると、作成したレベルで期待される形式でその患者のアレルギーのリストを返します。
%OpenId() の 2 番目の引数によって、使用する同時処理ロックのレベルが指定されます。オブジェクトからのデータの読み取りのみが必要であるため、この値を 0 に指定して同時処理ロックを設定しないことで、より高速に実行します。
-
スタジオでキューブ・クラスを保存して、コンパイルします。
-
患者が持っているアレルギーの数を含むメジャーを追加します。このためには、以下のように Allergies プロパティを使用します。
-
アーキテクトに戻ります。
-
[要素の追加] をクリックします。
-
[新規要素名の入力] に、Avg Allergy Count と入力します。
-
[メジャー] をクリックします。
-
[OK] をクリックします。
新しいメジャーがテーブルに追加されます。
-
[モデル・コンテンツ] 領域でメジャーをクリックします。
-
[集計] で [AVG] をクリックします。
-
[式] に、以下を入力します。
##class(Tutorial.Cube).GetAllergyCount(%source.%ID)
このメソッドは、後で作成する必要があります。
-
アーキテクトでキューブ・クラスを保存します。
-
クラスをスタジオで編集したため、アーキテクトでは保存された定義をオーバーライドするかどうかを尋ねるダイアログ・ボックスが表示されます。[OK] をクリックします。アーキテクトでは、クラス定義のうちアーキテクトで編集可能な部分のみをオーバーライドします。このため、クラスに追加したメソッドはオーバーライドしません。
-
スタジオで、以下のメソッドをキューブ・クラスに追加します。
ClassMethod GetAllergyCount(ID As %Numeric) As %Numeric
{
Set allergies=##class(BI.Study.Patient).%OpenId(ID,0).Allergies
Quit allergies.Count()
}
-
スタジオでキューブ・クラスを保存して、コンパイルします。
-
キューブを再構築します。
そのためには、アーキテクトに戻り、以前と同じ方法で再構築します。
または、ターミナル・ウィンドウを開き、サンプルをインストールしたネームスペースで以下のコマンドを入力することもできます。
do ##class(%DeepSee.Utils).%BuildCube("tutorial")
メソッドはキューブの論理名 (クラス名ではなく) を使用します。また、キューブ名では大文字と小文字は区別されません。
-
アナライザにアクセスします。
(アナライザが別のブラウザ・タブで開かれている場合は、そのタブに切り替えて、[Analytics]→[アナライザ] リンクをクリックし、最新のモデルで更新します。)
-
Diagnoses レベルを行として表示します。以下のように表示されます。
データには、もっとまれなてんかんの診断も表示される場合があります。
代わりに以下のような表示になることがあります。
これは、[ソース値のリストのタイプ] に適切なタイプを指定しなかった場合に発生します。
-
[新規作成] をクリックします。
-
新しい Allergies レベルを行として表示し、Count メジャーと Avg Allergy Count メジャーを表示します。表示は以下のようになります。
nil known allergies メンバは、既知のアレルギーのない患者を表します。一部の医療情報システムでは、以下の技法を使用して患者に既知のアレルギーがないことを記録します。
システムは、この文字列に特別な意味を割り当てません。このディメンジョンは、このアレルゲンをその他のアレルゲンと同じように処理します。
Null メンバ (None と呼ばれる) は、Allergies プロパティが Null である患者を表します。これらの患者にアレルギーがないと見なすことは不適切であるため、このメンバの名前では語弊があります。No Data Available といった名前のほうが適しています。
Null メンバに属する患者については、Avg Allergy Count メジャーは 0 です。これらの患者の場合は Avg Allergy Count メジャーが Null である必要があります。
また、既知のアレルギーがない患者の場合は Avg Allergy Count メジャーが 1 になります。これは、Allergies プロパティに特殊な nil known allergies アレルゲンが含まれているためです。これらの患者の場合は Avg Allergy Count メジャーが 0 である必要があります。
このセクションの後続部分で、Null メンバの名前を修正し、Avg Allergy Count メジャーのロジックを調整します。
-
アーキテクトに戻ります。
-
[Allergies] レベルをクリックします。
-
[ヌル置換文字列] に No Data Available を指定します。
-
キューブ・クラスを保存します。
-
スタジオで、メソッド GetAllergyCount() を以下のように編集します。
ClassMethod GetAllergyCount(ID As %Numeric)
{
Set allergies=##class(BI.Study.Patient).%OpenId(ID,0).Allergies
//check to see if patient has any recorded allergy data
//if not, count is null
If allergies.Count()=0 {
Set allcount=""
}
//check to see if patient has "Nil known allergies"
//in this case, the patient has one "allergen" whose code is 000
Elseif ((allergies.Count()=1) && (allergies.GetAt(1).Allergen.Code="000")) {
Set allcount=0
}
Else {
Set allcount=allergies.Count()
}
Quit allcount
}
-
キューブ・クラスを保存します。
-
スタジオまたはアーキテクトでキューブ・クラスをコンパイルします。
-
アーキテクトでキューブを構築します。
-
アナライザにアクセスします。
(アナライザが別のブラウザ・タブで開かれている場合は、そのタブに切り替えて、[Analytics]→[アナライザ] リンクをクリックし、最新のモデルで更新します。)
-
Allergies を行として表示し、Count および Avg Allergy Count メジャーを表示します。以下のような画面が表示されているはずです。
-
必要に応じて、以下のように実行して、リストベースのレベルがファクト・テーブルおよびレベル・テーブルでどのように表されるのかを確認します。
-
前述のように、管理ポータルにアクセスし、サンプルをインストールしたネームスペースに移動します。
-
[システム・エクスプローラ]→[SQL] をクリックします。
-
左側の領域で、テーブル Tutorial_Cube.Fact に移動してこれを開き、フィールド DxDiagnosesAsLB にスクロールします。
以下のように表示されます。
このフィールドには、患者の診断が格納されます。複数の値が格納される場合もあります。
このテーブルには、以下のようなアレルギー・レベルも表示されます。
レベル自体が式に基づいていて、このフィールドの名前は生成されたものであるため、明確性に欠けています。
これもリストベースのレベルであるため、複数の値が格納される場合があります。
-
テーブル Tutorial_Cube.StarDiagnosesAsLB に移動して、これを開きます。
このレベル・テーブルは、他のレベル・テーブルと同様で、レベル・メンバごとに行が 1 行あります。
アレルギーのレベル・テーブルも同様で、レベル・メンバごとに行が 1 行あります。
ClassMethod GetScore(ID As %Numeric) As %String
{
//get customer rating data & call duration from source record
set call=##class(MyPackage.MyClass).%OpenId(ID,0)
set professionalism=call.Professionalism
set knowledge=call.Knowledge
set speed=call.OpenDuration
If ...
//logic to check for nulls and combine these values into weighted overall score
Quit score
}