プリザンターと連携してダッシュボードを作ってみた(SQL Server+Metabase)

本記事は [Pleasanter(プリザンター) Advent Calendar 2020](https://qiita.com/advent-calendar/2020/pleasanter) 三日目の記事です。
#はじめに
国産オープンソースのローコード開発プラットフォームであるPleasanter"プリザンター"と、同じくオープンソースのBIツールであるMetabase"メタベース"を接続して、プリザンターに蓄積されたデータを見える化してみましょうという内容です。
Pleasanter .NET Framework版(SQL Server) 0.50.199
https://pleasanter.org/

Metabase 0.37
https://www.metabase.com/

#「ローコード」としてのプリザンター
昨今、エンジニア界隈で注目を集めている「ローコード開発」。
プリザンターは、まさにそのローコード開発プラットフォームであり、カスマイズが容易で即座にアプリに反映できるという点において、Excelと同等に、あるいはそれ以上に効率的にデータを収集することができます。

しかしながら、マネジメント快適化、というプリザンターのコンセプトでも説明されている通り「全員参加で小回りの利く管理業務」に適したシステムではありますが、一方で苦手な部分もあります。
それは、経営・会計などといった数値を扱った分析・視覚化であり、その点はExcelの方が優位なことは否めません。
もともと、管理業務を効率化するためのツールとして生まれたのがプリザンターですので、Excelの方が効率的であればExcelを使えば良いという思想があります。プリザンターでデータを収集し、集めたデータをExcelに渡して分析・視覚化するというのは非常に効率的な手段です(一人で使う場合や、集まったデータを分析・視覚化するという点においてExcelはとても素晴らしいアプリケーションです)。

データを収集・管理するという点においてプリザンターは非常に優れていることは間違いありませんので、その強みを活かして苦手を克服する、ひとつのやり方を紹介します。

#Metabaseでダッシュボード化
オープンソースのBIツールであるMetabaseを使います。
https://www.metabase.com/

上記よりダウンロードしてインストールしてください。
JAVAのランタイムが必要になる以外は、特に悩むような所は無いと思います。
データベースへの接続も、特に難しいことは無いので、データベースのタイプでSQL Serverを選択し、名前・インスタンス名は任意、ホスト・ユーザ名・パスワードは、プリザンターの設定ファイル(Rds.json)を参照のうえ転記してください。

![FireShot Capture 045 - HAYATO-SQL · データベース · 管理者 · Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/1d155258-2a09-3dda-a68f-b9090de9afbe.png)

なんとそれだけで簡単に接続できてしまいます。
左上にいる可愛いアイコンはmetabotくんと言うようです(？)。
「お陰様で調子は最高です」
![FireShot Capture 015 - Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/a352078b-2794-1bbe-63a5-d5acb48bef9f.png)

まずは以下のようなサンプルで作った記録テーブルの中身を読み込んでグラフを作ってみたいと思います。
![FireShot Capture 021 - プリザンター - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/249dde04-68c5-a963-08ca-777eb6c1d1d9.png)

Metabaseに戻って、先程登録したデータベース(ここでは、HAYATO-SQL)に接続し、記録テーブルのデータが格納されているResultsテーブルを開きます。
プリザンターのデータの保存先は以下のようになります。

|テーブル種別|テーブル名|
|:---|:---|
|記録テーブル|Resultsテーブル|
|期限付きテーブル|Issuesテーブル|
|Wiki|Wikisテーブル|

記録テーブルであれば、Resultsテーブルに全ての記録テーブルの全てのデータが保存され、SiteIDによってどのテーブルのデータかを区別しています。
![FireShot Capture 027 - 質問 · Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/0c5f8ad0-adbf-289f-04bc-252b138a6583.png)

Resulsテーブルを開くと、全ての記録テーブルの全てのデータが保存されていますので、まずは対象のテーブルに限定するためSiteIDでフィルタする必要があります。サイトIDは下図のように「テーブルの管理」「全般」に表示されています。URLにも同様のIDが入っていますので、そちらを参照しても問題ありません。

![FireShot Capture 018 - プリザンター - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/de9ce2cb-5cd5-2ea6-f641-11d13654b42e.png)

Metabeseの画面右上のほうに、フィルタや要約などExcelで見慣れた文言が出てきますが、下図の赤枠にあるアイコンをクリックするとエディターが表示されますので、こちらの方が個人的には使いやすかったです。
![FireShot Capture 030 - 質問 · Metabase - localhostのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/a7be3a95-ecfa-29df-d636-ebdaf4d83da3.png)

下図がエディターの画面。
ここでは、ResultsテーブルのデータでSiteIDが38097で且つDateAが直近6ヶ月以内であるデータのみを対象として、NumAの値をClassAで選択された項目と月ごとまとめて合計しています。
![FireShot Capture 056 - 6ヶ月線グラフ · Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/371d92dc-173b-d111-aae0-8aab85c94664.png)

で、ビジュアライズボタンを押して線グラフを選択します。
![FireShot Capture 051 - 6ヶ月線グラフ · Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/f0e78a83-a4c0-18d4-00e0-4c06bfe1d730.png)

なんて簡単なんだ！
このような要領でいくつかグラフを作ってダッシュボードに貼り付けてあげれば、プリザンターの標準機能では出来なかった折れ線グラフ、棒グラフ、円グラフなどを使った視覚化ができてしまいます。
![FireShot Capture 062 - Pleasanterダッシュボード · ダッシュボード · Metabase - localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/23df5104-226b-1c14-aab5-54434de2b9ef.png)

#プリザンターにデータを集積して活用する
今回、プリザンターと連携させてみたMetabaseはオープンソースとは思えない非常に優れたBIツールです。
使い方は数多くのドキュメントが有志によって公開されており、それほど戸惑うことはないと思いますので具体的な操作方法は割愛しましたが、本当に短い時間で有用なダッシュボードを構築できます。

プリザンターは、手軽に業務アプリを作成してデータを収集・蓄積していくことはもちろん、豊富なAPIで基幹システムやその周辺システムなどとの連携も得意としています。
そして、データベースへのアクセスが開放されているため(とはいえ、参照にとどめましょう)、今回のように外部システムとダイレクトに連携して蓄積したデータを活用することもできます。
プリザンターをデータハブとして使うことで、社内に溜め込んだ多くのデータを、より活用して業務に活かすこともできるかもしれません。

「ローコード」と聞くと「簡単に作れるけど制限も多い」というイメージもあるかと思いますが、その点、プリザンターはかなり制限の少ないローコード開発プラットフォームと言えるのではないかと思います。
こんな使い方をしているよ、という活用事例などあれば是非お聞かせ下さい。

#おわりに
![スクリーンショット 2020-12-02 12.03.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537390/5cb83ded-f009-dc62-0bbd-d7e315750a20.png)
誰にでもそういうことを言うのはやめたほうがいいですよ、metabotくん。
HAYATOくんならそんなこと言わない。