基本的な KPI の定義
この章では、DeepSee の重要業績評価指標 (KPI) の概要を説明し、ハードコードされたクエリを使用する KPI の定義方法を説明します。以下のトピックについて説明します。
KPI とその他のモデル要素との比較については、"DeepSee モデルの定義" の “モデル・オプションの概要” の章を参照してください。
“フィルタおよびリストを含む KPI の定義” の章および “高度な KPI の定義” の章も参照してください。
iKnow KPI の定義の詳細は、"iKnow の使用法" の “iKnow KPI と DeepSee のダッシュボード” を参照してください。
KPI の概要
KPI は、%DeepSee.KPIOpens in a new tab をベースにしたクラスです。多くの場合、KPI はクエリを使用して、結果セットを表示します (それ以外は、KPI はアクションのみ定義します。"DeepSee 実装ガイド" の “カスタム・アクションの定義” を参照してください)。
KPI の使用法
KPI は、ピボット・テーブルと同様に、ダッシュボードで、ウィジェット内に、表示できます。
また、MDX %KPI 関数を使用して、KPI の値を取得することもできます。その結果として、KPI に基づいた計算メンバを定義できます。
ObjectScript から KPI の値にアクセスするには、KPI クラスの %GetKPIValueArray() メソッドを使用します。例については、“ハードコードされたクエリを使用した KPI の定義” を参照してください。
ピボット・テーブルとの比較
KPI は、さまざまな点でピボット・テーブルと似ていますが、ピボット・テーブルにはないオプションが追加されています。違いの 1 つとして、KPI は SQL クエリを使用できます。SQL クエリと MDX クエリは適したシナリオが異なるので、これは重要な違いです。場合によっては SQL クエリのほうが効果的であり、そのような場合は KPI で SQL クエリを使用する必要があります。
KPI とピボット・テーブルの他の相違点および類似点は、"DeepSee モデルの定義" の “モデル・オプションの概要” を参照してください。
KPI クエリの要件
多くの場合、KPI は MDX クエリまたは SQL クエリのどちらかを使用します。クエリの形式にはルールがあります。このルールは、KPI 結果セットの構造によって定められるものです (後続のセクションを参照してください)。
-
クエリで MDX を使用する場合、以下の要件に注意してください。
-
クエリは行に MEMBERS 関数を使用する必要があります。ネストした行を使用できます。
-
クエリは列にメジャーを使用する必要があります。
-
クエリでは、列にネストを使用できません。
-
-
クエリは数値を返す必要があります。
-
クエリが 1000 行を超える行を返す場合は、最初の 1000 行のみが使用されます。
これらのルールに従わないクエリを使用できます。そのためには、結果セットを解析して、直接 KPI インスタンスのプロパティを指定する必要があります。詳細は、“高度な KPI の定義” の章を参照してください。
メータで KPI を表示する場合、KPI の最初の行のみが使用されることにも注意してください。
MDX と SQL のどちらかを選択する方法
SQL クエリと MDX クエリは、適したシナリオが異なり、場合によっては SQL クエリのほうが効果的です。
MDX は一般に、大量のレコードを集約する場合のほうが適しています。一方で、集約をまったく行わない場合、または下位レベルでのみ集約する場合は、SQL のほうが適しています。例えば、次のようなピボット・テーブルがあるとします。
このピボット・テーブルでは、各行がソース・テーブルの 1 行を表しています。同等の SQL クエリのほうが高速です。
KPI 結果セットの構造
KPI の結果セットは、系列とプロパティで構成されています。
KPI 系列は行です。以下の例は、9 つの系列を示しています (この章で後述する、KPI テスト・ページに表示されます)。各系列には名前があり、ここでは最初の列に表示されています。
KPI プロパティはデータ列です。前述の例は、2 つのプロパティを持つ KPI を示しています。
MDX クエリに基づく KPI の場合、系列は通常レベルのメンバに対応し、プロパティは通常メジャーに対応します。
ハードコードされたクエリを使用した KPI の定義
ハードコードされたクエリを使用する単純な KPI を作成するには、スタジオで以下の手順を実行します。
-
[ファイル]→[新規作成] を選択してから、[カスタム] タブ、[DeepSee KPI の新規作成] の順に選択します。
-
以下の必須の値を指定します。
-
Package Name — KPI クラスを含むパッケージ。
-
Class Name — KPI クラスの略称。
-
-
必要に応じて、以下に示す他の値を指定します。
-
[KPI キャプション] — 使用されていません。
-
[KPI 名] — KPI の論理名。
-
[説明] — KPI の説明。クラスのコメント行として保存されます。
-
[ドメイン] — この KPI が属するローカライズ・ドメイン。詳細は、"DeepSee 実装ガイド" を参照してください。
-
[リソース] — この KPI を保護するリソース。これの使用法については、"DeepSee 実装ガイド" の “セキュリティの設定” を参照してください。
-
[ソース・タイプ] — この KPI のデータのソースを指定します。[mdx] または [sql] のどちらかを選択します ([手動] の詳細は、“高度な KPI の定義” の章を参照してください)。
-
[プロパティ] — この KPI のプロパティの名前 (結果セットの列名) を入力します。1 行につき 1 つのプロパティを入力します。
-
[フィルタ] — KPI クエリで使用するフィルタの名前を入力します。次の章を参照してください。1 行につき 1 つのフィルタ名を入力します。
-
[アクション] — KPI で定義するアクションの名前を入力します。"DeepSee 実装ガイド" の “カスタム・アクションの定義” を参照してください。1 行につき 1 つのアクション名を入力します。
これらの値はすべて、後で同じように編集できます。
-
-
[完了] を選択します。
ウィザードにより、以下のようなクラス定義が生成されます。
Class MyApp.KPI.MyKPI Extends %DeepSee.KPI { Parameter DOMAIN = "MyAppDomain"; Parameter RESOURCE = "KPI_Resource"; /// This XData definition defines the KPI. XData KPI [ XMLNamespace = "http://www.intersystems.com/deepsee/kpi" ] { <kpi xmlns="http://www.intersystems.com/deepsee/kpi" name="MyKPI" sourceType="mdx" caption="MyCaption" > <property name="PatCount" displayName="PatCount" columnNo="1"/> <property name="AvgAge" displayName="AvgAge" columnNo="2"/> </kpi> }
XData ブロックは、KPI を定義します。XData ブロックの <kpi> は XML 要素です。この要素は、<kpi で始まり、右山括弧で終了します。xmlns、name、sourceType、および caption は XML 属性です。各属性に値があります。この例では、sourceType 属性の値は mdx です。
このクラスには、さまざまなメソッドのスタブ定義も含まれています。既定では、これらは何も実行しません。詳細は、この後の 2 つの章を参照してください。
-
<kpi> 要素内に、以下の属性指定のどちらかを追加します。
mdx="MDX query"
または以下のようになります。
sql="SQL query"
MDX query は MDX SELECT クエリ、SQL query は SQL SELECT クエリです (ウィザードで mdx を選択した場合は mdx オプションを使用し、sql を選択した場合は sql オプションを使用します)。
例えば以下のようになります。
<kpi xmlns="http://www.intersystems.com/deepsee/kpi" name="MyKPI" sourceType="mdx" mdx="SELECT {MEASURES.[%COUNT],MEASURES.[Avg Age]} ON 0, HomeD.H1.City.MEMBERS ON 1 FROM patients" caption="MyCaption" >
この属性指定は、始まりの <kpi と右山括弧の間の任意の場所に追加できます。属性指定は、上記のように 1 行に独立して記述することも、他の属性と同じ行に記述することもできます。XData ブロック内では、スタジオにより入力支援機能が提供されます。
要件は、この章で前述の “KPI クエリの要件” を参照してください。
MDX の詳細は、"DeepSee での MDX の使用法" および "DeepSee MDX リファレンス" を参照してください。
-
必要に応じて、次のセクションの説明に従って、クラス・パラメータを指定します。
-
クラスをコンパイルします。
-
[ビュー]→[ウェブページ] を選択します。
これにより、表示は以下のようになります。
[系列] 列は、各系列の名前を示します。この名前は、この KPI をスコアカードに表示する際にラベルとして使用できます。
このテーブルには、これらの列の右に、KPI の <property> ごとに 1 つの列があります。この列には、KPI の行ごとにそのプロパティの現在の値が表示されます。
KPI テスト・ページでは、使用前の KPI を簡単にテストできます。KPI クラスの %GetKPIValueArray() メソッドを使用することもできます。以下に例を示します。
SAMPLES>set status=##class("HoleFoods.KPIYears").%GetKPIValueArray("HoleFoods.KPIYears",.pValues,$LB("Value"))
SAMPLES>w status
1
SAMPLES>set status=##class("HoleFoods.KPIYears").%GetKPIValueArray("HoleFoods.KPIYears",.pValues,$LB("Value"))
SAMPLES>w status 1
SAMPLES>zw pValues pValues(1)=$lb("2010")
pValues(2)=$lb("2011")
pValues(3)=$lb("2012")
pValues(4)=$lb("2013")
pValues(5)=$lb("2014")
pValues(6)=$lb("2015")
詳細は、%DeepSee.AbstractKPIOpens in a new tab のクラスリファレンスを参照してください。
クラス・パラメータの指定
KPI クラスで以下のクラス・パラメータの一部または全部を指定できます。
Parameter DOMAIN = "MyAppDomain";
この KPI が属するローカライズ・ドメインを指定します。詳細は、"DeepSee 実装ガイド" を参照してください。
この KPI が MDX クエリ内で使用される場合 (つまり、%KPI 関数を介して)、DeepSee で常にこの KPI の値を再計算するかどうかを指定します。既定は false です。そのクエリが再実行されると、代わりにキャッシュの値が使用されます。
KPI で外部データを使用する場合、FORCECOMPUTE を true に設定すると便利な場合があります。
CROSSJOIN または NONEMPTYCROSSJOIN を行に使用する MDX ベースの KPI で、ラベルを連結するために使用する文字を指定します。既定値はスラッシュ (/) です。
KPI が、スコアカードおよび他のダッシュボード・ウィジェットで使用可能かどうか、および MDX %KPI 関数で使用可能かどうかを制御します。KPI をダッシュボードで使用できないようにする場合、クラスに PUBLIC クラス・パラメータを追加し、値を 0 に設定します。
Parameter RESOURCE = "KPI_Resource";
この KPI を保護するリソースを指定します。これの使用法については、"DeepSee 実装ガイド" の “セキュリティの設定” を参照してください。
ASYNC クラス・パラメータの詳細は、“高度な KPI の定義” の章を参照してください。
速度計の範囲としきい値の指定
KPI の定義内で、速度計で使用する範囲としきい値を指定できます。これらの値を指定するには、<kpi> 要素を編集して、以下の属性を指定します。
-
rangeLower — メータに表示される下限値の既定値。
-
rangeUpper — メータに表示される上限値の既定値。
-
thresholdLower — この KPI の下限しきい値の既定値。しきい値領域は、対比色で表示されます。
-
thresholdUpper — 上限しきい値の既定値。
以下に例を示します。
<kpi name="KPIForRangeDemos"
sourceType="mdx"
mdx='SELECT MEASURES.[%COUNT] ON 0, AgeD.[All Patients] ON 1 FROM PATIENTS'
rangeLower="0"
rangeUpper="900"
thresholdLower="20"
thresholdUpper="800"
>
<property name="Patient Count" columnNo="1" />
</kpi>
この KPI を速度計で表示すると、(既定では) 以下のようになります。
速度計の値ボックスには、rangeUpper の値を超えていても、実際の KPI 値 (1000) が表示されていることがわかります。
プログラムによって範囲としきい値を設定することもできます。値をハードコードすることが不適切な場合は、その方法が便利です。“高度な KPI の定義” の章を参照してください。
ダッシュボードでスコアカードを構成する際、[下限のしきい値]、[上限のしきい値]、[範囲の下限]、および [範囲の上限] の各オプションがあります。KPI 属性 rangeLower、rangeUpper、thresholdLower、および thresholdUpper は、これらのスコアカード・オプションに影響しないことに注意してください。
%CONTEXT フィルタの無効化
前述したように、MDX %KPI 関数を使用して、KPI の値を取得できます。MDX ベースの KPI の場合、%KPI 関数には、KPI にコンテキスト情報を渡すオプション・パラメータ (%CONTEXT) があります。既定では、このコンテキスト情報は、フィルタ節として MDX クエリに適用されます。この自動動作を無効にするには、以下のように、%GetMDXContextFilter() メソッドをオーバーライドします。
Method %GetMDXContextFilter() As %String
{
Quit ""
}