こんにちは、AIチームの友松です。本日はTableauのデータ主導アラートをSlackで通知するまでの手順をまとめたいと思います。
Tableauのデータ主導アラートはある指標に対して、指定した条件が発火したときにメールで通知を送る機能になります。
AI Shiftではログの監視にDatadogを採用していますが、以前外部APIが意図した値を返されていないのにエラーにならなかった例があり、違和感に気付けるアラートを柔軟に設定したいというモチベーションでTableauのデータ主導アラートを採用しました。
今回は通知をSlackに送る手順と、データ主導アラートを作る際に必要な要素を書いていければと思います。
データ主導アラートの設定
今回は、15分毎に分割してある指標に対してデータ主導アラートを設定したいと思います。
Tableauで読み込むデータに以下のフィールドが存在すると仮定します。
- datetime(日時型)
- KPI(計算フィールドで作成したもの)
1. 条件確認のタイミング
データ主導アラートの条件が評価されるタイミングはつないでいるデータがライブ接続か抽出かによって異なります。
- ライブ接続: 1時間に1回(Tableau Online), 管理者が設定したタイミング(Tableau Server)
- 抽出: 抽出の更新がかかったタイミング
そのため、アラートごとに評価の頻度を調整したり、何かをトリガーとして評価したい場合は抽出の更新による評価が向いていると思います。
何かをトリガーにしてAPI経由での抽出の更新を行う方法は先日公開したこちらのブログを御覧ください
2. データの作成
データの作成を行います。ここでは、抽出の更新がなるべく早く終わるように必要なデータだけ取得する試みをします。
AI Shiftでは主にBigQueryを集計用のDWHとして利用しており、テーブルが日付単位のパーティションテーブルで構成されています。(table_20210128, table_20210129, ...)
今回想定するパターンとしては、15分区切りのデータを直近1時間分チェックしてKPIが閾値を下回っているかをチェックする想定でSQLを書きたいと思います。SQLでは直近1日分のテーブルを取ってきて、Tableau側で直近1時間に絞るフィルターを作る形で対応します
SELECT
*
FROM
`[project_name].[dataset_name].test_*`
WHERE
_TABLE_SUFFIX
> FORMAT_DATETIME("%Y%m%d", DATETIME_ADD(CURRENT_DATETIME("Asia/Tokyo"), INTERVAL - 1 DAY))
3. アラート設定用のビューの作成
datetimeを任意の分での分割を作る
Tableauの日時型は月, 日, 時間, 分など、使用する粒度を柔軟に設定可能ですが、15分ごとの分割を作りたいなど、細かいビニングが通常はできません。
こちらの記事では、datetime型から時間を取り出してビニングする方法が記述されていますが、こちらの方法の場合、整数値に変換されてしまい、時間以外の情報は破棄されてしまいます。
日時型を維持したままビニングする方法を紹介します。
3.1. パラメーターの作成

間隔(分)というパラメーターを用意します。
こちらのパラメーターを変化させることで、ビニングの分割の粒度を変えられるようにしていきます。
- 名前: 間隔(分)
- データ型: 整数
- 表示形式: カスタム -> #分
- 許容値: リスト
- 値のリスト: 1, 5, 10, 15, 30, 60
3.2 計算フィールドの作成
先程の `時間(分)` のパラメーターを使用してdatetimeをビニングします。

INT(DATEPART('minute', [datetime])/[間隔(分)])*[間隔(分)] --- 式1
上記の式1は、datetimeの日付部分をパラメーターの区切りに分割をおこないます。
たとえば、[間隔(分)]のパラメーターが5の場合は、12:00-12:04までは0, 12:05-12:09までは5のように分の部分を5ずつ分割できます。
DATEADD(
'minute',
(式1),
DATETRUNC('hour', [datetime])
) --- 式2
式2ではdatetimeの時間(hour)までの部分に式1で抽出した分を追加しています。
上記によって、パラメーターによって指定した分区切りの日時値を作ることができました。
3.3 ビューの作成
列: [n分区切りの日付] を設定し、粒度を 正確な日付
に変更します。
行: KPIを設定します。
パラメーター: 間隔(分)を パラメーターの表示
によって表示します。
すると以下のようなビューができ、パラメーターを変更させることで、15分, 30分, 1時間区切りなどを変更することが出来るようになりました。



3.4 フィルターの設定

フィルターはdatetimeを設定し相対日付によって設定します。ここは、今回データ主導アラートで検知したい期間を入れてください。これを設定することで、抽出の更新が行われるたびに直近1時間分が評価されるようにできます。
ビューが完成したらTableau Online またはTableau Serverにビューをパブリッシュしてください。
4. Slackの特定のchannelにアラートを飛ばす準備

Tableauのデータ主導アラートは前述したように、アラートが発火すると指定したメールアドレスに送るというものです。Slackはchannel毎にメールアドレスを発行することができ、そのメールアドレス宛にメールを送るとSlackに通知が出来る仕組みになっています。
slackのchannelのメールアドレスを取得するには、チャンネル設定の その他
のボタンから チャンネルにメールを送信する
ボタンを選択すると取得することができます。

5. Tableau Server / Onlineでユーザ追加・権限設定
先程Slackで取得したメールアドレスでユーザを追加し、Viewer権限を付与します。また、先程パブリッシュしたワークブックに権限を追加します。
データ主導アラートの設定

- データアラートを設定する数値軸(今回はKPI)を選択します。
- 画面上部のアラートボタンを押して、
アラートを作成
を押します。

条件と閾値、評価タイミング、受信者を設定します。
条件は以下から
- 次と等しいか大きい
- 次より大きい
- 次と等しいか小さい
- 次より小さい
- 次と等しい
評価タイミングは 可能な限り頻繁に
を選ぶと抽出の更新のたびに評価が行われます。
評価タイミングで赤いラインにKPIがかかっている場合にアラートが飛びます。
メールの送信先に先程作成したユーザを設定すると完了です。
6. Slackでの通知

条件が発火するとSlackに実際に通知されることが確認できました。
おわりに
今回は、Tableauのデータ主導アラートを設定する上でのTipsとSlackへの通知方法について紹介しました。意外と簡単に設定できるので、ぜひ試してみてください