Tableau Desktopで計算フィールド+ユーザー関数を使用して、見る人によって違うデータが動的に表示されるようにする #tableau

2018.06.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィス唯一のDI部メンバー、tamaです。

今回も、Tableauのユーザーフィルターという機能についてご紹介します。前回のエントリでは、フィルターしたいデータとユーザーを、手動で設定する方法をご紹介しましたが、今回は自動でユーザーフィルターが適用される方法をご紹介します。

前回エントリはこちら

自動のユーザーフィルターとは

最初に書いた通り、今回は自動でユーザーフィルターが適用される設定について見てきます。「自動で設定する」と言うと、何だかすごい機能のようにも聞こえますが、実態としては、そんな大掛かりな方法ではありません。ユーザー関数を用いた計算フィールドを作成し、それをフィルターに適用すれば、実現できます。

ユーザー関数とは

「そのビューを閲覧しているユーザー(またはユーザーが属しているグループ)」を呼び出したり、比較したりすることができる関数です。詳細は下記のリンクを見ていただければと思いますが、Tableau Server上で閲覧しているユーザーに関する関数なので、Tableau Serverにパブリッシュするワークブック前提の関数ですね。

これを利用することで、自動的にユーザーをチェックし、表示データを制御することができます。

ちょっとやってみる

実際に試してみましょう。

  • Tableau Server 10.5
  • Tableau Desktop 2018.1

テストユーザーを作成

ちょっと無茶ですが、下記の通り、「奈良」と「京都」というユーザーを作成します。(ユーザーフィルターを使用を検証したいため、用意するユーザーについてはちょっとズボラな形でやります…。)

Tableau Desktop上でTableau Serverにサインイン

右下にユーザー名が表示されていれば、正しくサインインできています。(このワークブックは、Tableauに最初から入っている「日本分析」というものです。)

計算フィールドを作成する

先程も説明した通り、ユーザー関数を用いた計算フィールドを作成します。作成する計算式は以下の通りです。

これは、「ユーザー名が『都道府県』の値と同じかどうか?」という計算式になります。返り値は真偽値です。

計算フィールドをフィルターに配置する

上記で作成した計算フィールドを、フィルターシェルフに配置します。そしてフィルターを通す値を「真」のみにします。

こうすることで、「ユーザー名と同じ値の『都道府県』のデータだけフィルタを通過させる」という設定ができました。

確認

Tableau Desktopのユーザー別プレビュー機能を使用して確認します。まずは「奈良」というユーザーで確認します。

ユーザー名が「奈良」なので、「奈良」という値の都道府県のデータだけ表示されています。要するに奈良県のデータだけが表示されるようになっているということですね。

続いて「京都」というユーザーではどうでしょうか。

こちらも、先程の「奈良」と同じ原理ですね。ではそれ以外のユーザーはどうでしょうか。

「越中詩郎」という値は、このワークブックに使用されているデータの「都道府県」には存在しないため、該当するデータも無い…つまり何も表示されないということになります。

使い方は色々

上記の検証では、非常に単純な計算式を使っています。Tableauユーザーの方はお分かりかと思いますが、計算フィールドは結構自由に色々な式を記述することができます。また、ユーザー関数も、他にも種類があります。つまり、組み合わせ次第では、もっと柔軟なデータ表示の制御が可能だということです。みなさんもちょっと試してみてはいかがでしょうか。(ユーザーではなく、グループで制御するのもアリかと思います。)

データソースの時点でフィルタしてしまう

今まで紹介したユーザーフィルターは、「ワークシート上」で行ってきました。これだけを見ると、「ワークシートが複数あったら、全てにチマチマ設定しないといけないのか?」とうんざりするかもしれません。

実は、ユーザーフィルターは「データソース」自体に仕掛けることも可能です。やり方は簡単です、下記の画像を見れば、すぐにピンと来るかと思います。

データソースの画面で、「フィルタを追加」を選び、作成した手動ユーザーフィルターや自動ユーザーフィルターを指定すれば、その条件でデータソース自体を絞ることができます。データソース自体を絞っているので、このデータソースを使用するワークシートには、全てユーザーフィルターが効く…ということです。

ユーザーフィルターのデメリット

ワークブックは1つ、使用するデータも1つ、でも表示するデータはユーザー別に分けることができる…ユーザーフィルターは非常に便利です。しかし、個人的には、何でもかんでもユーザーフィルターで制御するのではなく、バランスを考えて使用するのがいいと思っています。

ここで、あえてユーザーフィルターのデメリットを挙げてみたいと思います。

(手動)メンテナンスが大変

手動ユーザーフィルターの場合、ユーザーやグループを手で指定するため、ユーザーやグループが変動(増えたり減ったり変わったり)した場合、ワークブック自体に手を加える必要があります。組織によってはユーザー数の変動は、決して少なくないため、その度にワークブックのフィルタを修正するのは、あまり良い運用ではないですよね。

(自動)データの値とユーザーが紐づいている必要がある

では、当エントリで書いている計算フィールド+ユーザー関数の方法はどうでしょうか。「ユーザー名」や「グループ名」を計算式上で定義しているため、ユーザーが増えたからと言って、いちいちメンテナンスする必要はありません。

ただ、問題なのは、これは計算フィールドである以上、「データとユーザー名が紐付いている必要がある」ということです。この方法は、どのような形でも、必ずデータの値とユーザー名を比較することになります。つまり、データの方に、ユーザー名やグループ名が入っていないと、この方法自体を実行できないということになります。

パフォーマンスの懸念

これは、そこまで重大な影響は無いとは思いますが、ユーザーフィルターは特殊とはいえ、フィルターはフィルターなので、複雑なものを設定している場合、パフォーマンスが遅くなる可能性があります。ここはパフォーマンスとユーザーフィルターの利便性を天秤にかけることになります。

おわりに

デメリットを挙げては見ましたが、ユーザーフィルターが便利なのは間違いないので、自社の要件に沿って、ユーザーフィルターを使用するのか、ワークブック自体を分けて適切な権限設定を行って対応するのか、選んでいただければと思います。

参考