tableau refreshextract で元データが更新されたらPublish

comment

こんにちは。truestar工房の三村です。

今回は 「refreshextract」 という Tableau Desktop に付属のコマンドラインユーティリティを使って、パブリッシュされた抽出データソースを更新するバッチファイルを作成しました。

このバッチファイルをWindows10のタスクスケジューラーに登録すれば、抽出データソースの元データ(csvとかxlsとか)が更新されたときだけ 自動的に Publish!なんてことができます。

1.前提

Tableau DeskTopが入っているマシンでのみ動作します。
tableau refreshextract コマンドを使用しますので、注意点等は以下のページを参照してください。
https://help.tableau.com/current/pro/desktop/ja-jp/extracting_TDE.htm

2.バッチファイルの作成

このブログの最後にバッチファイル全文を記載いたしましたので、テキストファイルにコピーして、PublishDataSource.cmd とでも名前を付けて保存してください。(拡張子はcmdかbatでお願いします)

3.Publish情報の設定

バッチファイルを開き、publishに必要な情報(ハイライト部分 -以下を適宜置き換えてください の箇所)を置き換えて保存してください。

4.動作確認

バッチファイルをダブルクリックして動作確認をお願いします。

5.Windows10のタスクスケジューラーに登録

必要に応じてWindows10のタスクスケジューラーに登録していただければ、抽出データソースの元データ(csvとかxlsとか)が更新されたときだけPublishします。

6.まとめ

毎日のちょっとした手間を軽くしていきたいと思っています。作業の自動化に力を入れていますので、

ご興味のある方は、以下から是非お問い合わせ下さい!

以下にバッチファイルの全文を記載いたします。
記載したプログラムのソースコードは、一通りのテストをしましたが全て無保証です。
使用にあたっては利用者の自己責任でお願いいたします。
直接的、あるいは間接的な損害に関して、弊社は一切の責任を負いかねます。

@echo off
setlocal
pushd "%~dp0"
rem **********************************************
rem *
rem * Tableau Desktop に付属のコマンド ライン ユーティリティを使って
rem * パブリッシュされた抽出データ ソースを更新する
rem *
rem * データソースの元データが更新されたときのみ
rem *
rem * OAuth を使用しない抽出データソースに使用
rem * 単一接続データソースの更新にのみ使用
rem * 詳しくは https://help.tableau.com/current/pro/desktop/ja-jp/extracting_TDE.htm
rem *
rem **********************************************

rem ---------------------------------------------------
rem - publishに必要な情報を設定する 以下を適宜置き換えてください 
rem ---------------------------------------------------

::Tableau Desktopが 2020.1 の場合
set tableau_bin=C:\Program Files\Tableau\Tableau 2020.1\bin

::datasourceの元データファイル(.tdeではなく、.csvとか.xlsとかのファイル名)
set original_file=C:\Users\xxx\Documents\Tableau\Cmd\datatest.csv

set server=http://xxxx
set datasource="xxx"
set project="xxx"
set user=xxx
set password="xxx"

::siteが規定の場合は指定なしでOK.指定する場合はPublishコマンドのパラメータにも追加してください
::詳しくは https://help.tableau.com/current/pro/desktop/ja-jp/extracting_TDE.htm
::set site=

rem ---------------------------------------------------
rem - メイン
rem ---------------------------------------------------

::元データファイルがなければ終了
if not exist %original_file% (
    echo ファイルが見つかりません %original_file%
    goto PROC_END
)

::bakファイル名を獲得
for %%a in (%original_file%) do set before_file=%%~na.bak

::bakファイルがなければ(初回起動時) Pablish
if not exist %before_file% (
    call :PUBLISH
    goto PROC_END
)

:: 更新日時取得
for %%b in (%original_file%) do set timestamp_original=%%~tb
for %%c in (%before_file%) do set timestamp_before=%%~tc

::元データの更新日付がbakより新しければ Publish
if "%timestamp_original%" gtr "%timestamp_before%" call :PUBLISH

goto PROC_END
rem ---------------------------------------------------
rem - Publishコマンド
rem ---------------------------------------------------
:PUBLISH
cd %tableau_bin%
tableau refreshextract --original-file "%original_file%" --force-full-refresh -s %server% --datasource %datasource% --project %project% -u %user% -p %password%

::bakファイルにコピー
cd "%~dp0"
copy /Y %original_file% %before_file%
exit /b

:PROC_END
popd
::pause
::