アナリティクスタブにいろんな統計データが表示されていますが、どうも自分が欲しい情報じゃない…と思ったことあるはずです←
ないなら作りましょう!ということで、今回はカスタムデータソースの作り方を解説します。
EBOブログにも作り方の説明が載っています。
タイルを作成する
例として、「ランタイムリソース別に稼働時間を集計したグラフ」をタイル表示してみます。
まず、アナリティクスタブ→タイルライブラリを選択します。
タイルライブラリの欄で右クリックし、「タイルを作成」を選びます。
詳細タブ内の設定項目ですが、ここでは一旦
- 名前:RR利用状況
- チャートの種類:積み上げ横棒
としておきましょう。
ストアドプロシージャを作る
詳細タブの中に「データソース」という項目がありました。
この「データソース」はSQL Serverのストアドプロシージャ(以下、ストアド)と同義です。
ストアドの詳細な説明は割愛しますが、簡単に言うと
複数のSQLを実行することでしか望んだ結果が得られない場合に使う、一連の手続き
のことです。
このストアドを呼び出して、タイルにグラフとして表示させることができればOKというわけです。
今回作りたいのは、各ランタイムリソース別の稼働時間でした。
一口に稼働時間といっても、どのプロセスでどれだけ時間を食っているかも出したいところです。それも考慮したストアドを作ることにしましょう。
ストアドを作るには、SQL Server Management Studio(SSMS)か、SQL Serverに接続されたデータベース開発ツールを使います。
SSMSでの作り方ですが、ツールを開いた後にBPの開発環境DBに接続し、「新しいクエリ」をクリックします。
右側にSQLQuery1.sqlタブができると思います。
あとはここにストアドをゴリゴリ書いていきます。
ストアドを書くコツは、BPの他のストアドを参考にすることです←
今回は「BPDS_QueueVolumesNow」というストアドを参考にしました。
キューの種類が増減してもストアドを変更しなくてよい仕組みを流用してます。(キュー一覧を変数に保持して動的SQLに埋め込む、pivotを使った行列変換、など)
出来上がったストアドはこちら。
CREATE procedure DS_ResourceUtilisationReport
as
begin
declare @proclist nvarchar(max) = ''
declare @query nvarchar(max) = ''
declare @procnm nvarchar(100) = ''
declare cur_proc cursor for
select
processname
from
BPVSessionInfo
where
starterresourcename not like '%' + '_debug'
group by processname
open cur_proc
fetch next from cur_proc into @procnm
while @@fetch_status = 0
begin
set @proclist = @proclist + @procnm + ','
fetch next from cur_proc into @procnm
end
set @proclist = left(@proclist, len(@proclist) - 1)
close cur_proc
deallocate cur_proc
set @query =
'with results as (
select
v1.starterresourcename,
v1.processname,
sum(isnull(datediff(ss, v1.startdatetime, v1.enddatetime), 0)) as sumtime
from
BPVSessionInfo as v1
where
v1.starterresourcename not like ''%_debug''
group by
v1.starterresourceid,
v1.starterresourcename,
v1.processid,
v1.processname)
select
starterresourcename, ' + @proclist + '
from
results pivot(sum(sumtime) for processname in(' + @proclist + ')) as pv
order by starterresourcename'
execute sp_executesql @query
end
return
上記ストアドをそのまま貼り付けて、実行してみてください。
「DS_ResourceUtilisationReport」というストアドが新規作成されると思います。
ちなみに他のストアドは接頭辞に「BPDS_」がついていると思いますが、これはBP標準で用意されたストアドの予約語です。
拡張するときはこの接頭辞を付けても、BluePrism側で認識されません。
ストアドを新規に作成するときは、必ず「DS_」を頭につけることに注意してください。
後は、BPユーザーが使えるようにするための権限付与が必要です。
以下SQLを実行してください。
GRANT EXECUTE ON OBJECT::DS_ResourceUtilisationReport TO bpa_ExecuteSP_DataSource_custom
これでストアドの作成は完了です。
タイル表示させてみる
BPの画面に戻り、改めて「RR利用状況」のダッシュボードタイルを表示します。
データソースのプルダウンを見てみると、先ほど作った「DS_ResourceUtilisationReport」が表示されているのが分かるかと思います。選択してみましょう。
選択後、プレビュータブを選択します。
開発環境のランタイムリソースの登録状況や、プロセスの稼働状況によりますが、以下のようなグラフが表示されていると思います。
確かに各ランタイムリソース別かつプロセス別に稼働時間(秒)が表示されていますね。
今回ストアドの実装にあたり、気を利かせたところとしては、
- デバッグ実行(=ランタイムリソース名に「…_debug」がつくもの)は対象外
- プロセスは作ったものの、一度も稼働させていないものは対象外
としています。
まとめ
今後BP標準のデータソースが拡張されていくと思いますが、自作できるのは大きなメリットと思います。
不要なプロセスの見極め、リソース分散の判断材料、プロセスの効果測定など…
ストアドを書くことに慣れさえすれば、プロセスの稼働レポートなどの資料作成も格段に捗ると思います。