【データモデル】Sharperlight CANVAS

今回は、[Sharperlight](https://sharperlight.jp/)エンジンを屈指して作成した派生品 **Sharperlight CANVAS** を紹介したいと思います。
Sharperlight CANVASは、お手持ちの画像とデータを結びつけて視覚的にデータを表現するための支援ツールです。
SharperlightのカスタムWebレポート機能をフルに利用して作成しています。  
Sharperlightにはこのような使い方もあるということがご理解いただければ幸いです。
### 概要 ###
HTMLとJavaScripでガシガシ書いたコードをSharperlightのWebレポートに梱包しています。
➊記述したコードをリソースとして公開クエリにインポート、➋カスタムHTMLとしてそれを参照します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/f533b576-9d1c-c377-15f0-ac91b6cc7d3f.png)
そしてSharperlightサービスを起動して、このレポートにアクセスすると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/262e0cc3-52c8-a14c-ea9c-637cff44876f.png)
このようなページが表示されます。お絵描きソフトっぽいです。
つまり、お手持ちの画像上にお絵描きソフトで円、四角形や多角形の”領域”を描き、それにデータを連動させて色を変化させるといった風なアイデアです。
これは、メニューバーを広げたところ。英語ですいません:bow_tone1:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/664c450f-e300-4ab5-3210-0801d58da229.png)
使用するデータセットは、最低4つ必要です。Sharperlight Webクエリとして準備します。
- 領域指定用データ：描く領域に場所や部位等の意味を持たせるため。Webクエリのグループ名は、**SLCANVAS_ADD**です。
- スライサー（データを分析するための切り口）。Webクエリのグループ名は、**SLCANVAS_SLI**です。
    - 時の経過を表現するデータ、1月から12月など。
    - 実際の値を評価するデータ、例えば個数や件数が、0-10, 11-20, 21-30 など。
- マッピングデータ：実際に表現したいデータ、例えば月単位の部署別の売上とか。Webクエリのグループ名は、**SLCANVAS_MDD**です。

今回の例では、車の月単位の修理件数を部位別に表示しますので、このようになります。
- 領域指定用データは、エンジン、ヘッドライト、前輪、後輪などという部位の情報。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c5ca80db-5425-ea13-7e34-05e92715bdb8.png)
- スライサーは、
    - 1月から12月の月データ。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/3911e0ac-87c8-6f01-3de1-a23a2fb8f7d4.png)
    - 件数の範囲データ。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/46290d67-29a1-26d7-38b5-8658a3d2f03e.png)
- マッピングデータは、 月単位の部位別の修理件数の集計データ。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4c4260a4-7c00-3c14-12af-18b84565f168.png)
### 画像のアップロード ###
初めに使用する画像をアップロードします。メニューバーの上矢印アイコンを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4ce625e1-5525-e2f0-4a77-d9f4f06b1bfa.png)
`File`ボタンで、画像ファイルを選択します。コード、摘要、画像名を入力し、`Submit`ボタンで完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/ca8f2138-c8f8-c0bd-2390-ac444eca7f39.png)
### 画像の読み込み ###
アップロードした画像を選択し、CANVASに読み込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/41f113f2-092e-f301-f8dd-d0d89a0a6e2d.png)
画像がこのように表示されると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/213f6505-6785-cf14-a983-14ee314dbbb0.png)
### 領域指定用データの読み込み ###
このアイコンを利用して、準備してある領域指定用データのWebクエリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/b34173ba-1405-9ee0-2678-5075f1cec24e.png)
読み込むと、このようなツールボックスが表示されます。これを利用して、画像上にデータを表現する領域を描きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8830290c-be54-ad1e-258b-3c831ec65fe0.png)
### マッピングデータの読み込み ###
ツールボックスの右側の枠内のフォルダーアイコンを利用して、準備してあるマッピングデータ用のWebクエリを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/4970f1ab-b84f-fd4e-0f06-8a9eab6ab409.png)
尚、マッピングデータ用のクエリには、どのスライサー用のWebクエリを選択するかも定義されています。よってマッピングデータが読み込まれ、チェックボックスがチェックされると、このようにスライサーも展開されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8d5d866e-7999-3e2a-1c79-6ef1b4fba935.png)
### 領域を画像上に描く ###
4つのデータセットを読み込み終えたら、データを表現する領域を画像上に描きましょう。
その前に、先ず使用するMeasureを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/df33e848-c9a3-3d29-bbda-f9d4da539fdf.png)
では、ツールボックスの`Area Defintion`一覧の`Engine`のラジオボタンを押下します。上部のお絵描きアイコンから`円`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/9f3ba5fe-4fc5-e1f7-2d30-27ff473067e0.png)
円の描き方は、画像上の2点をクリック、つまり円の中心と円周上の一点、その後`Enter`キーを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/a4c0b1f3-96cb-9690-17de-9dd52a860bbf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/978324ae-0d65-ae3b-de3d-f992fd8a78a9.png)
これで、**Engine**用の領域が描けました。同じように他の領域も描いていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/acdedb61-c413-b459-c911-0e9a061a43f9.png)
このような感じになりました。
これで、全ての設定が終了です。実際に各領域の色が、月単位でどう変化するか動作確認を行いましょう。
### 動作確認 ###
`Duration-月`スライサーのJanのラジオボタンを選択してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/da2145c8-3763-fb81-b8cd-82b17e519220.png)
画像上に描いた各領域の色が、マッピングデータに応じて変化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/8ad17274-c97d-4292-2b1d-c06f908615b4.png)
`Feb`、`March`と選択していくか、スライダーコントロールを右に滑らせていくと、領域の色がどんどん変化していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/d3606f10-1dae-3769-c9c2-1181aa9e32d2.png)
領域の上にカーソルをあてると、摘要が表示されます。また別の詳細レポートなどへのURLを設定することも可能です。
### 自動運転機能と保存 ###
コントロールバーの`Play`アイコンで、このJanからDecの繰り返しを自動運転させることが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/37c42f3a-9770-e202-0722-a5223ecf689a.png)
再生スピードも、`歯車`アイコンで起動するオプションダイアログで変更することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530698/c88288c6-a97d-1cd0-4911-5e08d8e679f3.png)
また、この全ての情報は保存可能で、自動実行機能で再生させることが可能です。

いかがでしたか？
大雑把に説明してきましたが、座標データを持たない元データの使用、地図以外の画像とデータの併用などに利用できますね。
また、このようにHTMLとJavaScriptを利用したWebアプリケーションとSharperlightのWebクエリで設計したデータセットの併用で、簡単スピーディなWebアプリケーションが作成できます。
Sharperlightは単にレポーティングツールだけではなく、アイデアひとつでそういった幅広い応用が利くという一例の紹介でした。