Tableau Server: ブラウザの自動リロードによるビューの表示内容更新について

2015.10.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

秋葉原からこんにちは!しんやです。3週間の米国滞在から戻って参りました。米国滞在中は思い切ってヒゲを剃らずにいたのですが、伸ばしてみたヒゲの中に白髪が何本か混じっていたのを見て年齢を感じた今日この頃でした。

さて、当エントリは小ネタ&現状整理エントリです。

Tableau Serverではコンテンツをビューやダッシュボードとしてアップロード(Tableau用語では『Publish(パブリッシュ)』した後にコンテンツをブラウザ経由で表示閲覧する事が出来ますが、データソースの更新頻度とは別にブラウザ側をリロードさせたい、という要望が出てくる事はままあるかと思います。ブラウザ更新のタイミングでデータソース側も更新されていれば、そのタイミングで表示内容も変更されている、というイメージです。更新頻度やアクセス負荷の問題等、実運用に際しての懸案事項はあるかと思いますが、まぁそんな感じです。(ざっくり

コンテンツ上にある『自動更新』ボタンはブラウザを定期的にリロードするボタン...では無い

上記観点での実現案が何かあるかどうか、情報を漁って調べてみました。まず1つ出てくるのはビューそのものの上にある更新マークです。下記スクリーンショットにあるようなアイコン部分ですね。

tableau-server-auto-refresh_contents_01

tableau-server-auto-refresh_contents_02

これを使った設定値をどこかで変更すれば、思いのままにブラウザを操れるんじゃね?と思いましたが、こちらの設定項目はどうやら想定していたものとは異なるようです。以下が公式ドキュメントの関連リンク。

そしてドキュメント内のテキスト抜粋。Tableauでは要素を1つ動かしただけでデータソース側にクエリが都度都度走り、多くのビューやクイックフィルタを実装していた場合には操作時の負荷もエラい事になってしまいます。そう言った状況を回避するための機能になっているんですね。

サーバー上のビューを操作するとき、ビュー内のデータを更新するためにデータ ソースにクエリを送信する必要がある場合があります。大量のデータや大規模なデータ ソースがある密度の高いビューで作業している場合は、自動更新に長時間かかることがあります。いくつかの変更を行うときに各更新の完了を待たなくてもよいように、ツールバーの [自動更新の一時停止] をクリックできます。

上記で表示されている『データの更新』ボタンには、キャッシュをクリアした状態での内容を表示する機能があるようです。

データを更新するときに、存在している可能性があるすべてのキャッシュをクリアし、データ ソースから最新のデータを取得します。...(後略)

各種APIによる操作について

Tableau Serverで使えるコマンド『tabcmd』では、所定のURLを指定する事でキャッシュのクリアが行えるようです。裏でこのコマンドを適宜実行する事で所定のビューのキャッシュをクリアさせておく事は出来そうですが、get urlで更新したキャッシュをビューに表示するためには、何らかの方法で画面のリロードが必要となり、Tableau Server単体でビューの表示をリロードする術は現状無さそうです。ブラウザの『データを更新』ボタンを『ポチッとな』して内容を表示させる形で乗り切る感じですかね...。

Javascript APIでは以下のメソッドで要素を操作する事が可能となっています。状況によってはこのAPIを使って見るといいうのも手ですね。

Viz.refreshDataAsync() メソッド [データの更新] ツールバー ボタンのクリックに相当します。
Viz.revertAllAsync() メソッド [すべて元に戻す] ツールバー ボタンのクリックに相当します。これにより、ワークブックを最初の状態に復元します。

コンテンツ埋め込みによる形であれば、ブラウザの定期更新(リロード)は可能

当エントリでの要望を実現可能な1つの方法としては、当項で紹介する『コンテンツの埋め込み』によるものがあります。方法については以下の公式ドキュメントをご参考ください。

上記情報を参考にして作成したHTMLが以下。:embed=yes:refresh=yesをURLに組み込んでいます。

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN">
<html lang="en-US" xml:lang="en-US"> 
<head> 
<title>Embedded Tableau view Test</title> 
<meta http-equiv="refresh" content="30">
</head> 
<body> 
<iframe
  src="http://xxxxx.xxxx.xxxx/views/project-name/view-name?:embed=yes&:refresh=yes"
  width="700"
  height="500"> 
</body> 
</html>

表示サンプルが以下となります。30秒でブラウザのリロードが走り、併せてコンテンツの更新も行われる形になります。

tableau-server-auto-refresh_contents_03

上記サンプルはTableau Serverの共有URLから簡易的・サンプル的に作成したものになりますが、適切なセキュリティ配下での更新閲覧を行う場合は以下のエントリをご参照ください。

まとめ

Tableau Serverにおける『ブラウザの自動更新による結果の表示』についての情報整理エントリでした。冒頭書いた様に負荷状況が気になるところではありますが、Tableau Server側からのブラウザ自動リロード機能の様なものがあると場合によっては嬉しいかな、と思いました。我々の方で調べ切っていない部分があるかも知れませんので、その場合は改めて当エントリに追記する形で情報を反映させたいと思います。こちらからは以上です。