見出し画像

Tableauで特定のタグが付いたデータソースを自動でリフレッシュする方法



こんにちは、Tableauユーザーの皆さん。今回は、Tableau Server Client (TSC) を使用して、特定のタグが設定されたデータソースを自動でリフレッシュする方法について紹介します。これにより、毎日のデータ更新作業がぐっと楽になります。

問題背景

Tableauを使っていると、毎日定期的にデータソースを更新する必要が出てきます。しかし、データソースが多くなると手動での更新は大変です。特に、特定のタグが付いたデータソースだけを更新したい場合、効率的な方法が求められます。以下に、具体的なユースケースをいくつか紹介します。

ユースケース 1: 営業チーム向けレポートの自動更新

営業チームが毎朝確認するレポートは、最新のデータに基づいて更新される必要があります。これらのレポートに使用されるデータソースに「営業」タグを付けておけば、このスクリプトを使って自動的にリフレッシュできます。

ユースケース 2: マーケティングキャンペーンの効果測定

マーケティングチームが実施するキャンペーンの効果をリアルタイムで測定するために、特定のデータソースを頻繁に更新する必要があります。これらのデータソースに「マーケティング」タグを付け、スクリプトを使って自動的に最新のデータを取得します。

ユースケース 3: 財務レポートの月次更新

財務チームが月次で作成するレポートは、正確なデータに基づいている必要があります。月次の財務データソースに「財務」タグを付けておき、このスクリプトで自動的にリフレッシュすることで、常に最新の情報を提供できます。

解決策

今回紹介するスクリプトを使用すれば、特定のタグが付いたデータソースを自動でリフレッシュできます。このスクリプトはPythonで書かれており、Tableau Server Client (TSC) ライブラリを使用しています。以下のGitHubリポジトリにソースコードを公開していますので、ご自由にお使いください。


必要な準備

  1. Tableau Server または Tableau Online アカウント

  2. API トークンの生成

  3. Python 環境

  4. 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()

スクリプトの設定

  1. `server_url`, `api_token_name`, `api_token_value`, `site_id`, `desired_tag` の各値を自分の環境に合わせて設定します。

  2. スクリプトを実行します。

python extract_datasource.py

エラーハンドリングとリトライ

このスクリプトにはエラーハンドリングとリトライ機能が組み込まれています。データソースの取得やリフレッシュに失敗した場合、最大3回までリトライを行います。

ページネーション

大量のデータソースを取得する際にAPI制限に引っかからないよう、ページネーションを利用しています。一度に100件のデータソースを取得し、全データソースを取得するまで繰り返します。

まとめ

このスクリプトを使用することで、Tableau Server または Tableau Online 上の特定のタグが設定されたデータソースを自動的にリフレッシュすることができます。これにより、日々のデータ更新作業が効率化されることでしょう。

詳細なソースコードは以下のGitHubリポジトリで確認できます。ぜひご活用ください。


もしこの記事が役に立った場合は、GitHubリポジトリにスターを付けてください。また、ご質問やフィードバックがあればお気軽にコメントください。


以上、Tableauユーザーのためのデータソース自動リフレッシュスクリプトの紹介でした。皆さんのデータ更新作業が少しでも楽になれば幸いです。

いいなと思ったら応援しよう!