Garoonのスケジュール情報をGaroon REST APIとCDataDriversを使用してBIツールでビジュアライズ

# はじめに

本記事は、サイボウズ社のグループウェア製品である[サイボウズ ガルーン](https://garoon.cybozu.co.jp/)のスケジュールを、2018/5/13にリリースされたばかりの[Garoon REST API](https://developer.cybozu.io/hc/ja/articles/360000503306)を使い、[CData REST ODBC Driver](http://www.cdata.com/jp/drivers/rest/odbc/)経由で各BIツールでビジュアライズする手順についてご紹介します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f790a055-7266-dd32-5c27-e3619d30f11a.png)

# 前提条件

本記事では以下のサービスや製品を使用しています。

- [サイボウズ ガルーン](https://garoon.cybozu.co.jp/) ※評価版あり
- [CData REST ODBC Driver](http://www.cdata.com/jp/drivers/rest/odbc/) ※30日間の評価版あり
- [Tableau Desktop](https://www.tableau.com/ja-jp/products/desktop) ※無料トライアル版あり
- [QlikSense](https://www.qlik.com/ja-jp/products/qlik-sense) ※無料ダウンロード版あり
- [Power BI Desktop](https://powerbi.microsoft.com/ja-jp/desktop/) ※無料版あり

# 手順

## Garoon REST APIで利用するユーザー認証情報の準備

Garoon REST APIの仕様は[こちら](https://developer.cybozu.io/hc/ja/articles/360000503306#step1)からご覧いただけます。ユーザー認証には、パスワード認証を用います。下記のAPI仕様書の通り、「ログイン名:パスワード」をBASE64エンコードした文字列を準備します。準備した文字列は後の手順で利用するので手元に控えておきます。

>リクエストヘッダに「X-Cybozu-Authorization」を追加し、「ログイン名:パスワード」をBASE64エンコードしたものを値に指定します。
>`
>// ログイン名が「Administrator」、パスワードが「cybozu」の場合
>X-Cybozu-Authorization:QWRtaW5pc3RyYXRvcjpjeWJvenU=
>`

なお、BASE６４のデコードはWindowsマシンにて下記コマンドでエンコード済みの文字列を作成することができます。

```
certutil -f -encode "入力ファイル" "出力ファイル"
```


# Garoonのスキーマ定義ファイルの準備

続いて、Garoon REST APIをCData ODBC Drivers for RESTがSQLとして解釈できるように設定ファイルを作成します。

GaroonのスケジュールのAPIエンドポイントのデータを取得するための設定ファイルを作成していますので、以下のGitHubから保存して、利用してみてください。

https://github.com/kuwazzy/CDataGaroon/blob/master/garoon/ScheduleEvents.rsd

| WebAPIエンドポイント名 | ファイル名 | 備考 |
|:-----------------|:------------------|:------------------|
| 予定の取得（GET） | ScheduleEvents.rsd |  |

保存先フォルダは後ほど使用するので「C:\CData_REST\garoon」といった読み取り可能な任意のフォルダに配置してください。

# CData 製品のインストール、および、初期設定

[CData ODBC Drivers for REST](http://www.cdata.com/jp/odbc/) のビルドをダウンロードします。ダウンロードすると、インストールファイル（.exe）がダウンロードされます。インストーラーを起動してソフトウェア使用許諾契約書を確認してデフォルトのままインストールします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/fb56bb0e-f58b-136f-c5ef-c7ae6c2b9a7b.png)

（注意） オンラインアクティベーションのためインターネットへの接続が必要となります

インストールが完了すると、ODBCのDSN設定のウィンドウが立ち上がりますので以下の項目をセットします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/e6920b95-bb7b-e8eb-6145-7d7286105009.png)

| 項目 | 値 | 備考 |
|:-----------------|:------------------|:------------------|
| Custom Headers | X-Cybozu-Authorization:***** | *****部分は「ログイン名:パスワード」をBASE64エンコードしたもの |
| Location | C:\CData_REST\garoon | RSDファイル群のパス |
| Other | subdomain=**** | *****部分はサブドメインを指定 |

ODBCのDSN構成画面の「OK」ボタンをクリックして設定内容を保存して閉じます。

## Tableauからの接続確認

Tableau Desktopを起動して、データ接続より「サーバーへ」＞「詳細」＞「その他データベース（ODBC）」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/536d35fd-c5d5-413e-16de-4b6b46271f78.png)

「その他のデータベース（ODBC）」設定ウィンドウが開いたら、接続手段内のDSNから「CData REST Source」を選択して「サインイン」します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/7d091749-a0a1-cffa-ef8b-6f8153a41a8b.png)

「データソース」画面が開くので、左側のペインで、表「ScheduleEvents(REST.ScheduleEvents)」を選択して、右上のエリアにドラッグ＆ドロップします。抽出を行い、右下のデータプレビューにGaroonの自身のスケジュール一覧が表示されることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f2f411aa-964e-18f2-908e-500a179c61c7.png)

以下の各スケジュールの時間を取得する計算項目（hours）を追加します。

```
DATEDIFF('hour',[start_dateTime],[end_dateTime])
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/48fe30ae-1b38-088d-848a-9df50b17c619.png)

接続をライブから抽出に変更して抽出を作成してください。抽出結果の作成した計算項目（hours）にスケジュールの時間が計算されていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/9153f091-91cc-5c02-b531-a8d558af75b5.png)

「シート」ページに移動して、グラフや表を追加します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/b5dcc2f8-9e0f-3d42-a02f-e4ec3bb30425.png)

今回は、以下３つのシートを作成してダッシュボードとして並べて表示してみました。

- 円グラフ　：　色：eventMenu、ラベル：eventMenu、メジャー：合計(hours)
- 水平棒グラフ：　色：eventMenu、列：合計（hours）、行：subject
- 積み上げ棒グラフ　：　色：eventMenu、列：日（start_datetime）、行：合計（hours）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8afc5656-f8b5-b7c3-288d-bb28d2330acb.png)


## QlikSenceからの接続確認

QlikSence Desktopを起動して、「アプリの新規作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/f7268226-daa4-8909-11d6-478abca7ba94.png)

「データの追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/3d8b6be3-a092-2e22-9833-f821ec7b2fb2.png)

「ODBC」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/910763ec-a3a5-9eb2-ff55-230f24ee325b.png)

「CData REST Sources」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/d96cdee2-3208-6710-af29-03cef8af0325.png)

テーブル「ScheduleEvents」を選択してデータプレビューにGaroonの自身のスケジュール一覧が表示されることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/74a880cd-3ad8-90fb-ac2d-399240c31fb9.png)

「シート」を追加して、チャートを追加します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/350c62c1-1e73-8fa5-09de-95d85def1eb6.png)

今回は、以下のオブジェクトを作成して表示してみました。

- 円グラフ　：　軸：eventMenu、メジャー：数式（Sum(end_dateTime - start_dateTime)）
- 水平棒グラフ：　軸：subject、メジャー：合計（Sum(end_dateTime - start_dateTime)）、ラベル色：eventMenu、
- 積み上げ棒グラフ　：　軸：start_datetime、eventMenu、メジャー：合計（Sum(end_dateTime - start_dateTime)）、ラベル色：eventMenu

※数式の設定例
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/3a1cae42-97f1-3902-5ad1-f28ba573856b.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/91946967-c2ce-d068-2ed8-cf9665abf29f.png)


## PowerBIからの接続確認

PowerBI Desktopを起動して、「Get Data」から「Other」＞「ODBC」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/08a3446e-bd58-9815-d8c4-dce9272c3a25.png)

「Data source name(DSN)」で「CData REST Source」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/8ce9a31d-42e9-a2ec-789a-6fe4a837fce1.png)

「Navigator」にてテーブル「ScheduleEvents」を選択してデータプレビューにGaroonの自身のスケジュール一覧が表示されることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/0634069d-3654-8572-7e34-ab57f162498d.png)

「Page」を追加して、クエリの編集ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/2b898bdb-caa3-7a55-7258-90d38f07b9b0.png)

以下のカスタム列を追加して適用してクエリ編集を閉じます。

```
hours = [end_dateTime]-[start_dateTime]
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/063947b2-8bed-8f51-c5ea-801125e5998f.png)

チャートを追加します。今回は、以下３つのオブジェクトを作成してダッシュボードとして並べて表示してみました。

- 円グラフ　：　凡例：eventMenu、値：hours
- 水平棒グラフ：　軸：subject、凡例：eventMenu、値：hours
- 積み上げ棒グラフ　：　軸：start_datetime（日までドリルダウン）、凡例：eventMenu、値：hours

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/3765ba52-9d49-6279-1834-d44c3749905a.png)


# まとめ

Garoon内の自身の案件状況の一覧をREST API経由でCData REST ODBC Driverを使用して各BIツールからビジュアライズする手順について説明しました。本記事で必要な各サービスおよび製品は無償版や評価版が用意されているので是非お試しください。