kintoneデータをビジネスインテリジェンス(BI)で活用する方法まとめ

# はじめに

こんにちは、 @kuwazzy です。この記事では、[kintone Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kintone) 11日目の投稿です。本記事では、[kintone](https://kintone.cybozu.co.jp/)のデータをビジネスインテリジェンス（略してBI）で活用する方法をご紹介します。

kintoneは、チームや社内外で共有するデータが一元的に管理できるWeb型データベースです。kintoneを上手に活用している組織であれば、ビジネスや組織内外の重要なデータがkintoneに集まります。一方で、ビジネスインテリジェンス（略してBI）は「企業などの組織のデータを、収集・蓄積・分析・報告することにより、経営上などの意思決定に役立てる手法や技術のこと（Wikipedia より）」です。本記事では、kintoneのデータをBIで活用するにはどのような方法があるのか、BIから利用時に留意すべきポイントについてまとめてみました。それでは、さっそく活用方法についてみていきましょう。

# kintoneのデータをBIで活用する方法

## まずは、kintone標準の集計＆グラフ機能を使ってみよう！

kintoneには、標準でアプリ内のレコードを集計してグラフとして保存できる機能が標準であります。

[kintone ヘルプ > ユーザーヘルプ > アプリの設定 > グラフの設定 > 集計機能とグラフ機能](https://jp.cybozu.help/k/ja/user/app_settings/report/diff_repot.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/b0794bac-11ca-16d5-c00d-dc0a865facad.png)
このkintoneの標準機能を利用することで、kintoneのデータを集計して傾向（トレンド）や内訳を把握することができます。さらに、kintoneのアプリを参照できる人であればこのデータを共有することもできます。グラフの種類も棒・折線・面・円・表・クロス集計と基本的なものが揃っております。

[kintone ヘルプ > ユーザーヘルプ > アプリの設定 > グラフの設定 > グラフの種類と使い分け](https://jp.cybozu.help/k/ja/user/app_settings/report/graph_type.html)

絞り込み条件やソート項目といった機能もありますのでアプリ内のデータを俯瞰して把握するにはこの機能で十分というユースケースも多いでしょう。さらに作成したグラフは、ポータルにスペースやスレッドの本文にペタッと貼り付けることでダッシュボード的にデータを共有することもできます。

[kintone ヘルプ ユーザーヘルプ スペース スペースの操作 スペースやスレッドにアプリを貼り付ける](https://jp.cybozu.help/k/ja/user/space/using_space/paste_app.html)

kintoneのライセンスを持っていて追加コスト無く、アプリにアクセスできる権限があれば同一ブラウザ上で表示切り替えだけでみることができるのも魅力です。

【特徴】 kintone標準の集計＆グラフ機能

- **kintoneのアプリ（ブラウザ）内**でレコードを集計したグラフを表示できる。
- kintoneのライセンスを持っていれば**追加コスト不要**。
- グラフの出力条件は保存して**ポータル画面**でもみることができる。

## より高度なグラフ表現にはプラグインやUIコンポーネントを使ってみよう！

kintone標準機能のグラフだと実現が難しい以下のようなケースもあると思います。

- 複合グラフや散布図、レーダーチャートといったkintoneの標準グラフにはないタイプのグラフ
- ドリルダウン、スライサーとったOLAP（切り口を色々変えてみる）的な分析

そんな場合は、kintoneの連携サービスベンダが提供しているプラグインやUIコンポーネントの活用を検討してはいかがでしょうか？ 代表的なプラグイン・UIコンポーネント製品をご紹介します。

- [グレープシティ株式会社のkrewDashboard](https://krew.grapecity.com/products/krewdashboard.htm)
- [インフラジスティックス・ジャパン株式会社のIgniteUI](https://jp.infragistics.com/kintone-igniteui)

これらの製品では、kintoneの標準機能では準備されていない専用のBIツール並の様々なグラフや分析のためのパーツ（スライサーやドリルダウンなど）が準備されています。また、製品によっては、作成したダッシュボードをPDFや画像にエクスポートする機能やExcelライクなインタフェースも同時に利用できたりすることも魅力です。

<グレープシティ株式会社 Webサイトのダッシュボードサンプル>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/8b837c7f-7e49-cfd9-7a2f-4cfa0f5a7675.png)


【特徴】 プラグインやUIコンポーネントの利用

- **kintoneのアプリ（ブラウザ）内**でレコードを集計したグラフを表示できる。 ※標準機能と一緒
- 複合グラフや散布図、レーダーチャートといったkintoneの標準グラフにはない**多くの種類のグラフ**を利用できる
- **ドリルダウン、スライサー**とったOLAP（切り口を色々変えてみる）的な分析ができる。
- kintoneのライセンスに加えて、**プラグインやUIコンポーネント製品のライセンス費用**が必要。

## 使い慣れているBIツールでkintoneのデータを活用できないのか？

すでに社内で導入しているBIツールがある、kintoneだけでなく基幹システムや他の業務アプリケーションのデータと組み合わせてデータを活用したい、という場合もあると思います。この場合は、kintoneだけでは完結せず、データ連携の仕組みが必要となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/501f05df-e9b5-725c-aff1-25763f84bcd1.png)

それでは、そのデータ連携の仕組みとはどのようなものがあるのかみていきましょう。

### 手動でCSV連携

まずは、kintoneのアプリの「ファイルに書き出し」機能を使用してアプリのレコードデータをCSVファイルに出力して、そのCSVファイルをBIツールのCSVファイル取り込み機能でインポートする方法です。どのようなBIツールでもCSVファイルのインポート機能は（私の知っている限り）標準で備わっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/b99ee73f-e71b-93fc-fe35-925952d8a95e.png)

月に一回、月末に手作業でデータを取り込み、ぐらいの運用で負担にならなければこの方法でも良いと思います。また、RPAツールを使って手作業の部分を自動化することも出来るでしょう。

【特徴】 BIツールに手動でCSV連携

- BIツールの**標準機能**でデータを取り込み可能
- **手作業**でデータ連携
- kintoneと**BIツールのライセンス**が必要 ※OSSや無償製品もあり

### BIツール側の機能で連携

BIツール側の標準やオプション機能としてkintoneのデータ取り込み機能が提供されているBI製品もあります。それらの製品では、アドホック（要求に応じて）最新のデータでダッシュボードや分析レポートを参照することが出来たり、任意のタイミングでデータを最新化することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/cc8d492b-d111-1e04-afca-f8fd93d7cb35.png)

kintoneデータを取り込める代表的なBIツールとしては、ウイングアーク１ｓｔ株式会社の[MotionBoard](https://www.wingarc.com/product/motionboard/)などがあります。

【特徴】 BIツール側の機能で連携

- データ取り込みを**自動化**することが可能
- **最新のkintoneデータ**にアクセス可能
- kintoneと**BIツールのライセンス**が必要

### BIツール＋データドライバー製品で連携

多くのBIツールは、標準ではkintoneのデータを取り込む機能は持っていませんが、ODBC/JDBC DriverといったRDBMSのデータを取り込む標準規格のインタフェースを持っています。私の所属するCData Softwareでは、kintoneデータにSQLでアクセスできる[ODBC/JDBC Driver](https://www.cdata.com/jp/drivers/kintone/)を開発・販売しています。このDriver製品をBIツール側の環境に追加で配置することで、BIツール側からはMySQLやSQLServerといったデータベースにアクセスするのと同じ方法でkintoneデータを取り込むことができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/330e041b-25d4-a8b8-90cd-48a39131806d.png)

また、Driver技術を組み込んだ[Microsoft社のPower BI](https://powerbi.microsoft.com/ja-jp/)や[Tableau](https://www.tableau.com/ja-jp)といった主要なBIツールの専用コネクターもありますので、これらのBIツールを利用している場合は是非ご活用ください。

- [kintone Power BI Connector](https://www.cdata.com/jp/drivers/kintone/powerbi/)
- [kintone Tableau Connector](https://www.cdata.com/jp/drivers/kintone/tableau/)

この方法を利用すれば大抵のBIツールからkintoneのデータにアクセスできるようになります。主要なBIツールからの連携方法は以下のリンクにまとまっていますのでご参照ください。

- [主要な BI & アナリティクススツールからの連携リンク集](https://www.cdata.com/jp/drivers/kintone/#section-bi-anchor)

【特徴】 BIツール＋データドライバー製品で連携

- **kintone接続ができないBIツール**でも取り込み可能
- データ取り込みを**自動化**することが可能
- **最新のkintoneデータ**にアクセス可能
- kintoneとBIツールに加えて**Driver製品のライセンス**が必要

### データベース経由でBIツールに連携

最後にご紹介するのは、kintoneのデータを一度、BIツールの標準機能で接続できるMySQLやSQLServerなどのデータベースに格納する方式です。この方式は、データ連携用のETL/EAI/iPaaSといった製品やサービス、そして、データをストアするデータベースが必要となります。基幹系システムやkintone以外の業務アプリケーションのデータをデータベースに一緒に格納することで、システムを跨ったデータの可視化や分析が可能になったり、BIツールからは、kintoneのデータ（API）にアクセスしないため、kintoneのREST APIの使用量を抑えることができる、といったメリットがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/961f378b-4ed6-88ef-a999-0c3e7f83b6df.png)

代表的なデータ連携製品には以下のようなものがあります。これらのデータ連携製品は、kintoneと主要なデータベースのコネクタを標準で装備しているため、kintoneのデータをデータベースに格納するバッチ処理を作成することが出来ます。

- [アステリア株式会社のAsteria WARP](https://www.asteria.com/jp/warp/)
- [株式会社セゾン情報システムズのDataSpider Servista](https://www.hulft.com/software/dataspider)
- [日商エレクトロニクス株式会社のPolarisGate](https://www.nissho-ele.co.jp/solution/polarisgate/index.html)
- [ＪＢアドバンスト・テクノロジー株式会社のQanat](https://www.jbat.co.jp/products/data/qanat_20/index.html/)
- [株式会社スリーシェイクのreckoner](https://reckoner.io/)
- [株式会社primeNumberのtrocco](https://trocco.io/lp/index.html)
- [グレープシティ株式会社のKrewData](https://krew.grapecity.com/products/krewdata.htm) ※kintoneのアプリをDBとして利用
- [M-SOLUTIONS株式会社のSmart at tools for kintone BI接続](https://smartat.jp/tools/)
- [CData Software合同会社 のCData Sync](cdata.com/jp/sync/)

データベースは、以下のようなリレーショナルデータベース（略してRDB）のソフトウェアであれば、ほとんどの上記データ連携製品、および、BIツールがサポートしています。

- [Microsoft SQLServer](https://www.microsoft.com/ja-jp/sql-server/sql-server-2019)
- [Oracle Database](https://www.oracle.com/jp/database/)
- [MySQL](https://www.mysql.com/jp/)
- [PostgreSQL](https://www.postgresql.org/)
- [DB2 Database](https://www.ibm.com/jp-ja/products/db2-database)

なお、[Google DataPortal](https://developers.google.com/datastudio?hl=ja)や[AmazonのQickSight](https://aws.amazon.com/jp/quicksight/)といったSaaS型のBIツールの場合には、PaaSとして提供されるクラウド上のデータベースを標準でサポートしていますので下記のようなデータベースサービスを利用すると良いでしょう。

- [Google BigQuery](https://cloud.google.com/bigquery)
- [Google Cloud SQL](https://cloud.google.com/sql/)
- [Amazon Redshift](https://aws.amazon.com/jp/redshift/)
- [Amazon Relational Database Service (RDS)](https://aws.amazon.com/jp/rds/)
- [Snowflake](https://www.snowflake.com/?lang=ja)

【特徴】 データベース経由でBIツールに連携

- **データ連携システム**、および、**データベース**が必要
- BIツール側は**標準のDB接続機能**を利用
- データ取り込みを**自動化**することが可能
- 最新データではなく**前回のデータベースへの取り込み時点**のkintoneデータへのアクセスとなる
- kintoneと基幹システムのデータの組み合わせなど、**システム跨ぎ**のデータ可視化や分析が可能
- kintoneの**API使用量**を抑えることが可能
- kintoneとBIツールに加えて、**データ連携製品、および、データベースのライセンス**が必要

## まだある! ユニークな連携方法

上記でご紹介した方法の他に[トヨクモ株式会社のkViewer](https://kv.kintoneapp.com/)というサービスがあります。kViewerはkintoneの情報をアカウントを持っていない人に対して公開することができるサービスとして多くのkintoneユーザが利用しているサービスです。最近、kintoneで管理するあらゆるデータやグラフを、1つの画面で集約、分析が可能となり、データの視覚化を実現する「ダッシュボード機能」を追加されたようです。こちらの[ブログ記事](https://kintoneapp.com/blog/dashboard_view/)にダッシュボードを作る手順が公開されておりましたのでご興味のある方はご覧ください。

# kintoneとRDB何が違う？

多くのBIツールは、MySQLやSQLServer、Oracleのようなリレーショナルデータベース（略してRDB）をデータソースに利用することを前提としています。BIツールからみたときに、RDBとkintoneでは何が違うのでしょうか？RDBとkintoneの関係を比較してみました。

| カテゴリ | RDB | kintone |
|-----------|------------|------------|
| オブジェクト | データベースインスタンス | サブドメイン |
|      | テーブル | アプリ |
|      | カラム、アトリビュート | フィールド |
|      | レコード | レコード |
| クエリー | SQL (SELECT / INSERT / UPDATE / DELETE) | REST API (GET / POST / PUT / DELETE) |
| キー | 主キー | レコード番号（※別に業務キーがあるとベター） |
|  | 外部参照キー | 無し（あえて言うとルックアップ参照項目） |

実際のkintoneとRDBのデータ構造のイメージは下記図のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/f42147d5-7d31-f973-1f2d-fad105178be4.png)

kintoneは、Webデータベースのため、データへのアクセスは、SQLの代わりにREST APIとなりますが、他のデータ構造は読み方が異なるだけで比較的似たような構造と言えます。ちなみに、上段の[BIツール＋データドライバー製品で連携](#biツールデータドライバー製品で連携)の章でご紹介した[CData社のODBC/JDBC Driver製品](https://www.cdata.com/jp/drivers/kintone/)は、kintoneのデータにSQLでアクセス出来るようにした製品です。

# 注意すべきポイントや活用ノウハウ

kintoneのデータをBIで活用するときに、注意すべきポイントや、事前に知っているとデータ活用時に便利なノウハウがあります。

## 500件以上の取得

BIツールによっては、Web APIのデータを取得する機能(Webデータコネクタ、RESTコネクタなど)が提供されているものもあります。これらの機能を使うとkintoneのREST APIのレコード取得APIを通じてデータを取得することも出来ますが、REST API([レコードの取得(GET)](https://developer.cybozu.io/hc/ja/articles/202331474)、および、[レコードの一括取得](https://developer.cybozu.io/hc/ja/articles/360029152012))で一度に取得できるレコードは500件までです。それ以上のレコードを取得するには、offsetを指定したり、次のカーソルを呼び出したり、レコードがなくなるまで繰り返しの処理が必要となります。

## 1万件以上の取得

2020/07のkintoneの定期メンテナンス以降、[レコードの取得(GET)](https://developer.cybozu.io/hc/ja/articles/202331474) APIを利用している場合には、offsetの上限が10,000までに制限されました。そのため、1万件以上のデータを取得しようとするとエラーとなります。詳細はサイボウズ社の[こちらのお知らせ](https://cs.cybozu.co.jp/2019/006924.html)をご覧ください。その代替のAPIとして、2019/07にカーソルAPIという新しいデータ取得のAPIが追加されています。[カーソルAPI](https://developer.cybozu.io/hc/ja/articles/360029152012)については[developer network カーソル API を使ってレコードを一括取得する のページ](https://developer.cybozu.io/hc/ja/articles/360028843531-%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB-API-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E4%B8%80%E6%8B%AC%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B)に詳細な説明がありますので併せてご覧ください。


上記でご説明したBIツールに連携する様々な方法で利用する製品（BI、データドライバー、データ連携製品）がこれらの制約を考慮しているかを注意する必要があります。offsetの上限値制限に伴うプラグイン・連携サービスの対応状況については、[こちらのページ](https://viewer.kintoneapp.com/public/1bf18d5479b91fde5e5cff784851ae3c9510fd7887a4a81ae9a891bb44f92565#/)から最新状況を確認出来るようです。

## （サブ）テーブルからのデータ取得

（サブ）テーブルとは、フィールドを配置して1行にまとめたものです。kintone上はテーブル（表）と呼びますが、データベースのテーブル（表）とは異なる概念となりますので、ここではサブテーブルと呼びます。

[kintoneヘルプ - テーブル](https://jp.cybozu.help/k/ja/glossary/table.html)

例えば、以下のような旅費の明細のような情報です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/a90e35f0-1ed0-46b1-135f-5cb861f52997.png)

このサブテーブルを含めてkintoneからCSVファイル出力すると、下記のように、レコード部分（緑）が繰り返しで出力されます。このデータ構造でレコード内の精算金額を集計すると誤った金額（サブテーブルのレコード数分を掛けた金額）となってしまいますので注意が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/f0af9ff0-642e-3025-9810-195ced4d20c9.png)


ですので、BIツールやDWHなどでデータモデルを作成する場合、サブテーブルが含まれるアプリについては、レコード用のテーブルとサブテーブル用のテーブルにエンティティを分けて管理する方がベターです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/30f962de-bbd0-ccd0-081e-23d2811ecf5e.png)

## アプリ間の結合（JOIN）

kintoneのREST API（レコード取得API、カーソルAPIともに）は、アプリ単位でのみの取得です。そのため、REST APIの1回のAPIリクエストで複数アプリからデータを取得することは出来ません。また、別々のAPIリクエストやCSVダウンロードで複数のアプリのデータを取得して、取得した後にExcelのVLOOKUP関数を使ったり、取り込んだ後のツールでデータを結合したい場合に、元のアプリにリレーションシップのキーとなる項目を持っていないと紐つけ出来ません。アプリ間のデータを結合するには、元のアプリ設計時に紐つけのキー項目を保持しておくことをお勧めします。例えば、kintoneのサンプルアプリの営業支援パックの例でみてみましょう。営業支援パックには、顧客管理・案件管理・活動履歴と3つのアプリが含まれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/28060eb9-b15a-a517-aba4-d2c1379b98f3.png)

このサンプルアプリでは、「顧客管理(1)と案件管理(n)」「案件管理(1)と活動履歴(n)」、さらに「顧客管理(1)と活動履歴(n)」のレコードを紐つけ出来るように「{アプリ名}レコード番号（関連レコード一覧紐付け用）」という項目を保持しています。それによって以下のカーディナリティのデータモデルを作成出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/b1997aed-50c7-b38f-bf3f-5534346044b7.png)

この項目はアプリ定義のルックアップの設定で実装されています。「案件管理（営業支援パック）」では顧客名を取得するときに「顧客管理レコード番号（関連レコード一覧紐付け用）」という項目に「顧客管理（営業支援パック）」のレコード番号が自動でセットされるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/caba3998-dd20-120c-22e6-e02c31450f30.png)

この工夫によって、案件管理の受注予定金額を顧客管理の属性で集計するといった複数アプリ間の集計が可能となります。

## スナップショットデータの比較・分析

kintoneのデータは、いわゆるOLTP型（と最近も言うのでしょうかね...?）、データは最新のものだけを保持しています。厳密にいうと、変更履歴という機能があり、項目レベルでどの時点で何から何に変更されたかは保持しておりますが。この最新のデータから作成出来るグラフは、あくまで最新の情報だけです。以下は、案件管理のプラン費用の金額の棒グラフですが、この金額（本例では、16,200,000）は、現時点の金額です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/4629841b-6b8a-9c55-3628-409cfaa80a26.png)

しかし、月次の進捗状況を比較して管理したい、といったビジネスケースもあると思います。作成したいのは、以下のようなグラフです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/314116ac-6cad-37dc-32ce-a233a7a2d8dd.png)

このグラフを作成するには以下のような月末断面のスナップショットデータを蓄積しておく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/abe6e296-64d1-1fa3-99d3-6f9d27231246.png)

この課題を解決するのが、上記の[データベース経由でBIツールに連携](#データベース経由でbiツールに連携)する方法です。データ連携ツールで月末にkintoneから取得したデータをデータベースに追加するデータパイプラインを作成することで上記のようなデータ蓄積、スナップショット間の比較・分析が可能となります。

# まとめ

本記事では、kintoneのデータをBIで活用するにはどのような方法があるのか、BIから利用時に留意すべきポイントについてまとめてみました。kintoneのエコシステムとしてプラグインや外部サービス連携の様々な製品やサービスがあるので、ユースケースや社内環境にフィットした方法を選択することができると思います。本記事が、kintoneのデータ活用を考えている方の少しでも役に立てたのであれば幸いです。読んだよ！という方は「LGTM」ボタンをポチりくださいませ（笑）