Tableau 10 新機能 : JavaScript API の改善 #tableau

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

Tableau 10 新機能紹介シリーズ、当エントリは『JavaScript API improvements』に関する、正式リリース前の先取り内容紹介となります。Tableau Public では、新規に追加された 10.0 系のメソッドやクラスが既に使用できるようになっているので、使用方法とサンプルを紹介します。

tableau10-comming-soon_00

Tableau JavaScript ライブラリの取得 ( 参照 )

Tableau Public で動作確認ができる…ということで、現行のライブラリは下記から取得することができます。いつの間にか tableau-2.js が 10.0 系の API を使用することができる tableau-2.1.0.js を読み込むようになっていました。( 2016 年 6 月 14 日時点の最新 )

https://public.tableau.com/javascripts/api/tableau-2.js
https://public.tableau.com/javascripts/api/tableau-2.1.0.js

リファレンス

現在、英語版のみ 10.0 系のリファレンスが用意されています。
http://onlinehelp.tableau.com/v10.0/api/js_api/en-us/JavaScriptAPI/js_api_ref.htm

Sheet クラスの新 API

Sheet クラスgetSummaryDataAsync(), getUnderlyingDataAsync() メソッドが追加されました。これらのメソッドは、Tableau Desktop の データの表示 機能で取得できるサマリー データと参照元データを Web 上の Tableau ビューから取得する API です。

Tableau Desktop 「データの表示」

メソッド名 戻り値 詳細
getSummaryDataAsync(options) Promise<DataTable> 現在表示されているシートで使用されているフィールドのサマリー データを Promise オブジェクトを介して返す
getUnderlyingDataAsync(options) Promise<DataTable> 現在表示されているシートで使用されているフィールドの参照元データを Promise オブジェクトを介して返す

メソッドのオプション

前述の各メソッドのオプション (options) のパラメータは以下のとおりです。

プロパティ名 詳細
maxRows number 取得レコード数 ( 0 の場合は全件取得 )
ignoreAliases boolean 「別名を表示」を無視 する / しない を示すブール値
ignoreSelection boolean ビュー内グラフの選択状態を する / しない を示すブール値
includeAllColumns boolean 「すべてのフィールドを表示」の ON/OFF を示すブール値

実装例

var options = {
  'maxRows'           : 10,    // 表示行数 ( 0 === ALL )
  'ignoreAliases'     : false, // 「別名を表示」  無視する / 無視しない
  'ignoreSelection'   : true,  // ビュー内グラフの選択状態を 無視する / 無視しない
  'includeAllColumns' : false  // 「すべてのフィールドを表示」 ON/OFF
};

workbook = viz.getWorkbook();

activeSheet = workbook.getActiveSheet();

var onSuccess = function(dataTable) {
  //TODO:
};

var onFault = function() {
  //TODO:
};

activeSheet
  // .getSummaryDataAsync(options) //「サマリー」データ取得
  .getUnderlyingDataAsync(options) //「参照元」データ取得
  .then(onSuccess, onFault);

DataTable クラス

getSummaryDataAsync(), getUnderlyingDataAsync() メソッドのいずれかを使用して返されるオブジェクトは、API のソースを読む限り、DataTable クラス的な名前のオブジェクトで、以下のメソッドが実装されています。

ss.initClass($tableauSoftware_DataTable, $asm, {
  getName: function DataTable$GetName() {
    return this.$impl.get_name();
  },
  getData: function DataTable$GetData() {
    return this.$impl.get_rows();
  },
  getColumns: function DataTable$GetColumns() {
    return this.$impl.get_columns();
  },
  getTotalRowCount: function DataTable$GetTotalRowCount() {
    return this.$impl.get_totalRowCount();
  }
});
メソッド名 戻り値 詳細
getName() string 取得したデータテーブル種別を示す文字列を返す 'Summary Data Table' ( サマリデータ ), 'Underlying Data Table' ( 参照元データ )
getTotalRowCount() number 取得したデータテーブルのレコード数を返す
getColumns() Array<Column> 取得したデータテーブルのカラム情報を保持した配列を返す
getData() Array<Array<Object>> 取得したデータテーブルのレコード情報を保持した配列を返す

サンプル

しんや氏サンプルが使用している参照元データの一部をビューの外に出力するサンプルを作成してみました。

まとめ

Tableau JavaScript API の新機能について触れてみました。10.0 系以前の Tableau サーバでは取得できなかったビューのデータがまとめて取得できるようになったので、今まで以上に Tableau ビューだけでは表現しきれないような可視化コンテンツを作ることができるようになったのではないかと思います。