TableauによるプリザンターAPI接続
本記事では、Tableauと国産オープンソースのWebデータベース「プリザンター」とのAPI連携についてご紹介していきたいと思います。
API連携
Tableauは、各種データストレージ・システムとの連携機能を提供しており、そのうちの一つにWDC(Web Data Connector)と呼ばれる、Web上のデータを取り込むフレームワークがあります。
一方、Webデータベースであるプリザンターは、内部レコードの操作を可能とするAPI機能を提供しています。
そこでここでは、AmazonEC2上に配置したプリザンターから、Tableauにデータを取り込むAPI連携の例を取り上げたいと思います。
なお、記事執筆(動作確認)時のバージョンは以下の通りです。
【Tableau Desktop】2018.1.1
【プリザンター】0.48.15
データ
サンプル・データ
今回はサンプル・データとして、「1世帯当たり1か月間の収入と支出(勤労者世帯)」(図表1参照)を加工したデータを用いました。

データの格納
プリザンターへのデータ格納は、記録テーブル機能を用いました(図表2参照)。
プリザンターのテーブルの設定やデータのインポートについては、本家サイトに詳細な説明がありますので、そちらをご参照ください。

プリザンターからのデータ取得
概念図
WDCのフレームワークを通して、Tableauがプリザンターからデータを取得する大まかな流れは、以下のようになります(図表3参照)。
- WDCサーバ*)からスクリプトを取得
- プリザンターサーバからAPI経由にてデータを取得
*) WDCサーバに必要とされる機能は、javascriptを含むhtmlファイルの受け渡し機能のみとなるため、PC内に立ち上げた簡易なlocalサーバでも構いません。

サンプル・コード
収入データ取得コードと支出データ取得コードは、個別のコードとなります。
APIキー等の設定箇所
/*** Pleasanter API Key ***/
var pleasanterApiKey = '***';
/*** Server Name (ip) ***/
var serverName = '*.*.*.*';
/*** Target Resource(Table) ID ***/
var resourceId = '***'; // SiteId
年度毎の支出データ要求箇所
/*** Json Data for POST Request ***/
var jsonData = {
"ApiKey": pleasanterApiKey,
"Offset": 0,
"View": {
"ColumnFilterHash": {
"ClassA": yearArray[i],
"ClassB": "支出"
}
}
};
var xhr = $.ajax({
type: 'POST',
url: 'http://' + serverName + '/pleasanter/api_items/' + resourceId + '/get',
dataType: 'json',
contentType: 'application/x-www-form-urlencoded; charset=utf-8',
data: JSON.stringify(jsonData),
async: false
}).done(function(resp, textStatus) {
for(j = 0; j < resp.Response.TotalCount; j++){
tableData.push({
"ClassA": $(resp.Response.Data)[j].ClassA, // 年度
"ClassB": $(resp.Response.Data)[j].ClassB, // 収支区分
"ClassC": $(resp.Response.Data)[j].ClassC, // 項目
"NumA": $(resp.Response.Data)[j].NumA // 金額(円)
});
}
}).fail(function() {
tableau.abortWithError('An error has occured while trying to connect to Pleasanter API.');
});
sleep(1000);
*) リクエスト間隔をあけるために単純なループ処理を入れておりますが、HTTPは非同期なレスポンスを返すため、処理順序を保つ仕組みの導入が望まれます。
見える化
以下は、API経由で取得した「1世帯当たり1か月間の収入と支出」データを見える化したサンプルとなります。
【操作】
・「収入項目」フィルター:択一形式で収入項目を選択できます。
・「支出項目」フィルター:択一形式で支出項目を選択できます。