Tableauで特定のタグが付いたデータソースを自動でリフレッシュする方法
こんにちは、Tableauユーザーの皆さん。今回は、Tableau Server Client (TSC) を使用して、特定のタグが設定されたデータソースを自動でリフレッシュする方法について紹介します。これにより、毎日のデータ更新作業がぐっと楽になります。
問題背景
Tableauを使っていると、毎日定期的にデータソースを更新する必要が出てきます。しかし、データソースが多くなると手動での更新は大変です。特に、特定のタグが付いたデータソースだけを更新したい場合、効率的な方法が求められます。以下に、具体的なユースケースをいくつか紹介します。
ユースケース 1: 営業チーム向けレポートの自動更新
営業チームが毎朝確認するレポートは、最新のデータに基づいて更新される必要があります。これらのレポートに使用されるデータソースに「営業」タグを付けておけば、このスクリプトを使って自動的にリフレッシュできます。
ユースケース 2: マーケティングキャンペーンの効果測定
マーケティングチームが実施するキャンペーンの効果をリアルタイムで測定するために、特定のデータソースを頻繁に更新する必要があります。これらのデータソースに「マーケティング」タグを付け、スクリプトを使って自動的に最新のデータを取得します。
ユースケース 3: 財務レポートの月次更新
財務チームが月次で作成するレポートは、正確なデータに基づいている必要があります。月次の財務データソースに「財務」タグを付けておき、このスクリプトで自動的にリフレッシュすることで、常に最新の情報を提供できます。
解決策
今回紹介するスクリプトを使用すれば、特定のタグが付いたデータソースを自動でリフレッシュできます。このスクリプトはPythonで書かれており、Tableau Server Client (TSC) ライブラリを使用しています。以下のGitHubリポジトリにソースコードを公開していますので、ご自由にお使いください。
必要な準備
Tableau Server または Tableau Online アカウント
API トークンの生成
Python 環境
Tableau Server Client ライブラリのインストール
スクリプトの内容
以下に、スクリプトの内容を示します。このスクリプトは、指定したタグが付いたデータソースをリフレッシュします。
#Python
import tableauserverclient as TSC
import time
import logging
# ログの設定
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def main():
# Tableau Server 接続の設定
server_url = 'https://your-tableau-server'
api_token_name = 'your-token-name'
api_token_value = 'your-token-value'
site_id = 'your-site-id' # サイトID (通常は空文字 '')
# タグの設定
desired_tag = 'your-tag' # ここにリフレッシュしたいデータソースのタグを指定
# サインイン
tableau_auth = TSC.PersonalAccessTokenAuth(token_name=api_token_name, personal_access_token=api_token_value, site_id=site_id)
server = TSC.Server(server_url, use_server_version=True)
max_retries = 3
retry_delay = 5 # リトライ間隔 (秒)
page_size = 100 # 一度に取得するデータソースの数
def execute_with_retry(func, *args, **kwargs):
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed: {e}")
if attempt < max_retries - 1:
logger.info(f"Retrying in {retry_delay} seconds...")
time.sleep(retry_delay)
else:
logger.error("Max retries reached. Exiting.")
raise
with server.auth.sign_in(tableau_auth):
all_datasources = []
pagination_item = None
while True:
options = TSC.RequestOptions(pagenumber=len(all_datasources) // page_size + 1, pagesize=page_size)
datasources, pagination_item = execute_with_retry(server.datasources.get, req_options=options)
all_datasources.extend(datasources)
if len(all_datasources) >= pagination_item.total_available:
break
logger.info(f"Retrieved {len(all_datasources)} of {pagination_item.total_available} datasources...")
logger.info(f"Total datasources found: {pagination_item.total_available}")
# タグでフィルタリング
tagged_datasources = [ds for ds in all_datasources if desired_tag in ds.tags]
logger.info(f"Datasources with tag '{desired_tag}': {len(tagged_datasources)}")
# データソースのリフレッシュ
for datasource in tagged_datasources:
try:
execute_with_retry(server.datasources.refresh, datasource.id)
logger.info(f"Datasource {datasource.name} has been refreshed successfully.")
except Exception as e:
logger.error(f"Failed to refresh datasource {datasource.name}: {e}")
if __name__ == '__main__':
main()
スクリプトの設定
`server_url`, `api_token_name`, `api_token_value`, `site_id`, `desired_tag` の各値を自分の環境に合わせて設定します。
スクリプトを実行します。
python extract_datasource.py
エラーハンドリングとリトライ
このスクリプトにはエラーハンドリングとリトライ機能が組み込まれています。データソースの取得やリフレッシュに失敗した場合、最大3回までリトライを行います。
ページネーション
大量のデータソースを取得する際にAPI制限に引っかからないよう、ページネーションを利用しています。一度に100件のデータソースを取得し、全データソースを取得するまで繰り返します。
まとめ
このスクリプトを使用することで、Tableau Server または Tableau Online 上の特定のタグが設定されたデータソースを自動的にリフレッシュすることができます。これにより、日々のデータ更新作業が効率化されることでしょう。
詳細なソースコードは以下のGitHubリポジトリで確認できます。ぜひご活用ください。
もしこの記事が役に立った場合は、GitHubリポジトリにスターを付けてください。また、ご質問やフィードバックがあればお気軽にコメントください。
以上、Tableauユーザーのためのデータソース自動リフレッシュスクリプトの紹介でした。皆さんのデータ更新作業が少しでも楽になれば幸いです。