# 概要
Google FusionTablesとGoogleのChart APIを利用して社内(個人)用BI ダッシュボードを作る。
# TL;DR
Google FusionTablesとGoogleのChart APIを利用して社内(個人)用BI ダッシュボードを作る。
# TL;DR
* 全くオススメできない。可能か不可能かで言えば可能というだけ。
* FusionTablesとChart APIの組み合わせのオフィシャルドキュメントはFusionTablesのPublic Dataしか利用出来ないので社内データには利用出来ない。
* Google Apps Scriptを利用してウェブページを生成することで解決可能。ウェブページ生成のオフィシャルドキュメントはこの辺。
* FusionTablesとChart APIの組み合わせのオフィシャルドキュメントはFusionTablesのPublic Dataしか利用出来ないので社内データには利用出来ない。
* Google Apps Scriptを利用してウェブページを生成することで解決可能。ウェブページ生成のオフィシャルドキュメントはこの辺。
# 一応作ってみた
HTMLのデザインなどなどはテキトー
# Google Drive内でウェブページを生成する
## Code.gs
function doGet(e) { var template = HtmlService.createTemplateFromFile('index'); return template.evaluate() .setTitle('stats') .setSandboxMode(HtmlService.SandboxMode.IFRAME); } function fTables1(){ var tableId = ''; var sql = "SELECT * FROM " + tableId; var res = FusionTables.Query.sql(sql); return res.rows; }
## index.html
codeを実行する部分だけ抜粋。
<head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load('current', {'packages':['line']}); google.charts.setOnLoadCallback(drawChart); function drawChart(){ google.script.run.withSuccessHandler(contentGetWeek).fTables1(); } function contentGetWeek(data){ var chartData = new google.visualization.DataTable(); chartData.addColumn('string', 'date'); chartData.addColumn('number', 'Performance'); chartData.addRows(data); var options = { width: 900, height: 500, legend: {position:'none'} }; var chart = new google.charts.Line(document.getElementById('line_top_week')); chart.draw(chartData, options); } </head> <body> <div id="line_top_week"></div> </body>
仕組みとしては…
ウェブページ(index.html)を開いたタイミングでCode.gsのfTables1を実行し指定のFusionTablesからデータを取得する。そのデータをindex.html側で受け取ってチャートを描画しているだけです。
Code.gsの実行は最初
google.script.run.fTables1()
で書いていたのですが、データ取得が成功したらcontentGetWeek関数を実行するという書き方に変更しました。
実はコレ。ほぼ完成したソースだけど、もうひと手間必要。
# !落とし穴!
* 現在この方法で取得するFusionTablesのレスポンスデータは全て文字列で返ってくる
これ以外にも色々ツッコミどころは満載な訳ですが、コレほど腐った仕様も無いよなーと思いながら、実現するためにはデータでチャート化したい部分をIntなどに無理やり変換しなければならない…
# 終わりに
Google FusionTablesとか、ここまで放置されているサービスということはそのうちサービス終了するんだろうなーと思ってガクブルしているw
Spreadsheetに入り切らない大き目の数値データをゴロゴロ保管しているので。
ここまでするんだったら別のやり方あるよね!という意見は正しい。
でもまぁ、今ある資源だけでサクッと作れるんだったらそれでも良いよね。
0 コメント:
コメントを投稿