KPI の構成例
このページでは、InterSystems Supply Chain Orchestrator™ で KPI を定義および構成するプロセスの例を示します。
この例では、提供される分析キューブを使用した KPI 構成のみを取り上げます。その他の方法を使用した KPI の実装は、将来追加される予定です。
オンライン学習パス "Building Smart Real-Time Supply Chain ApplicationsOpens in a new tab" も参照してください。これには、KPI の作成に関する情報が含まれています。
要件の収集
この例では、早期納品が予想される (サプライヤからの) 出荷を捉える KPI に焦点を当てています。以下の表は、この KPI により必要となるロジックについての詳細情報を示しています。
KPI の機能 | 要件の詳細 |
---|---|
名前 | ExpectedEarlyDeliverySupplyShipment (名前にはスペースなし) |
ラベル | Supply Shipment with Expected Early Delivery |
説明 | Supply shipments which are expected to be delivered early |
ビジネス・エンティティ | サプライヤからの出荷 |
KPI メジャー | 出荷数 |
KPI メジャー・タイプ | パーセンテージ |
KPI 条件 (分子) | 輸送中、かつ ETA が要求された納期よりも 4 時間以上早い出荷品 |
KPI 条件 (分母) | 輸送中のすべての出荷品 |
KPI ディメンジョン | ユーザはサプライヤ、運送業者、および出荷先所在地による KPI の内訳を希望 |
問題のインジケータ | 問題は KPI 条件を満たす出荷に対し、既定の重大度レベル 2 で生成 |
要件マッピング
上記の表に収集されたビジネス要件を使用して、以下のマッピングを実行できます。
-
対象のデータ・モデル・オブジェクトを指定します。既存のサプライ・チェーン・データ・モデルは、オブジェクト SupplyShipment を持つ供給出荷エンティティをサポートします。SupplyShipment オブジェクトには、ETA (estimatedTimeOfArrival) および要求された納期 (requestedTimeOfArrival) に必要な属性もあるため、データ・モデルのカスタマイズは必要ありません。サプライ・チェーン・データ・モデルの各オブジェクトのデータ・オブジェクトと属性の詳細は、データ・モデルの API ドキュメントを参照してください。このマッピングの結果により、KPI 定義の以下の部分が得られます。
{ "baseObject": "SupplyShipment" }
-
この KPI に使用するキューブを指定します。KPI ロジックのほとんどはキューブの設計とキューブのマッピングで実装されます。このステップのために、InterSystems IRIS® は、非技術系ユーザでも利用できる、以下の手法をサポートする強力なツールを提供しています。
-
分析キューブの理解。KPI ロジックは、事前定義された分析キューブに基づいています。具体的には、キューブ・クエリを使用して、対象のレコードとメジャーのセットを特定します。事前構築されたキューブにより、販売注文、供給出荷、在庫といった一般的なサプライ・チェーン・エンティティについての情報に容易にアクセスできます。
-
キューブのマッピング。一般的に、プライマリ・ベース・オブジェクトが KPI ベース・エンティティ・のデータ・オブジェクトに一致するキューブを使用する必要があります。この例では、すぐに使用可能なキューブ SupplyShipmentCube を使用しています。このキューブのベース・オブジェクト SupplyShipment が、サプライヤからの出荷のビジネス・エンティティに一致するためです。このマッピングの結果により、KPI 定義の以下の部分が得られます。
{ "deepseeKpiSpec": { "cube": "SupplyShipmentCube" } }
-
-
この KPI に使用するメジャーを指定します。前述のように、KPI メジャーはキューブのメジャーである必要があります。この例の KPI では、出荷数を KPI メジャーとして使用します。既定では、すべてのキューブにカウントのメジャーがあります。KPI 定義で使用するメジャーの正確な名前を見つけるには、以下の手順を実行します。
-
Business Intelligence アナライザでキューブを開きます。
-
左側の領域 (キューブの内容を表示) から、右側の [メジャー] ボックスにメジャーをドラッグ・アンド・ドロップします。
-
ツールバーの [クエリを表示] ボタン をクリックします。これにより [MDX クエリ] ウィンドウが表示され、以下の例のように単純なクエリが表示されます。
SELECT [Measures].[%COUNT] ON 0 FROM [SUPPLYSHIPMENTCUBE]
この場合、メジャーの名前は %COUNT です。
-
メジャー名は、KPI 定義内の kpiMeasure 属性の値として使用します。この結果が、KPI 定義の以下の部分です。
{ "deepseeKpiSpec": { "kpiMeasure": "%COUNT" } }
-
-
KPI が識別する条件 (多くの場合、複数の特性を伴う) を説明します。最終的に、KPI 条件は一連の MDX メンバ式として表現されます。この式はシステムにより自動的に論理 AND で結合されます。配送ステータスや注文ステータスなどの一般的な条件については、すぐに使えるキューブ設計により、適切なディメンジョンが提供されます。アナライザを使用してこれらの式を取得できます。
-
アナライザ内の以前の作業内容をクリアします (1 つの方法としては、[新規] ボタンを押すことが挙げられます)。
-
左側でキューブのディメンジョンを展開し、そこから [フィルタ] ボックスにドラッグ・アンド・ドロップします。
この例では、SupplyShipmentCube にはディメンジョン Actual Time of Arrival が含まれ、このディメンジョンにはメンバ Delivered および InTransit が含まれます。InTransit をドラッグして、[フィルタ] ボックスにドロップします。同じキューブには、ディメンジョン Estimated vs Actual Time of Arrival も含まれています。これには、メンバ Early、OnTime、および Late を含む status レベルがあります。Early をドラッグして、[フィルタ] ボックスにドロップします。
すると、[フィルタ] ボックスは以下のようになります。
-
ツールバーの [クエリを表示] ボタン をクリックします。これにより、[MDX クエリ] ウィンドウが表示されます。この場合、以下のようなクエリが表示されます (意図的に改行を入れてあります)。
SELECT FROM [SUPPLYSHIPMENTCUBE] %FILTER NONEMPTYCROSSJOIN([estimatedVsRequestedDelivery].[H1].[status].&[Early],[actualTimeOfArrival].[H1].[value].&[<null>])
この場合、ピボット・テーブルには使用する 2 つの MDX メンバのクロス結合が表示されます。
-
[estimatedVsRequestedDelivery].[H1].[status].&[Early]
-
[actualTimeOfArrival].[H1].[value].&[<null>]
これらは、NONEMPTYCROSSJOIN 関数内でコンマで区切られていることに注意してください。
-
-
以下の例に示すように、これらのメンバ式を kpiConditions リスト内の項目として使用します。
{ "deepseeKpiSpec": { "kpiConditions": [ "[estimatedVsRequestedDelivery].[H1].[status].&[Early]", "[actualTimeOfArrival].[H1].[value].&[<null>]" ] } }
-
-
KPI の値タイプが percentage の場合、基本条件 (分母用) も記述します。このステップは、以下の例に示すように baseConditions プロパティを指定する点を除き、前のステップと同じです。
{ "deepseeKpiSpec": { "baseConditions": [ "[actualTimeOfArrival].[H1].[value].&[<null>]" ] } }
-
KPI ディメンジョンを特定します。これらは、KPI 値の考えられる内訳です。各 KPI ディメンジョンは、MDX レベル式として表現されます。アナライザを使用してこれらの式を取得できます。
-
アナライザ内の以前の作業内容をクリアします (1 つの方法としては、[新規] ボタンを押すことが挙げられます)。
-
左側の領域から、右側の [行] ボックスにディメンジョン (またはディメンジョン内のレベル) をドラッグ・アンド・ドロップします。例えば、carrier をドラッグ・アンド・ドロップします。
-
ツールバーの [クエリを表示] ボタン をクリックします。これにより、[MDX クエリ] ウィンドウが表示されます。この場合、以下のようなクエリが表示されます (意図的に改行を入れてあります)。
SELECT NON EMPTY [carrier].[H1].[name].Members ON 1 FROM [SUPPLYSHIPMENTCUBE]
この場合、レベル式は [carrier].[H1].[name] です。
Members は、メンバを表示する MDX 関数で、構文のその部分は必要ありません。
-
以下に示すように、KPI 定義に含まれる kpiDimensions 配列のオブジェクト内で、このレベル式を使用します。
{ "deepseeKpiSpec": { "kpiDimensions": [ { "name": "carrier", "label": "Carrier", "cubeDimension": "[carrier].[H1].[name]" } ] } }
このオブジェクトでは、cubeDimension 属性は見つかったレベル式である必要があり、name 属性は API で使用するこの KPI ディメンジョンのローカル名、label 属性は表示のみを目的としています。
-
必要に応じてこのステップを繰り返し、他の KPI ディメンジョンを取得します。
-
-
その他の KPI 構成データ。このチュートリアルでは、KPI 構成の難しい部分について説明しました。残りの部分は、追加のマッピングは不要で、KPI 名や説明などほとんどの情報はビジネス要件のセクションで収集されているため、かなり簡単なはずです。
最終結果
最終的な KPI 定義は以下のようになります。
{
"name": "ExpectedEarlyDeliverySupplyShipment",
"label": "Supply Shipment with Expected Early Delivery",
"description": "Supply shipments which is expected to be delivered early",
"baseObject": "SupplyShipment",
"status": "Active",
"watchingThreshold": 5,
"warningThreshold": 10,
"issueKpi": true,
"defaultIssueSeverity": 2,
"analysisService": "Early Arrival Process",
"type": "DeepSee",
"deepseeKpiSpec": {
"namespace": "SC",
"cube": "SupplyShipmentCube",
"kpiMeasure": "%COUNT",
"valueType": "percent",
"kpiConditions": [
"[actualTimeOfArrival].[H1].[value].&[<null>]",
"[estimatedVsRequestedDelivery].[H1].[status].&[Early]"
],
"baseConditions": [
"[actualTimeOfArrival].[H1].[value].&[<null>]"
],
"kpiDimensions": [
{
"name": "carrier",
"label": "Carrier",
"cubeDimension": "[carrier].[H1].[name]"
},
{
"name": "supplier",
"label": "Supplier",
"cubeDimension": "[supplier].[H1].[name]"
},
{
"name": "toCountry",
"label": "Ship to country",
"cubeDimension": "[shipToLocation].[H1].[country]"
}
]
}
}
以下の API を使用して JSON ペイロードを送信し、KPI を作成できます。
POST {{IRIS-SERVER-URL}}/api/scbi/v1/kpi/definitions
KPI を定義したら、以下のように API 呼び出しにより KPI 値をクエリできます。
GET {{IRIS-SERVER-URL}}/api/scbi/v1/kpi/values/ExpectedEarlyDeliverySupplyShipment