Blue Prismのダッシュボードを、Power BIで作ってみようとしています。 #blueprism #powerbi

# これをやってみようと思った理由
Blue Prismのダッシュボードで見たいやつがタイルに載ってない、というのはけっこうあります。

自分の欲しいダッシュボードを自分で作る方法は既にこちらで解説されています。
[「Blue Prism のダッシュボードをカスタマイズする」(Enterprise Blue Ocean ◮)](https://www.ebocean.work/entry/2019/03/07/195404)
ssms開けてストアドプロシージャ書いて……がんばればできるけど……めんどくs

じゃなくて、PowerBIなら工数かけずに見映えの良いダッシュボードが作れるのでは……
と思ったので、試しに作ってみました。

欲しいのは、各々のプロセスがどのRRで実際どのくらい動いているのか、という一覧表です。
これがあると、1時間かかりますという申告でスケジュール組んでるけど実際10分かかってないよね？もっと後ろ詰めていいよね？とか、実際の稼働状況を見ることでより効率的なスケジュールを組むことができるのではないかなと思ったので。

Blue Prismには、SLAを入れるといい感じにスケジュールを考えて組んでくれるサービスもあるようで（DXに載ってる）
しかし今の環境ではそういうのを使ってないのです……。

# 必要なものと作り方
## ほしいもの
「何のプロセスが何のRRで何時から何時まで実行された（されている）か」という情報がほしいです。
つまり、制御室で見ることができる、下図の赤丸のとこに出る情報です。
![controlRoom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/b9db56bb-3cd0-8705-29f0-8003631c4b93.png)

## Power BIでBlue PrismのDBに接続する
まず、DBのテーブルをPower BIで見られるようにします。
接続設定してもなんでか繋がらない、というときは、Power BIを「管理者として実行」で起動してください。
PowerBIに権限が足りないとDBに接続できないです。
偽装レベルがどうのこうのというエラーが出るときは、この下の行のリンクから、「SQL Server に接続するときの問題を解決する」の項を参照してください。
[たぶんそれの説明になるもの: Power BI Desktop の起動に関するトラブルシューティング(Microsoft Doc)](https://docs.microsoft.com/ja-jp/power-bi/desktop-error-launching-desktop)


「データを取得」→「SQL Serverデータベース」を選択して「接続」を押す。
![a001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/f05ef62c-c2f4-c2ba-5935-aaa4e6103821.png)
「サーバー」欄にサーバ名かIPを入れます。ポートも指定してるならそれも入れる。あとはデフォルトのままでOK。
![a002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/8cab7653-41bc-28b9-b16d-c30ebc78f9cd.png)
DBサーバのID/PWを入れます。
それで接続できなかったら、左メニューを「データベース」に選び変えて、ssmsとかに入れるDBのID/PWを入れてみてください。
![a003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/67fdd944-a214-143e-5a37-12c6b7756f8b.png)

接続できたら、左側の赤四角で示した欄に、BPAなんとかという名前のテーブルがずらっと並びます。
![a004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/2e4b6215-867f-e2a4-4e81-8cdc77af5049.png)
「何のプロセスが何のRRで何時から何時まで実行された（されている）か」を見るために必要そうなテーブルと項目は以下のとおりです。

- BPASession
	- startdatetime（開始日時）
	- enddatetime（終了日時）
- BPAResource
	- name（RRの名前）
- BPAProcess
	- name（プロセス名）
- BPAStatus
	- description（CompletedとかTerminateとか書いてあるやつ）
- BPAUser
	- username（実行したユーザ名。スケジュール実行のときはここは出ない）

なので、左の赤四角枠の欄に並んだテーブル一覧から、上記の5個のテーブルを探してチェックを入れます。
それから、その下にある「関連テーブルの選択」を押します。
チェックマークがついたら、右下にある「読み込み」ボタンを押します。

これでDBの必要なテーブルは読み込めました。

## 読み込んだテーブルから見たい情報だけに絞る
取得したテーブルをどうしたらほしいテーブルの形にできるのか、という作業手順はこちらの記事が超わかりやすいです。
[「Power BI で社内のリース車の利用状況を可視化してみた」(Qiita)](https://qiita.com/KodamaJn/items/b511dc513ae8fe2ff3c5)
楽器の人の記事だ！Power BI使用歴30秒くらいの私でも読んだらわかるくらい親切な手順説明です。ありがとう楽器の人！

上のリボンの「クエリを編集」を押します。
![a005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/9a3f4bc5-63af-3568-725f-0542ab1b7899.png)
左側の「クエリ」欄に、さっきチェックマークを入れたテーブルの名前が並んでいます。
「BPASession」を選び、真ん中の大きいところにテーブルが表示されたら、上のリボンの「列の選択」をクリック。
![a006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/82824824-393d-4c4e-54df-568db9f08895.png)
「列の選択」ダイアログが出ます。一番上の「（すべての列の選択）」をクリックして全部のチェックを外したら、以下の6列だけチェックを入れます。

- startdatetime
- enddatetime
- BPAProcess
- BPAResource
- BPAStatus
- BPAUser

![a007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/484cb823-1e69-fc77-d3b2-195434b70679.png)
「BPAProcess」「BPAResource」「BPAStatus」「BPAUser」の4列の値は、違う色の文字で「Value」ってなってると思います。
見出し列の、各項目の右端にあるパカッて上に開くみたいなアイコンをクリック。
![a008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/ff52e802-ca9e-f159-c51e-a705166e0ca9.png)
さっきの列の選択ダイアログと同じようなのが出ます。各列、以下の列だけチェックが入ってるようにします。

- BPAResource
	- name
- BPAProcess
	- name
- BPAStatus
	- description
- BPAUser
	- username

これでほしい情報だけ載ったテーブルができました。左上の「閉じて適用」を押してこの画面を終わります。
![a009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/7a48c89c-5281-8278-a7d5-c9e09dd9c1d2.png)
左端の表みたいなアイコンをクリックしてから、右の「フィールド」欄で「BPASession」を探してクリックすると、さっき作ったクエリが表示されます。
![a010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/3bcc7ea7-beae-86aa-db34-4a7b156c92a6.png)
集計用の列を足します。
「フィールド」欄の「BPASession」って書いてあるところの右端に「・・・」みたいな表示があります、それをクリック。
![a011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/598b82d0-382e-2cb3-a0cb-3ed025f66e57.png)
ダイアログが出ます、「新しい列」をクリック。
![a012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/88c39bf3-1473-a589-e139-3b980988334f.png)
上の計算バーのところに列の式を入れます。式は予測変換みたいに入れられる項目が出てきてくれるからめっちゃラク。
入れたら、最後は「✔」をクリックします。
![a013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/b3bf5004-ce6b-75c9-425d-013d84c3d0b9.png)
入れる式はこれです。開始時刻と終了時刻の差をとって秒で出しています。

```DAX
かかった時間 = DATEDIFF([startdatetime],[enddatetime],SECOND)
```

##作ったテーブルをダッシュボードに図示する
ダッシュボードは、左端の棒グラフみたいなアイコンをクリックです。
いま作ったテーブルに戻りたいときは、その下の表みたいなアイコンをクリックしたらいつでも見られます。
![a014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/8c848ba0-a752-20cd-0f20-d08d6406477e.png)


ほしいグラフは、開始日時と終了日時をプロットして横軸に並べてくれるようなやつですが、そういうのは標準のビジュアルにはありません。
が、appsourceに、まさにそれだ！というカスタムビジュアルがありました。
これをダウンロードしてカスタムビジュアルに入れます。
[「as Timeline」(appsource)](https://appsource.microsoft.com/en-us/product/power-bi-visuals/WA104381377?tab=Overview)
![sample](https://store-images.s-microsoft.com/image/apps.31191.83dce9f3-d657-44bc-890d-3c5fffcdf6d6.a0ff3b16-698a-49a0-93db-cd1de373b794.38d1939f-a7bc-44e7-aa00-cdbef46aae6f.jpeg)
[Power BIカスタムビジュアルで学ぶデータモデリング from Microsoft AppSource(Qiita)](https://qiita.com/Yellow11/items/22e1577e2e9e7421b46d)
[カスタムビジュアルのインストール方法](https://lab.pasona.co.jp/data-operation/faq/824/)

インストールした「as Timeline」カスタムビジュアルは「視覚化」の一番下に出るので、アイコンをダブルクリックします。
真ん中の大きいところに枠ができます。
![a015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/455a1b7c-1dce-a553-204c-eaf4131dea11.png)
この枠をアクティブにした状態で、一番右の「フィールド」から「BPASession」をクリック。
「Entity」にResource、「Start Date」にstartdatetime、「End Date」にenddatetimeをドラッグします。
もし「プロセスごとでも見たい」ということであれば、「Category」にProcess.Nameをドラッグしたらいいです。
![a016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/ef9b60a8-f3c5-cbc8-9628-f1f279a22347.png)
このままだと横の時間軸がめっちゃ長くなるので、「フィルタ」で、startdatetimeを見たい日の24時間くらいに絞ります。
![a017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/e9b115c8-4558-d6ac-79d5-90f1bffc5f9b.png)
こういう感じの横軸の表が、RRの数だけ（プロセスも指定したらRRごとのプロセスの種類数だけ）出ます。
![a018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/f367253a-a1a5-ae5e-bfcb-dc57a25bcfd9.png)

## 「1日だけでなく、1週間とか1か月ぶんの稼働時間を重ねて表示したい」
新しい列を作って、startdatetimeとenddatetimeの時刻部分だけを表示するようにします。
書く式は、たとえばstartdatetimeなら、こんな感じです。
startdatetimeが「yyyy/MM/dd hh: mm:ss」の形なので、これの末尾の「hh: mm:ss」だけ持ってきています。

```DAX
開始時刻 = TIMEVALUE(RIGHT([startdatetime],8))
```

同じく「as Timeline」で図にしたら、「フィルタ」にstartdatetimeを入れて、欲しい1か月なり1週間なりの期間にフィルタしたらいいです。
![filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/ac13f961-6ba0-bdae-51f0-53ad627769ee.png)

これをやると、その期間にこの時間帯は全然何も動いてないじゃん！という時間帯がある場合は、それを見つけやすくなります。


## 他の図も出してみる
真ん中の大きいところの図が何もアクティブになっていない状態で「視覚化」から「散布図」をダブルクリック。
（アクティブになっていると、それが散布図に置き換わってしまう）
![a019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/ad5239a6-186c-361c-ac46-865db3b20869.png)
「凡例」にProcess.Name、「X軸」にかかった時間（さっき作った集計列です）の平均、「Y軸」にかかった時間のカウント、「サイズ」にかかった時間の合計を設定します。
![a020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142092/bada6d00-7ca8-5e83-9b67-73e89ec759da.png)
これで、プロセスごとの稼働状況を散布図に図示できます。

マルの大きさが大きいもの（総稼働時間が多い）、右にいるやつ（スケジュール1回ごとの時間が長め）のプロセスと、
左上にいるやつ（実行回数は多いけどすぐ終わるもの）のプロセスを別のRRに割り当てを分ける、などの対策の目安にできます。
たとえば、マルが大きいのにさほど右のほうにいないやつは
「普段はすぐ終わってるけど、たまーにものすごく時間がかかっている」ということで、
もし月曜の朝だけ終わるのがめっちゃ遅いとかならその起動回だけRRや起動時刻を変えるとか、環境をチェックし直すとか。


# とりあえずここまで作りました
Accessのクエリと、Excelのピボットテーブルを使ったことがある人なら、Power BI初めてでも、説明を見ながらならけっこういけると思います。
逆に言うと、ピボットわかんない人は、先にExcelのピボットの教材（これだったら易しい本がいっぱい売ってる）を読んで、ちょっと作れるようになってからチャレンジすれば、たぶん全然わかんないってことはないでしょう。

DBからテーブルを取得してからダッシュボードにこの図を出すまではほんとにすぐです。
つまり、がんばっていろいろいっぱい設定するとかコマンドを書くとかいう作業に工数を取られず
「何の数値を分析したら対策に役立つか」というところに集中して頭を使える、ということです。
ノーコードってすごいんだな……。