【PowerBI】kintoneと直結させる方法

こんにちは。

先日、kintone+PowerBI連携について発見したことを、軽い気持ちでつぶやいたら、思っていたよりも反響があったので怖くなり、どういうことなのかを説明する記事です。

---
書き忘れていましたので、追記ですが、kintoneもPowerBIも無料で使えます。

kintoneはここから。

https://cybozu.dev/ja/kintone/developer-license/

PowerBI(Desktop)はここから。
https://aka.ms/pbidesktopstore

書き忘れはここまで。

追加。

R3さんの記事にもいいのがあった！　こちらもご確認ください。
https://www.r3it.com/blog/powerquery-to-kintone

---


実戦的な内容は

これとか
【Kintone Power BI Connector】
https://www.cdata.com/jp/drivers/kintone/powerbi/

これとかがあります
【Smart at tools for kintone BI接続】
https://kintone-sol.cybozu.co.jp/integrate/msol019.html

プログラマとしてはこのR3さんの記事が素晴らしく、Rも書けるので楽しいです。
https://www.r3it.com/blog/powerbi-with-r-script

このほかにも優れたいくつかの方法があります。
- DataSpider, AsteriaWarpなどでDBに放り込む
- cli-kintoneでローカルにCSV化して取り込む
- Access + cli-kintone
    - 簡易DBを作って同期（帳票も作れてわりと便利です）
- krewData + BOX
    - マウントしたディレクトリに同期したCSVから取り込む
- krewData + GoogleSpreadsheet
    - krewDataの外部入出力
- GoogleWorkspace単体
    - krewではなくGASでスプレッドシートに同期
    - Makeをつかって橋渡し
- APIを作る
    - AWS:APIGateway+Lambda
        - これを言ってしまうとAzureとかFirebaseもできてしまうので宇宙
- Node, PythonなどでShellを書く
    - これも宇宙ですね😅

やったことがある方法でもこのくらいあって、他にもいろいろ思いつくことができます。

実際に案件でやるなら、この中からお財布と相談してって感じ。

## 本題
見ていただくとわかるんですが、結局PowerBIが機能単体でkintoneにアクセスする方法はないんですよね。結局開発がちょっと入るというか。

さくっとPowerBI単体で接続できないかなって、いろいろいじっていました。

で、問題の手法について。これはコードを書く必要がないし、PowerBIの力をお手軽に感じられるのでいいかなって思っています。

それでは、作ってみましょう。

### kintoneの準備
アプリにアクセスするので、APIトークンを作成します。
アプリがない方は、適当に作ってください。

![スクリーンショット 2025-02-06 131238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/0af1b6ae-a417-e8f0-833b-22ef41a95d2c.png)

レコード閲覧権限があればいいです。更新したり削除したりはしないですもんね。

その後、アプリIDを控えておいてください。
https://support.kincone.com/hc/ja/articles/4411880749081-kintone%E9%80%A3%E6%90%BA-%E3%82%A2%E3%83%97%E3%83%AAID%E3%81%AE%E7%A2%BA%E8%AA%8D
アプリIDが何かわからない人は👆の記事が一番わかりやすいです。

ここまでで取得しているものは
- APIトークン
- アプリID
です。


### PowerBIの設定
PowerBI Desktopを開きます。
空のレポートで新規作成していきます。

リボンから、「データを取得＞その他＞Web」と選択します。
![スクリーンショット 2025-02-06 131614.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/dac76fca-e88a-a0b6-debd-b958a399fcd2.png)

#### point
kintoneの/k/v1/records.jsonというAPIを使います。
https://cybozu.dev/ja/kintone/docs/rest-api/records/get-records/

エンドポイントは
https://[あなたのドメイン]/k/v1/records.json?app=[アプリID]
となります。

https://[あなたのドメイン]/k/v1/records.json?app=[アプリID]&query=[クエリ]
でクエリを指定することもできます。

#### データソースの設定
「接続」ボタンを押下すると、下記のような設定になります。
![スクリーンショット 2025-02-06 172337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/0d8175a5-026f-3bde-32ba-63987875d9b6.png)

ここで、初期表示では「基本」になっていますが、「詳細設定」にします。

エンドポイントのURLを入れます。（2段になっているのは気分です😆）
クエリーパラメータ(?以降のパラメータ）に
app=アプリID
query=limit 500
を入れます。

意味としては、500件までとらせてください。といったところです。

HTTP要求ヘッダーパラメーターに
x-cybozu-api-tokenとして、アプリのAPIトークンを設定します。

そうして、「OK」を押す。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/03ea4345-f073-b3db-8d60-0c3207dbdd4f.png)

見事、kintoneのデータが取得できます。

よく見ると、recordsの内容をきれいに取得するDAXが、生成されているのが分かります。

その後、「閉じて適用」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/cad85544-d0c8-aaa7-6ab9-406605caec3d.png)

あとはいい感じにかっこいいグラフを作ります。

## 気になる制限事項

kintoneのAPIの取得制限にどうしてもかかってしまいます。
スクリプトで取得する場合はループして取るのですが、1発では難しい。

クエリにoffsetが使えるので、データソースを複数用意してDAXで結合すればそこそこの件数は行けると思います。offsetは外れても0件データになるだけなので。

（例えば「query=limit 500 offset 500」を指定してみる。）

あとは、最新データを取得する用途であれば、500件以内（あるいは頑張って設定したOffsetずらしのテーブル群のなか）に目標データが含まれていればいいので問題ありません。工場の日次のライン生産データとか。

## 直結のメリット
MicrosoftFabricなどにPublishしたときに、自動更新を設定できます。
![スクリーンショット 2025-02-06 174627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/e7b0b9e8-b878-cb77-bd8c-1bff1e3646e6.png)
こんな感じで発行して、クラウドへ持ち込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/ef47475f-9d63-b50c-dc87-2187bbd8fecf.png)
詳しくは説明しませんが、セマンティックモデルの更新を自動設定して。

# まとめ
- kintone-REST-APIを利用してデータの取得ができる
- PowerBIがいい感じにモデルを作ってくれる
- 500件しかとれない🫠 もっと取りたい人は、ちからわざ💪

ちょちょっと作ってさくっとレポートを作成するにはとっても楽ちんです。ドリルダウンとかも作れるし。
かっこいいグラフが作れると仕事ができる気分になれるので、みなさんも試してみてください。

案件でやるならcli-kintoneとか使って実行する覚悟は欲しいところです。

---
この記事は以上です。ありがとうございました。

https://www.pulsar-works.jp/

kintoneのプラグイン開発や研修などを行っています。
お仕事のお話はこちらまで。