AlteryxからTableauのRestAPIを叩いてServerの管理を楽にする話
今回は、TableauとAlteryxの連携ネタです。Tableauが持つRestAPIをAlteryxから制御し、Serverの管理を楽にしてみたいと思います。
- TableauのRestAPIとは?
- RestAPIを使うためには
- AlteryxでRestAPIを使うには
- 実際にやってみましょう
1.TableauのRestAPIとは?
Tableauは様々なAPIを持っています。その中でも「Tableau Server/OnlineのWebUIでの操作をプログラムにやらせる」イメージに該当するのが「REST API」です。
できること:
- Tableau Server/Onlineにサインイン・サインアウト等
- Siteを作成・削除・問い合わせ等
- データドリブンアラートの削除・ユーザー追加・削除等
- プロジェクトの作成・紹介・削除等
- ワークブックの公開・削除・問い合わせ・ダウンロード等
- データソースの公開・削除・問い合わせ・ダウンロード等
- ユーザー・グループの管理
- サブスクリプションの作成・削除等
- 等々
まさにWEB画面からできることが一通りできるようなイメージで捉えて構わないと思います。
2.RestAPIを使うためには
RestAPIを使うためには、一般的にはプログラミング言語からアクセスします。たいていの言語であればRestAPIは扱えると思って結構かと思います(Python、Java、PHP・・・)。
3.AlteryxでRestAPIを使うには
Alteryxはプログラミング言語ではありませんが、開発者カテゴリにひっそりと佇んでいるこのアイコンをご存知でしょうか?
HTTPアクセスを行うことができる「ダウンロード」ツールです。Rest APIにアクセスするためにはこのダウンロードツールを使います(もちろん、Pythonツールなどでも可能ですが、それは別途・・・)。
4.実際にやってみましょう
それでは、実際にAlteryxでTableauServerのRestAPIを叩いてみたいと思います。
今回行うのは、Tableau Server上に登録されている全ユーザーのリストを取得することです。
- 事前準備(各種情報取得)
- ログイン
- User List取得
RestAPIに共通した流れとして、まずログインして認証用トークンを取得し、そのトークンを使って各種問い合わせや処理を行う形になります。
1.事前準備(各種情報取得)
まず事前準備が必要です。アクセスしようとしているTableau Server/Onlineについて以下の情報が必要です。
- TableauServerのURL/SiteName
- 管理者権限を持っているユーザーのIDとパスワード
- APIバージョン(Tableau Serverのバージョンによって決まっています)
項目名 | 内容 |
---|---|
URL | Tableau ServerのURLです |
SiteName | アクセスしようとしているSiteの名称です(デフォルトサイトであればNullでOK) |
UserName | 管理者権限を持っているユーザー名です |
UserPass | 管理者権限を持っているユーザーのパスワードです |
API_Version | APIのバージョンです。Tableau Serverのバージョンによって決まります(2019.1であれば3.3) |
上記情報をまずは「テキスト入力ツール」に入力しておきましょう。
※見えちゃまずいところはモザイクかけてます
2.ログイン
RestAPIへアクセスする一般的なフローとして、Serverに投げるデータを作成→ダウンロードしたデータを使える形に加工、というのを繰り返します。
TableauServerのRestAPIを使うには、まずServerにログインし認証トークンを取得する必要があります。アクセスに必要な情報は以下のとおりです。
項目名 | 内容 |
---|---|
URI | POST /api/api-version/auth/signin |
リクエストボディ | <tsRequest> <credentials name="username" password="password" > <site contentUrl="content-url" /> </credentials> </tsRequest> |
上記の情報をダウンロードツールでTableauServerにPOSTするのですが、フォーミュラツールで作成しましょう。
その後、ダウンロードツールの「ベーシック」タブと「ペイロード」タブでそれぞれ以下の通り設定します。
タブ | 項目名 | 設定内容 |
---|---|---|
ベーシック | URL | フォーミュラツールで作成した「LoginURL」フィールド |
ペイロード | HTTPアクション | POST |
フィールドからクエリ列/本文を取得する | フォーミュラツールで作成した「AccessJson」フィールド |
アクセスに成功すると、以下のようなフィールドが出力されます。
上記データのうち、欲しいのは「DownloadData」ですが、XML形式で取得しているので、XMLパースツールを使って中身の値を取り出します。
これにより得られるデータは以下のとおりです。
なお、認証トークンは「x-tableau-auth」というフィールド名にしておく必要があります。選択ツールでフィールド名を変更しましょう。
3.User List取得
ここまでで認証トークンが取得できたので、あとは好きな処理を行うだけです。今回は、ユーザーのリストを取得して行きたいと思います。使うのは「Get Users on Site」という機能です。
項目名 | 内容 |
---|---|
URI | GET /api/api-version/sites/site-id/users |
リクエストボディ | なし |
フォーミュラツールでデータを作成しましょう。今回はURIのみ作成すればOKです。
なお、page-sizeオプションに1000を指定しています。デフォルトでは100ですので、ユーザーが100名以上登録されている場合は全数出てこないので、調整が必要です。ちなみに、最大値は1000です。それを超えると、Page-numberオプションも組み合わせる必要があります。
その後、ダウンロードツールの「ベーシック」タブ、「ヘッダー」タブ、「ペイロード」タブでそれぞれ以下の通り設定します。
タブ | 項目名 | 設定内容 |
---|---|---|
ベーシック | URL | フォーミュラツールで作成した「UserRequestURL」フィールド |
ヘッダ | これらのフィールドからの値 | x-tableau-auth |
ペイロード | HTTPアクション | GET(or FTP) |
アクセスが成功すると、ダウンロードツールにより以下のようなデータが取得できます。
このうち、DownloadData2というフィールドに欲しいデータが入っているので、またもやXMLパースツールで中身を取り出します。設定は先程と同様です。
ちなみに、nameはTableauServerに登録されているユーザー名(アカウントID)です。弊社ではAD連携を行っているので、ユーザー名は社員番号になっています(モザイクかけています)。正直なところ社員番号ではなんだかよくわからないのでさらに詳細情報が欲しいところです。
さらにここから各ユーザーについて詳細を取得したければ「Query User On Site」などの機能を使って取得していく形となります。
ちなみに、今回のワークフロー全体は以下のとおりです。
5.まとめ
AlteryxからTableau ServerのRestAPIを叩いてみました。普段使うことの少ないダウンロードツールやXMLパースツールを駆使しています。
今回は、サンプルとして認証トークンの取得からユーザーリストの取得まで行いました。これを応用すれば取得したリストに対して権限を変更するようなワークフローなども作ることが可能です。それにより、Tableau Serverのユーザー管理をExcelの表ベースで行うことも可能です。
Tableau SeverのRestAPIは比較的難易度が低いため、AlteryxでRestAPIを使う練習台としては良いかと思います(認証トークンの取得にJWTなどが必要になったりすると難易度が跳ね上がりますので・・・)。
参考:Tableau Rest API Reference (英語)
Tableau Server 2019.1.1(20191.19.0215.0259)
Alteryx Designer 2019.1.4.57073
時点の情報です。