🔥

Tableau PrepフローをPythonで自動実行する方法

2023/02/20に公開

はじめに

Tableau Prepフローを自動実行する機能は標準では用意されていない為、有料アドオンを購入するか、コマンドラインツールを用いてタスクスケジューラーで起動させるかの二つの選択肢しか現状ありません。
その二つの特徴についてはKCME Tech Blogさんの記事が分かりやすいです。
Tableau Prepのワークフロー実行を自動化する

この場で簡単にまとめると、有料アドオンは機能性は抜群ですが、使用するTableau Serverの登録アカウント数が多ければ多いほど年間コストが跳ね上がるのがデメリットです。
コマンドラインツールを使った方法は無料ですが、設定方法が煩雑、管理者権限が必要、フローの実行で複雑な制御は難しい等、幾つか難点があります。

そこで第三の選択肢を紹介したいと思います。
それは Tableau Server Client (Python) を導入する事です。

Tableau Server Client とは何か

一言で言うならば、Tableau Server上の様々な操作をPythonから制御できるライブラリです。
これを使えばフローの自動実行は勿論の事、Tableau Server上で手動で行える事のほとんどはPythonから実行出来てしまいます。
大変優れたライブラリなのですが知名度は低く、特に日本語での情報は全然ありません。

まずは使ってみよう

導入は極めて簡単なので、ささっと紹介していく事にします。
この記事では簡単な使い方から始めて、フローを実行する所まで触れたいと思います。

環境の構築

このライブラリを使うにあたっては、当然ではありますがTableau Server環境が必要です。
※Tableau Cloud (旧名はTableau Online) 環境でもOK。
「しかし会社にはあるが家の環境には無い。でも勉強はしたい!」という方も多いでしょう。
その場合はTableau Cloudの開発者サンドボックスの利用をお勧めします。
ようは申請さえすれば誰でも入手可能なTableau Cloud環境の事です。

※手元にTableau Server等の環境がある方は以下の手順は実施不要です。
申請方法ですが、まずは Tableau の Developer Program のサイトにアクセスします。
転移先のページで中段あたりにある「参加する」をクリックします。

フォームへの入力を終えたらメール認証など、ナビゲーションに従って進めて行くと開発者用のTableau Cloud環境が入手できます。

インストールからログインまで

インストールはコマンドプロンプト等からpipコマンドで行えます。
pip install tableauserverclient

インストールを終えたら早速コーディングを始めていきます。

login.py
import tableauserverclient as TSC

tableau_auth = TSC.TableauAuth('USERNAME', 'PASSWORD', 'SITENAME')
server = TSC.Server('http://SERVER_URL')
server.auth.sign_in(tableau_auth)

print('ログイン成功')

各認証情報(ユーザー名、パスワード、サイト名、サーバーURL)はご自身の環境に合わせて入力を行って下さい。
例えば開発者サンドボックスの場合ですと、サーバーURLは以下のように入力します。
server = TSC.Server('https://10ax.online.tableau.com')

サイト名はTableau Server環境の場合は省略できますので、以下のように書けます。
tableau_auth = TSC.TableauAuth('USERNAME', 'PASSWORD')
省略した場合、既定のサイトに自動でログインされるからです。
但しTableau Cloud環境の場合はサイト名を必ず入れる必要があります。
開発者サンドボックスのURLを例に取ると、サイト名は以下の太字の箇所になります。
https://10ax.online.tableau.com/#/site/SITENAME/

ユーザー名とパスワードはTableau Server (or Tableau Cloud) へログインする時の情報をそのまま入力して下さい。

さて、認証情報を適切に入力できた場合、プログラム実行後にログイン成功と出るはずです。そうなれば成功ですので次のステップへ進みましょう。

フローの実行

単にフローを実行するだけなら実は恐ろしく簡単に書けます。

flow.py
import tableauserverclient as TSC

tableau_auth = TSC.TableauAuth('USERNAME', 'PASSWORD', 'SITENAME')
server = TSC.Server('http://SERVER_URL')
server.auth.sign_in(tableau_auth)

for flow in TSC.Pager(server.flows):
    server.flows.refresh(flow)

前回のプログラムと比べて下に2行増えただけですね。これを実行すると、現在サイトにある全てのフローが実行されます。なので、会社の環境等でフローが大量に設置されている場合は実行して大丈夫かどうか確認を取るようにして下さい。

上記はとても大雑把なコードですが、勿論対象を詳細に制御する事も可能です。
それだけでなく、様々な事が実現可能です。以下にその例を列挙します。

  1. 特定の名前のフローを実行
  2. 特定のプロジェクトにあるフローを実行
  3. 特定のタグが付けられたフローを実行
  4. 任意の間隔(日次、週次、月次)で指定時間に特定のフローを実行
  5. あるフローの実行が終わってから実行
  6. 特定のフローの実行が全て終わってから実行
  7. 詳細情報付きのフローの実行結果ログをCSVで出力
  8. フロー実行完了時、またはエラー時に結果をメールで送信
  9. 特定のフローの実行を一括キャンセル

勿論、これだけではありません。例えばGUIライブラリのPySimpleGUIと連携する事で、フローの実行ステータスをリアルタイムで監視できるGUIを作成できたり、スケジュールや対象フローの登録もGUIの画面上で行ったりする事も出来ます。

Udemyで全編公開中

実はそういったプログラムの実装方法は詳細な解説付きでUdemyで既に公開しています。
PythonでTableau Server上のフローを自動実行させる方法
こちらは有料講座になりますので、先に完成品の実物を見て購入を検討されたい場合はYoutubeで公開しているプロモーション用の動画をご覧ください。
https://www.youtube.com/watch?v=gEw5oXFwlI0&list=PL2TSUt0tK56JPhHBoazaRZ0qb3Ewsros7

最後に

ここまで御覧いただき誠にありがとうございました。
これが私が最初に書いたZennの記事になります。
WEB上でこういった記事を書くのは初めてでしたが、とても書きやすくてびっくりしています。
これからもTableauやプログラミングに関する有益な記事を色々公開していきたいと思いますので、是非ともよろしくお願いいたします。

Discussion