ディメンジョン、階層およびレベルの定義
ここでは、Business Intelligence キューブでディメンジョンと階層を定義する方法、およびレベルの定義に関する基本的な事項について説明します。
Business Intelligence には、レベルに影響を及ぼす多くのオプションが用意されています。"レベルの定義の詳細" も参照してください。
"このドキュメントに示したサンプルのアクセス方法" も参照してください。
概要
アーキテクトでは、以下の 2 つの方法のいずれかでモデル要素を作成できます。
-
ドラッグ・アンド・ドロップ。クラス・ビューワからモデル・ビューワ内の適切なターゲットにプロパティをドラッグできる場合は、このリストの後で説明されているように、アーキテクトでモデル要素が作成されます。その後、必要に応じて詳細領域で定義を編集できます。
この方法によって、ソース・プロパティに直接基づいて要素を容易に定義できます。これは、ソース式に基づいて要素を作成する必要がある場合の開始ポイントとしても役立ちます。
-
[要素を追加] リンクの使用。
参照用として、次のテーブルに各種ドラッグ・アンド・ドロップ操作の結果を示します。
プロパティ XYZ のドロップ先 | アーキテクトでの作成内容 |
---|---|
[メジャー] の見出しまたは既存のメジャー | 一意性の必要に応じて、XYZ、XYZ1、などの名前が付けられたメジャー。このメジャーは、ソース・プロパティ XYZ に基づき、SUM によって集約されます。"メジャーの定義" を参照してください。 |
[ディメンジョン] の見出し | 一意性の必要に応じて、XYZ、XYZ1、などの名前が付けられた新しいデータ・ディメンジョン。このディメンジョンには階層 H1 が組み込まれ、この階層にはレベル XYZ が組み込まれます。このレベルは、ソース・プロパティ XYZ に基づきます。 |
既存のディメンジョン | 新規の階層 (例 : H2)。この階層にはレベル XYZ が組み込まれます。このレベルは、ソース・プロパティ XYZ に基づきます。 |
既存の階層 | 階層内の一意性の必要に応じて、XYZ、XYZ1、などの名前が付けられた新規レベル。このレベルは、ソース・プロパティ XYZ に基づきます。 |
既存のレベル | レベル内の一意性の必要に応じて、XYZ、XYZ1、などの名前が付けられた新規レベル・プロパティ。このレベル・プロパティは、ソース・プロパティ XYZ に基づきます。"プロパティの定義" を参照してください。 |
新規ディメンジョン、階層およびレベルの作成
使用可能なレベルを定義するには、少なくとも以下の定義が必要です。
-
ディメンジョン
-
そのディメンジョン内の階層
-
その階層内のレベル
アーキテクトでは、"概要" で説明されているように、ドラッグ・アンド・ドロップ操作を使用できます。または、以下の操作を実行できます。
-
ディメンジョンを追加します。
-
[要素を追加] をクリックします。
ダイアログ・ボックスが表示されます。
-
[新規項目名の入力] に、ディメンジョン名を入力します。
"モデル要素の名前" を参照してください。
-
作成するディメンジョンのタイプに応じて、次の選択肢のいずれか 1 つをクリックします。
-
[データ・ディメンジョン] — ほとんどのディメンジョンではこれをクリックします。
-
[時刻ディメンジョン] — 日付または時刻の値別にデータをグループ化するディメンジョンを作成する場合に、これをクリックします。詳細は、このページで後述する "時間レベルの定義" を参照してください。
-
[年齢ディメンジョン] — 日付の値に基づいて年齢別にデータをグループ化するディメンジョンを作成する場合に、これをクリックします。通常、年齢ディメンジョンはお勧めしません。詳細は、このページで後述する "年齢レベルの定義" を参照してください。
[iKnow ディメンジョン] オプションの詳細は、"キューブでの Text Analytics の使用法" を参照してください。
-
-
[OK] をクリックします。
ディメンジョンが作成され、モデル・ビューワにこれが表示されます。以下はその例です。
システムによってこのディメンジョン内に階層が作成され、さらにその階層内にはレベルも作成されていることに注意してください。
-
-
より適切な名前を使用するように、自動作成されたレベルを変更します。
-
モデル・ビューワで、レベルをクリックします。
詳細領域に詳細が表示されます。
-
以下のように変更します。
-
[名前] — 必要なレベル名に変更します。
"モデル要素の名前" を参照してください。
-
[表示名] — このレベルのローカライズされた表示名を指定します。これをクリアする (代わりに [名前] に指定された値を使用) か、表示名を指定します。
"その他の共通オプション" も参照してください。
-
-
-
"ディメンジョンまたはレベルのソース値の定義" の説明に従って、このレベルのソース値を指定します。
-
[保存] をクリックします。
-
プロンプトが表示されたら、[OK] をクリックします。
既定では、ディメンジョンに複数の階層が含まれていない限り、アナライザは階層名を表示しません。代わりに、階層名を必ず表示する、または完全に非表示にするようにディメンジョンを定義できます。"キューブ・クラスのリファレンス情報" の "<dimension>" で、showHierarchies のリファレンスを参照してください。
階層およびレベルの追加
アーキテクトでは、既存のディメンジョンに階層およびレベルを追加するには、"概要" で説明しているとおりドラッグ・アンド・ドロップ操作を使用できます。または、以下の操作を実行できます。
レベルの追加
アーキテクトでは、既存の階層にレベルを追加するには、"概要" で説明しているとおりドラッグ・アンド・ドロップ操作を使用できます。または、以下の操作を実行できます。
-
モデル・ビューワで、階層または階層内の既存レベルをクリックします。
この操作によって、レベルを追加する場所を示します。
-
階層をクリックすると、その階層の他のすべてのレベルの後に新しいレベルが追加されます。
-
レベルをクリックすると、そのレベルの直前に新しいレベルが追加されます。
-
-
[要素を追加] をクリックします。
ダイアログ・ボックスが表示されます。
-
[新規項目名の入力] に、レベル名を入力します。
-
[レベル] をクリックします。
-
[OK] をクリックします。
レベルが作成され、モデル・ビューワにこれが表示されます。
または、クラス・ビューワからクラス・プロパティをドラッグして、これを階層にドロップします。このプロパティに基づいてレベルが追加されます。このレベルはその階層内の他のすべてのレベルの後に追加されます。
"階層の適切な定義" で述べているように、階層内のレベルの順序によって階層の構造が決まります。定義後にレベルの順序を変更する場合は、"階層内のレベルの順序の変更" を参照してください。
ディメンジョンまたはレベルのソース値の定義
各レベルにソース値が指定されている必要があります。ディメンジョン内またはレベル内のソース値を指定できます。通常は、以下のとおりです。
-
データ・ディメンジョンにはレベル内のソース値を指定します。
-
時間および年齢ディメンジョンには、ディメンジョン内のソース値を指定します。
-
NLP ディメンジョンについては、"キューブでの Text Analytics の使用法" を参照してください。NLP ディメンジョンは、ここで説明したメカニズムを使用しません。
アーキテクトでソース値を指定する手順は以下のとおりです。
-
モデル・ビューワで、ディメンジョンまたはレベルを選択します。
-
詳細領域で、以下のいずれかの値を指定します。
-
[プロパティ] — キューブで使用されるベース・クラスに関連するプロパティ名を指定します。ドット構文を使用してプロパティのプロパティを参照できます。以下はその例です。
Age
別の例を示します。
HomeCity.PostalCode
このプロパティは、SQL へのプロジェクションが必要です。
また、オブジェクト値プロパティを参照することもできます。その場合はオブジェクトの数値 ID がソース値として使用されます。
ストリーム・プロパティを直接使用することはできません (この種のプロパティを使用するには、ストリームのコンテンツまたはコンテンツの選択部分を返す式を作成します)。
-
[式] — レベルの基となる ObjectScript 式を指定します。以下はその例です。
##class(Cubes.StudyPatients).GetFavoriteColor(%source.PatientID)
この式は、キューブが構築されるときに評価されます。詳細は、次のセクションを参照してください。
-
[プロパティ] および [式] フィールドには、以下のいずれかの方法で値を入力できます。
-
クラス・ビューワからクラス・プロパティをドラッグして、これをフィールドにドロップする。
ドラッグ・アンド・ドロップしたプロパティによって、フィールドの既存コンテンツが置換されます。
-
検索ボタン をクリックする。
-
[プロパティ] の場合は、そのクラスのプロパティを示すダイアログ・ボックスが表示されます。プロパティをクリックしてから、[OK] をクリックします。
-
[式] の場合は、入力が可能な大きいフィールドのあるダイアログ・ボックスが表示されます。式を入力してから、[OK] をクリックします。
-
-
フィールド内で値を直接編集する。
このセクションおよび次のセクションの内容は、やはりある形式のソース値を必要とするレベル・プロパティおよびメジャーにも適用されます。
データ・コネクタを使用する場合のソース値の指定
キューブがデータ・コネクタに基づく場合、以下の制約に注意してください。
-
[式] オプションではなく、[プロパティ] オプションを指定します。
-
ドット構文は使用できません。これは、データ・コネクタのいずれのプロパティもオブジェクト参照ではないためです。
データ・コネクタの作成の詳細は、"データ・コネクタの定義" を参照してください。
ソース式の詳細
前のセクションで述べているように、ディメンジョンまたはレベル (またはプロパティまたはメジャー) の基礎として使用するソース値またはソース式を指定できます。ソース式は以下のように作成できます。
-
ソース・クラスでプロパティを参照できます。そのためには、構文 %source.PropertyName を使用します。PropertyName はプロパティの名前です。この式は、キューブの構築時に解析され、指定されたプロパティの SqlFieldName が検索されます。
-
ドット構文を使用すると、プロパティのプロパティを参照できます。
-
オブジェクト値プロパティを参照できます。その場合はオブジェクトの数値 ID がソース値として使用されます。
-
変数 %cube を使用すると、キューブ・クラスを参照できます。これはソース式内で使用するキューブ・クラスでユーティリティ・メソッドを定義している場合に役立ちます。
-
<expression> 要素の値を参照できます。そのためには、以下の構文を使用します。
%expression.expressionName
式の詳細は、"InterSystems Business Intelligence の上級モデリング" を参照してください。
-
以下の例で示すように、ユーティリティ・メソッド ToUpper()、ToLower()、および Log() を使用できます。
..ToUpper(%source.HomeCity.Name)
ファクト・テーブル・クラスは、これらのメソッドを定義する %DeepSee.CubeFunctionSetOpens in a new tab から継承されるため、システムはこの方法でメソッドを使用できます。これらのメソッドの詳細は、該当するクラスのクラスリファレンスを参照してください。
-
%DeepSee.CubeDefinitionOpens in a new tab の %Lookup() メソッドを使用して、用語リストを起動できます。サブセクション "条件リストの使用" を参照してください。
-
%DeepSee.CubeDefinitionOpens in a new tab の %Rule() メソッドを使用して、プロダクション・ビジネス・ルールを起動できます。サブセクション "プロダクション・ビジネス・ルールの使用" を参照してください。
キューブがデータ・コネクタに基づいている場合、ソース式は使用できません。
また、あるレベルがソース式 (ソース・プロパティではなく) に基づいている場合に、メンバの名前が数字のみで構成されている場合は、スタジオでキューブを修正して、そのレベルの定義に castAsNumeric="true" を追加することをお勧めします。このオプションを追加すると、クエリで MDX 範囲式 (特定の種類のセット式) が使用される場合に、システムは、存在しないメンバの代替を検索する際にメンバを数値として扱うようになります。
条件リストの使用
条件リストにより、プログラミングせずに InterSystems IRIS Business Intelligence モデルをカスタマイズする方法が提供されます。条件リストは、キーと値のペアの単純なリスト (ただし、拡張可能) です ("条件リストの定義" を参照してください)。
ソース式内で用語リストを起動できます。この操作には、%Lookup() の %DeepSee.CubeDefinitionOpens in a new tab メソッドを使用します。このメソッドには、以下のシグニチャがあります。
%Lookup(term_list_name, lookup_value,default,alternative_field)
引数は文字列です。それらの値は以下のとおりです。
-
term_list_name は、用語リストの名前として評価されます。
-
lookup_value は、用語リストで検索する文字列として評価されます。
-
default (オプション) は、lookup_value が用語リストに見つからなかった場合に返す値として評価されます。
-
alternative_field (オプション) は、返すフィールドの名前です。既定値は "value" です。
この引数では大文字と小文字は区別されません。
この関数は、指定された用語リストを調査して、その "key" フィールドが lookup_value で指定された文字列に等しい用語を見つけて、alternative_field で指定されたフィールドに格納されている値を返します。
すべての用語リストには、少なくとも "key" と "value" の 2 つのフィールドが存在します。フィールドは追加できます。詳細は、"条件リストの定義" を参照してください。
キューブ定義クラスは、%Lookup() メソッドが定義されている %DeepSee.CubeDefinitionOpens in a new tab から継承されるので、ソース式を以下のように使用できます。
%cube.%Lookup(term_list_name,lookup_value,default,alternative_field)
例えば、LocalTeams という名前の用語リストがあるとします。
以下のように、HoleFoods の City レベルにプロパティを追加できます。
<property name="Team" sourceExpression='%cube.%Lookup("LocalTeams",%source.Outlet.City,"No Team")'/>
プロダクション・ビジネス・ルールの使用
ビジネス・ルールを使用すると、専門知識を持たないユーザがプロダクションのビジネス・プロセスの動作を変更できるようになります。また、ビジネス・ルールは、キューブのソース式でも使用できます (プロダクション・ビジネス・ルールの詳細は、"ビジネス・ルールの開発" を参照してください)。
ソース式で使用されているプロダクション・ビジネス・ルールにアクセスするには、%DeepSee.CubeDefinitionOpens in a new tab の %Rule() メソッドを使用します。このメソッドには、以下のシグニチャがあります。
%Rule(rule_name)
rule_name は、プロダクション・ビジネス・ルールの名前です。
この関数をキューブの構築時に (指定されたソース・レコードに対して) 評価する際、システムでは、この関数にコンテキスト・オブジェクトとしてキューブ・ソース・クラスのインスタンスを渡します。このオブジェクトを使用して、ルールが評価され、ルールから返された値にアクセスします。
キューブ定義クラスは、%Rule() メソッドが定義されている %DeepSee.CubeDefinitionOpens in a new tab から継承されるので、ソース式を以下のように使用できます。
%cube.%Rule(rule_name)
キューブ内のディメンジョンの順序の変更
アーキテクトで、キューブ内のディメンジョンの順序を変更する手順は以下のとおりです。
-
[順序変更] をクリックします。
ダイアログ・ボックスが表示されます。
-
[ディメンジョン] をクリックします。
-
必要に応じて、[アルファベット順] をクリックし、アルファベット順に配列します。
これは、即座にリストに作用します。必要に応じて、リストをさらに再編成できます。また、ディメンジョンを追加する際に、アルファベット順の自動配列は行われません。
-
ディメンジョンの名前をクリックし、必要に応じて上矢印または下矢印をクリックします。
-
必要に応じて、他のディメンジョンでもこの操作を繰り返します。
-
[OK] をクリックします。
キューブ内のディメンジョンの順序は、アナライザでの表示方法に影響を与えます。その他の影響はありません。ディメンジョンをアルファベット順に配列したほうが便利なユーザもいれば、使用頻度の高いディメンジョンをリストの上部に配置するユーザもいます。
階層内のレベルの順序の変更
アーキテクトで、階層内のレベルの順序を変更する手順は以下のとおりです。
-
階層内でレベルを上に移動するには、そのレベルの行で上矢印をクリックします。
-
階層内でレベルを下に移動するには、そのレベルの行で下矢印をクリックします。
レベルの検証
レベルを定義したら、キューブの完全構築または選択的構築によって、それらのレベルを構築する必要があります。レベルの動作が適切であることを検証します。各レベルについて、アナライザを使用してレベルを行として表示する新しいピボット・テーブルを作成します。
-
[Analytics]→[アナライザ]→[進む] をクリックします。
Tip:既にアナライザが開いている場合は、ページ上部の [アナライザ] リンクをクリックするだけです。
-
左領域に検証対象のキューブが表示されていない場合は、[開く] をクリックして、キューブを選択します。
-
左領域で、レベルを含むディメンジョンを検索し、そのディメンジョンを展開します。
-
レベルを [行] ボックスにドラッグ・アンド・ドロップします。
このピボット・テーブルで、以下の項目を検索します。
-
レベルに適正な数のメンバが存在することを確認します。
レベルに同名の重複メンバがある場合は、"重複メンバ名が生成される状況" のセクションを参照してください。
メンバに欠落がある場合は、管理ポータルを使用して、そのメンバに関連付けられているソース・レコードを検索します。ソース・プロパティがソース式で要求される形式であることを確認します。
-
メンバ名が、ビジネス・ユーザの必要に応じて適切な形式であることを確認します。
-
NULL メンバが存在する場合、ビジネス・ユーザの必要に応じて適切な名前があることを確認します。
-
メンバが必要な順序で並べ替えられることを確認します。
確認できない場合は、前のセクションを参照してください。
-
レベルで範囲を使用する場合は、以下の手順を実行して、範囲の端点に関するエラーでレベルのレコードが削除されないことを検証します。
-
ピボット・オプション・ボタン をクリックします。
-
[行オプション] 領域で [合計を表示] をクリックして [OK] をクリックします。
合計行にはその上にある値の合計が表示されます。この合計は、キューブ内のレコードの合計数と等しくなります (等しくならないように設定した場合を除く)。等しくない場合は、範囲を慎重に調べ、差異を見つけます。例えば、以下のようなピボット・テーブルがあるとします (10000 の患者を格納するキューブのピボット・テーブル)。
このバージョンの Age Group レベルは、以下の範囲を使用します。
29 歳、30 歳、59 歳または 60 歳の患者は、適切に定義されていないこのレベルでは、どのメンバにも含まれません。
-
アナライザでは、ピボット・テーブルの生成された MDX クエリにアクセスできます (アクセスするにはクエリ文字列ボタン をクリックします)。その後、そのクエリをテキスト・ファイルに保存し、後からプログラムを使用してクエリを再実行できます。この方法によって、データが変更された場合に後からモデルを再検証することができます。新しいデータには、モデルの作成時に考慮されなかった値が含まれる場合があります。
プログラムを使用してクエリを実行する方法の詳細は、"InterSystems Business Intelligence の実装" を参照してください。
別の便利なツールとして、%DeepSee.UtilsOpens in a new tab の %AnalyzeMissing() メソッドがあります。このメソッドは、指定されたキューブ内の非計算のレベル、メジャー、およびリレーションシップをすべて分析し、各々に値が存在しないファクトの数を返します。以下はその例です。
Do ##class(%DeepSee.Utils).%AnalyzeMissing("patients")
-----------------------------------------------------------------------------
Level #Missing %Missing
Lvl [AgeD].[H1].[Age] 0 0.00%
Lvl [AgeD].[H1].[Age Bucket] 0 0.00%
Lvl [AgeD].[H1].[Age Group] 0 0.00%
Lvl [AllerD].[H1].[Allergies] 388 38.80%
Lvl [AllerSevD].[H1].[Allergy Severities] 388 38.80%
Lvl [BirthD].[H1].[Date] 0 0.00%
Lvl [BirthD].[H1].[Decade] 0 0.00%
Lvl [BirthD].[H1].[Period] 0 0.00%
Lvl [BirthD].[H1].[Quarter Year] 0 0.00%
Lvl [BirthD].[H1].[Year] 0 0.00%
Lvl [BirthQD].[H1].[Month] 0 0.00%
Lvl [BirthQD].[H1].[Quarter] 0 0.00%
Lvl [BirthTD].[H1].[Birth Time] 0 0.00%
Lvl [ColorD].[H1].[Favorite Color] 221 22.10%
Lvl [DiagD].[H1].[Diagnoses] 831 83.10%
Lvl [DocD].[H1].[Doctor] 159 15.90%
Lvl [DocD].[H1].[Doctor Group] 271 27.10%
Lvl [GenD].[H1].[Gender] 0 0.00%
Lvl [HomeD].[H1].[City] 0 0.00%
Lvl [HomeD].[H1].[ZIP] 0 0.00%
Msr [Measures].[Age] 0 0.00%
Msr [Measures].[Allergy Count] 388 38.80%
Msr [Measures].[Avg Age] 0 0.00%
Msr [Measures].[Avg Allergy Count] 388 38.80%
Msr [Measures].[Avg Enc Count] 0 0.00%
Msr [Measures].[Avg Test Score] 200 20.00%
Msr [Measures].[Encounter Count] 0 0.00%
Msr [Measures].[Test Score] 200 20.00%
Lvl [PatGrpD].[H1].[Patient Group] 0 0.00%
Lvl [PatGrpD].[H1].[Tested] 0 0.00%
Lvl [ProfD].[H1].[Industry] 564 56.40%
Lvl [ProfD].[H1].[Profession] 564 56.40%
TOTAL FACTS 1,000