【４つの結合方法】MotionBoard Viewを解説【難易度：高】

# 最初に 

MotionBoardは綺麗でわかりやすいグラフや画面を作ることができます。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/04c48011-e65b-88dd-f666-a838819636e4.png" width=60%> 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e777e485-f3d0-3dc7-57e2-ddddd2df8860.png" width=60%> 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/7bc601e7-ace8-cafa-2313-c2d66b9de500.gif" width=60%> 

綺麗な上に、動いたりもします。 

気になる人は下記リンクをクリックしてください。体験デモもできます。 

[MotionBoard　体験デモについて（公式HPより）](https://www.wingarc.com/product/motionboard/demo/index.html) 

 

<details><summary>【MotionBoardとは】</summary><div> 

様々なデータソースからデータをあつめ、１つの画面上で統合するMotionBoard。 

クラウドサービスとの接続もでき、チャットツール送信もできるのでとてもおもしろいです。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657180/877897e8-35d1-b055-a80c-b9051866bc38.png" width=60%> 

※キャプチャはウイングアーク1st社のホームページより抜粋 

[ウイングアーク１ｓｔ株式会社　MotionBoard](https://www.wingarc.com/product/motionboard/index.html) 

</div></details> 


さて、今回はMotionBoardの数ある結合方法の中のひとつである「MotionBoard View」について、特徴とメリデメをまとめます。
以前紹介しました[モデル機能](https://qiita.com/Ryo---san/items/742efe103ea81ea12932)とできることが似ていますが、MotionBoard Viewはリアルタイム性を担保したいときに活用されます。


# MotionBoard Viewとは
さっそく[マニュアル](https://cs.wingarc.com/manual/mb/6.1/ja/UUID-c8db3038-cd58-23da-c223-14c8928c6421.html)より用途や概要を抜粋しましょう。

まずはMotionBoard Viewとは何かです。
>MotionBoardでは、異なるデータソースの明細データをJOINやUNIONで結合した「MotionBoard View」を作成できます。

>他のデータソースとは異なり、MotionBoard Viewのデータソース（結合したデータ）は実体を持ちません。データソースとして使用するタイミングでデータを結合するため、常に最新のデータとなります。この点は、データを結合した後にデータベースなどにデータを格納するモデルとは大きく異なります。

>MotionBoard Viewのデータソースは、通常のデータソースと同様に扱えます。MotionBoard Viewは、ボードごとに作成します。

モデル機能のようにMotionBoardの中でJOINやUNIONができます。
そして**実体を持たないため、常に最新のデータが表示**されます。


次に、どのようなときにMotionBoard Viewが役に立つのかというと、
>✅　接続先が異なるデータソースを結合したいとき
たとえば、Oracle DatabaseとMicrosoft SQL Server、ExcelとDr.Sumのデータソースを結合できます。
✅　結合したデータを最新の状態で使用したいとき
MotionBoard Viewのデータはテーブルなどには格納されません。使用するタイミングでデータが結合されます。
✅　結合対象のデータを事前に絞り込みたいとき
検索条件で絞り込んだデータを、結合対象のデータとすることができます（結合対象のデータを絞り込むことで、結合処理の負荷を軽減できます）。

となります。
MotionBoardは様々なデータをひとつの画面に表現することに優れています。
そのためデータ基が違うものでも、MotionBoard上でがっちゃんこできるというわけですね。


ぼくがMotionBoard Viewをつかった例ですと、デバイスのデータがリアルタイムでDBに書き込まれるのですが、
そのデータベースが点在していたときに、MotionBoard ViewのUnionをつかって、リアルタイムデータをひとつのデータソースに集めて、可視化をしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/c32892e4-898b-4561-b624-c9c8fd1ac38d.png)

MotionBoardはリアルタイミングじゃなきゃダメなデータや、ちょっと遅れや１日くらい遅れても問題ないデータもあります。
MotionBoard Viewとモデルは機能が似ていますが、後述するメリットデメリットを考えながら、どの機能を選ぶかを検討すると望ましいかと思います。


# ワンショットクエリーとテンポラリクエリー
MotionBoard Viewで必ず触れておきたいのが、このワンショットクエリーとテンポラリクエリーについてです。
[MotionBoard Viewの結合方法](https://cs.wingarc.com/manual/mb/6.1/ja/UUID-3556eb42-2a90-3887-aa24-0717cd05c1f2.html#UUID-3556eb42-2a90-3887-aa24-0717cd05c1f2_d38915e184094)にも細かく記載がありますが、要約するとこちらです。
（完全に内部の話なので、飛ばしてしまっても大丈夫です）

|名称  |特徴  |つかい方  |レスポンス|
|---|---|---|---|
|ワンショットクエリー  |DBの中で結合  |同一データソースからの抽出  |データベースに依存|
|テンポラリクエリー  |MBの中で結合  |異なるデータソースからの抽出  |ファクト100万件、ディメンション10万件まで|

たとえば売上データも担当者マスタも同じOracleの中にテーブルがあったら、Oracleの中でビューにしてMBにデータを引っ張ってきます。
売上データがOracle、担当者マスタがExcelだとMBの中でビューにします。
本来、こういったデータベースの結合処理というものはデータベース内でやることなので、前者の方がレスポンスが良いでしょう。

また前者の状況であれば、最適なのはOracleの中で事前にビューをつくってしまうことです。
このような運用面については最後の方で記述します。


# つくり方
### まず最初に
MotionBoard Viewをつかう上で、まず最初にやらねばならない設定があります。
それがMotionBoard Query Engineを接続しておくこと。
下図のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/972fda1f-9077-d36e-6e8e-b5695cc088f3.png)


やり方も公開されていますので、未実施の環境の場合は対応しましょう。（すぐにできますよ）
[MotionBoard Query Engineと接続する](https://cs.wingarc.com/manual/mb/6.1/ja/UUID-82889f4a-822e-53cc-805e-2714dee34bff.html)

まずは[新規MBView]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/7a067aa0-676f-3671-5ac1-42b22b91c6ae.png)

ファクトテーブルを選択し、売上データを読み込んできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/31427bdb-2c05-9fc4-ac2e-9eb7f6e60ca7.png)

同様にディメンションテーブルで店舗マスタ、担当者マスタ、分類マスタを読み込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/5c36d876-0c35-352e-6f39-6f35947895bb.png)

下図のように結合をしていきます。
今回は左外部結合をしています。
![test1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e254a1a0-f719-8be5-b517-8ff65f9fd5b5.gif)

あとは必要なデータにチェックを入れて、再生ボタンをクリックすると結合できているかがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/c3fb5255-333e-8b20-2a2d-ed58c709a3fc.png)

作成したMotionBoard Viewを指定して、集計表にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/d05d5568-95d9-ec77-4a29-37e03d3bf70c.png)






# メリット & デメリット
タイトルに難易度を書いているのですが、MotionBoard Viewは【難易度：高】としています。
その理由はメリデメが多いので、どう運用していくかをしっかり検討していかないとならないからです。
その内容について掘り下げていきましょう。

## メリット
### スノーフレーク型の結合ができる
MotionBoard Viewは下図のようにマスタからマスタへのJOINが可能です。
[売上データ→店舗マスタ→担当者マスタ]のような紐付け方ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/1ef26aa2-15e7-b478-da4c-07fc4782505e.png)

モデルだとこうはならず、[売上データ→店舗マスタ]、[売上データ→担当者マスタ]のような紐付け方までです。
２階層目までJOINさせることができません。
そのため[売上データ→店舗マスタ]でモデルAをつくり実体化させてから、[モデルA→担当者マスタ]のように紐付けたりします。
データが多重化されてしまうのがモデルのデメリットですね。

### データベースの設定を変えることなくビューがつくれる
こちらは情シスや現場など部門が複数ある場合に有効です。
MotionBoardのボードを作成している現場として、基幹システムのテーブルのデータを少し加工（結合）したいとしたとき、情報システム部門にお願いしてDBにビューをつくってもらう必要なく、MotionBoard Viewで自分でつくることができます。
現場の開発スピードがあがりますね。


## デメリット
### 自分のボードでしかつかえない
ぼくも最初誤解をしていました。
モデルと同じようにテナント全体でつかえるもんだろうと思っていました。
ボード単体でしかMotionBoard Viewはつかえないのですね。
インポート・エクスポートもないので、複雑なMB Viewをボードをまたいでつかいたい場合は、つくり直しするしかなさそうです。

### いろんな人が使いすぎると管理が追いつかなくなりそう
ボード単位でできてしまうMotionBoard View。
一覧で確認する術がありません。
どこにどのビューがあって何をしているかわからない・・・ちょっと管理が大変になります。

### レスポンスが・・・。
テンポラリクエリーでExcelやCSV、もしくは他のDBと結合させた時、なかなかレスポンスが出ないときがあります。
データベース層で行うべき結合をアプリケーション層で行っているので、難しい部分もありますが、結合対象はデータ件数が少ないものにすることをオススメします。


これらメリットデメリットを鑑みると、MoitonBoard Viewはよほどメリットを感じた時に、デメリットを深く理解しながら運用していくことが望ましいと思います。
そして、もしデータベース内で解決できるものであれば**データベース側で処理をした方がとっても良いです。**


# ちょっと運用を考える
なかなか使い方が難しいMotionBoard Viewですが、ぼくは以下の条件に合致する時にオススメします。
### DBの管理は情シス、ボード作成は現場の場合
ボード作成時に「こんな結合をしてほしい」とビューのオーダーをして、すぐにご対応いただけると良いのですが、システム管理の優先もありなかなかシステム部で作業をしてくれないかもしれません。
特にセルフサービスBIのようにすぐにボードを作って分析をしたい場合や、ビューをつくっては修正するというトライ＆エラーで思考していくときには、自分の判断でビューがいじれる方が開発効率が増します。
このような状況ではMotionBoard Viewがオススメです。

### リアルタイムが要求されてデータ件数が少ない時
こちらは先述したぼくの事例ですが、リアルタイムデータでかつデータ件数が多くない場合にはMotionBoard Viewは有効でしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/c32892e4-898b-4561-b624-c9c8fd1ac38d.png)

特にIoTのようにリアルタイム性が要求される場合の加工にMotionBoard Viewは重宝されるでしょう。


# さいごに
いかがでしたでしょうか。
MotionBoard Viewは計画的につかえば困ったことを解決する力を持っている機能です。
他の結合方法と合わせ、メリデメを検討した上で、つかっていきましょう。