🐕

Tableauのユーザーフィルターの実装アイデア

2022/04/21に公開

TableauServerへのログインユーザーによって表示できるデータを切り替えたい場合があります。

ユーザーが増えた場合にもTableauの設定を変更して再パブリッシュするのではなく、DBに権限に関する情報を持たせて更新できるようにしたい、ということが多いかと思います。

実際に私が案件で対応した実装方法を紹介したいと思います。

ユーザーフィルターの基本対応と問題点

Tableauの関数にはUSERNAME()というログインユーザ名を取得できるものがあるので、これを利用します。

各データに表示できるユーザのカラムを追加して、そのカラムとUSERNAME()が一致する場合のみ表示フィルターを作成すれば、ユーザーごとに表示するデータを制御できます。

ただし、ユーザー数が増えるとデータセットのレコード数が爆発的に増えます。例えばユーザが100人いた場合に、元々のデータセットから何十倍にもなることがあります。

そのため、このアイデアではパフォーマンスが著しく低下する恐れがあります。そこでユーザーフィルターの実装を工夫する必要があります。

(解決法)お知らせページを作成して、ワンクッション挟む

ログイン直後に目的のダッシュボードに遷移させるのではなく、お知らせページのような別ページを1つ挟むことによってデータソースのレコード数の増加を防ぐことができます。

作成の流れは以下のようになります。

  • お知らせページを作成
  • そのページに目的のダッシュボードに遷移するためのボタンをシートで作成
  • そのシートはログインユーザごとの表示させるデータの条件カラムを設定
  • シートのアクションフィルターで目的のダッシュボードに遷移する際に条件カラムでフィルターがかかるので、ユーザに表示したいデータのみ絞られる

ここでいう条件カラムとは、例えばログインユーザの属する会社のデータのみ表示したいという場合に条件カラムは会社となり、フィルターアクションで会社カラムを指定することでデータを絞り込む流れとなります。

ログインユーザと会社を紐づけるデータをDBに格納しておき、ユーザが追加されるたびに紐づけデータを更新すればTableauを更新せずにユーザフィルターを更新することができます。

ここでお知らせページと呼んでいるのは、例えばDBにデータの更新のメンテナンス情報などを格納していおき表示するようなページです。TableauServerのログイン画面にメンテナンス情報を表示するのはなかなか難しいので、ログイン後のページに「お知らせページ」を用意するとユーザに違和感をもたれないUXになるかと思います。

最後にこの実装の注意点は、フィルターアクションで「選択項目をクリアした結果」は「全ての値を除外」に設定してください。設定しないとメニューなどから目的のダッシュボードに遷移された場合にユーザフィルターがかからない状態で表示されてしまいます。

まとめ

Tableauの標準でユーザーフィルターという機能がありますが、ユーザーを追加する際にTableauを再パブリッシュする必要があり、DB上にデータを持たせてユーザーフィルターをかける実装方法を紹介しました。

また、その場合にデータソースのレコード数が増大する可能性がありパフォーマンスに影響があるので、それをお知らせページを用意して回避する実装アイデアも併せて紹介しました。

Tableauでログインユーザによってフィルターをかけたいニーズはあると思いますが、あまり情報がなかったので私が過去に実装した方法を紹介しましたので、参考になればと思います。

他のTableau関連の記事はこちら

Discussion