![見出し画像](https://assets.st-note.com/production/uploads/images/140732633/rectangle_large_type_2_0fcf649153fe4e72643ba7fa99ff2a65.png?width=1200)
Tableauでタグ付きダッシュボードをPDFに自動変換し、Slackにアップロードする方法
こんにちは、Tableauユーザーの皆さん。ダッシュボードのエクスポートと共有は、多くのチームにとって重要なタスクです。特に、データに基づいた意思決定を行うためには、最新のダッシュボードを常に確認できることが求められます。今回は、指定のタグが付いたTableauダッシュボードをPDFとしてエクスポートし、Slackに自動でアップロードするPythonスクリプトをご紹介します。このスクリプトを使うことで、Tableauユーザーだけでなく、チームメンバーや関係者も簡単にダッシュボードを確認できるようになります。
問題背景
データに基づいた意思決定は、現代のビジネスにおいて極めて重要です。しかし、最新のダッシュボードを常に確認し、チーム全体で共有することは容易ではありません。特に、以下のような課題が存在します:
手動のダッシュボードエクスポート:毎回手動でダッシュボードをエクスポートし、関係者に配布するのは手間がかかります。
情報の遅延:手動での共有では、最新のデータがチームに届くまでにタイムラグが発生します。
一貫性の欠如:異なる形式や方法で共有される情報は、一貫性に欠け、混乱を招くことがあります。
ユースケース
このスクリプトは、さまざまなユースケースで活用できます。以下にいくつかの具体的な例を挙げます。
ユースケース1: 定期的なレポート共有
週次や月次の定期レポートとして、指定されたタグが付いた最新のダッシュボードをPDF形式でチーム全体に自動的に共有できます。これにより、関係者は最新のデータに基づいて迅速に意思決定を行うことができます。
ユースケース 2: プロジェクトの進捗確認
プロジェクトごとにタグを設定し、進捗状況を示すダッシュボードを自動的にSlackにアップロードすることで、プロジェクトチームが最新の状況を簡単に把握できます。
ユースケース3: パフォーマンス監視
業績やKPIを監視するためのダッシュボードを定期的に共有することで、マネージャーやエグゼクティブがパフォーマンスを確認できるようになります。
ユースケース 4: 部署間の情報共有
異なる部署間で必要なダッシュボードを共有することで、情報の透明性を高め、全体的な効率を向上させることができます。
必要な環境
Tableau Server または Tableau Online アカウント
API トークンの生成
Python 環境
Tableau Server Client ライブラリのインストール
SlackワークスペースとBotトークン
事前準備
1. Slack Bot Tokenの取得
Slack Appの作成:
Slack API: Applications にアクセスし、新しいアプリを作成します。
右上の「Create New App」ボタンをクリックします。
アプリケーションの設定:
「From scratch」を選択します。
アプリケーションの名前を入力し、アプリケーションをインストールするワークスペースを選択します。
「Create App」をクリックします。
Botユーザーの作成:
アプリケーションの設定ページで、「OAuth & Permissions」タブをクリックします。
「Scopes」セクションで、「Bot Token Scopes」に以下の権限を追加します:
`files:write`(ファイルのアップロード)
`chat:write`(メッセージの投稿)
Bot Tokenの取得:
「OAuth Tokens for Your Workspace」セクションで、「Install App to Workspace」をクリックします。
ワークスペースにアプリケーションをインストールするための権限を承認します。
インストールが完了すると、「OAuth Tokens for Your Workspace」セクションに「Bot User OAuth Token」が表示されます。このトークンを使用して、スクリプトで認証を行います。
Botをチャンネルに追加:
Slackアプリで、対象のチャンネルを開きます。
チャンネルのメッセージ入力フィールドで `/invite @your-bot-name` と入力してエンターキーを押します。
2. Tableau Personal Access Tokenの取得
Tableau ServerまたはTableau Cloudにログイン:
Tableau ServerまたはTableau Cloudの設定で、Personal Access Tokenを作成します。
トークンの名前と生成されたトークンをメモしておきます。
スクリプトの準備
以下のファイルを用意します。
`config.json`
{
"tableau": {
"server_url": "your_tableau_server_or_cloud_url",
"personal_access_token_name": "your_personal_access_token_name",
"personal_access_token": "your_personal_access_token",
"site_id": "your_site_id"
},
"slack": {
"slack_bot_token": "your_slack_bot_token",
"slack_channel_id": "your_slack_channel_id"
}
}
`main.py`
import tableauserverclient as TSC
from datetime import datetime
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
import json
import os
# JSONファイルから設定情報を読み込む関数
def load_config(config_file='config.json'):
with open(config_file, 'r') as f:
config = json.load(f)
return config
# Tableauからタグ付きダッシュボードをPDFとしてエクスポートする関数
def export_dashboards_to_pdf(server, tag):
with server.auth.sign_in(server_auth):
req_option = TSC.RequestOptions()
req_option.filter.add(TSC.Filter(TSC.RequestOptions.Field.Tags, TSC.RequestOptions.Operator.Equals, tag))
all_views, pagination_item = server.views.get(req_option)
pdf_files = []
for view in all_views:
try:
server.views.populate_pdf(view)
pdf = view.pdf
file_name = f"{view.name}_{datetime.now().strftime('%Y%m%d%H%M%S')}.pdf"
with open(file_name, 'wb') as f:
f.write(pdf)
pdf_files.append(file_name)
except TSC.ServerResponseError as e:
print(f"Failed to export view {view.name}: {e}")
return pdf_files
# Slackにファイルをアップロードする関数
def upload_files_to_slack(slack_client, channel_id, files):
for file in files:
try:
response = slack_client.files_upload_v2(
channel=channel_id,
file=file,
filename=os.path.basename(file),
title=os.path.basename(file)
)
except SlackApiError as e:
print(f"Error uploading {file} to Slack: {e.response['error']}")
if __name__ == "__main__":
config = load_config()
tableau_config = config['tableau']
slack_config = config['slack']
server = TSC.Server(tableau_config['server_url'], use_server_version=True)
server_auth = TSC.PersonalAccessTokenAuth(
tableau_config['personal_access_token_name'],
tableau_config['personal_access_token'],
tableau_config['site_id']
)
slack_client = WebClient(token=slack_config['slack_bot_token'])
slack_channel_id = slack_config['slack_channel_id']
tag = "pdf" # 対象のタグを指定
print(f"Starting dashboard export and upload at {datetime.now()}")
pdf_files = export_dashboards_to_pdf(server, tag)
upload_files_to_slack(slack_client, slack_channel_id, pdf_files)
print("Completed dashboard export and upload.")
実行方法
以下のコマンドを実行して必要なライブラリをインストールし、スクリプトを実行します:
pip install tableauserverclient slack_sdk
python main.py
slack通知イメージ
![](https://assets.st-note.com/img/1715777151638-FJWyNEGSDe.png)
スクリプトの説明
設定情報の読み込み:
`config.json` ファイルからTableauとSlackの設定情報を読み込みます。
ダッシュボードのエクスポート:
指定されたタグが設定されたダッシュボードをPDFとしてエクスポートします。
ファイルのアップロード:
エクスポートしたPDFファイルを指定されたSlackチャンネルにアップロードします。
注意事項
1. SSL証明書のインストール
SlackにPDFファイルをアップロードする際、PythonのSSL証明書が必要です。特にmacOSユーザーは、Pythonの公式インストールに含まれている以下のコマンドを実行してSSL証明書をインストールしてください:
/Applications/Python\ 3.x/Install\ Certificates.command
2. チャンネルIDの確認
SlackチャンネルのIDを確認し、正しいチャンネルIDをconfig.jsonに記載してください。チャンネルIDは、SlackのチャンネルURLの末尾に表示される「C」で始まる文字列です。
3. Botのチャンネル参加
Botが対象のSlackチャンネルに参加していることを確認してください。参加していない場合、/invite @your-bot-nameコマンドを使用してBotをチャンネルに招待します。
実際のソースコード
ソースコードはGitHubリポジトリに公開されています。詳しくは以下のリンクからご確認ください:
まとめ
このスクリプトを使うことで、Tableauのダッシュボードを効率的に管理し、Slackを使ってチーム全体で簡単に共有できます。これにより、Tableauユーザーだけでなく、ダッシュボードを確認したいすべてのチームメンバーが最新のデータにアクセスできるようになります。自動化により、手動での作業を減らし、作業効率を向上させましょう。