Tableau データソースにユーザーフィルター(行レベルセキュリティ)を持たせる
へりおんです。
ダッシュボードを公開していると、「ローデータ欲しい」と言われるのはあるあるですが、データ量が多いとExcelなどでは無理ですし手間です。
データソース自体を共有しようにも、ワークブックでユーザーや組織でアクセスできるレコードに制限をかけてる場合は、全量データが入っているデータソースは共有も厳しいです。
また Tableau Pulse はメトリクスを作るときに(今のところ)「データソース」を選択する仕様のため、閲覧するユーザーに対してレコード単位でアクセス制御したい場合に困ります。
そこで、Tableau DesktopやPrep、Pulseでデータソースに接続しても、ユーザーによってアクセスできるレコードが制御できるよう、データソース自体にユーザーフィルター(行レベルセキュリティ)を適用してみます。
■Tableau Desktopで対象データを読み込む
Tableau Desktopで対象のデータを読み込みます。データ自体はPrepで出力した .hyper や .csv 、クラウドやオンプレミスのデータベースとかExcelでも大丈夫です。例として「サンプル - スーパーストア」のExcelを使ってみます。
■アクセス権設定用の計算フィールドを作る
アクセス権設定用の計算フィールドについては、ユーザーフィルターやユーザー関数で作成します。ユーザーフィルターは「サーバー」→「ユーザーフィルターの作成」→「(対象のディメンション)」で作成できます。ユーザーフィルターとユーザー関数を複合させた計算フィールドを作ることもできます。
◇ユーザーフィルターで作る場合
◇ユーザー関数で作る場合
ついでにデータペインの階層やフォルダ構造などを整理しておくと、データソースの利用者が楽になると思います。
■データソースフィルターを設定し抽出する
先ほど作成した計算フィールドをデータソースフィルターに入れます。
続いて、データを抽出します。なお、データソースフィルターを利用していますので、抽出できるレコードは抽出するユーザーに依存されます。できれば全レコードアクセス権のあるユーザーで抽出することをお勧めします。
抽出が完了すると、データソースのアイコンが変わります。これで抽出が完了しました。
■データソースをパブリッシュしパーミッションを設定する
いよいよTableau Cloud にデータソースをパブリッシュします。「サーバー」→「データソースのパブリッシュ」→「(対象のデータソース)」をクリックします。パブリッシュする場所は任意に選択してください。
パブリッシュが完了したら、データソースに対してユーザーが接続できるようパーミッションを設定しておきます。
これで準備は完了です。なお、今回はTableau Desktop(ローカル環境)からデータソースをパブリッシュしていますので、Tableau Bridgeが利用できる環境でしたら、Tableau Bridgeでデータの更新ができます。
■データソースに接続してみる
設定に問題がなければ、パブリッシュしたデータソースに接続すると、ユーザーによってアクセスできるデータが変わっていると思います。また、Tableau Desktopで接続すると、データペインもデータソースをパブリッシュした際の構成になっています。
■補足
今回はローカル環境のデータを使う前提で書きましたので、データの更新はTableau Bridgeを利用することになると思います。そのためPrepでデータを作成される場合もローカル環境で実行することになるため、Prep CLI などと組み合わせるのがベターかと思います。
また Tableau Cloud の「パブリッシュされたデータソース」でも、同じように行レベルセキュリティを適用したデータソースの作成は可能です。
※2024.3時点ではPrep等でパブリッシュされたデータソースは未対応
※ユーザーフィルターも利用できないため、ユーザー関数での設定が必要
■最後に
いかがだったでしょうか?Tableauで行レベルセキュリティを実装する場合、設定したCreatorにしか中身が分からないのが難点です。
ただ、データソース側でアクセスできるレコードの制御ができると、データソース自体公開することができるようになるケースもあると思います。
その場合、データソースへのパーミッションを気にせずに済み、ワークブック自体も共有できたりしますので、ワークブック共有してほしいという声にも答えやすくなると思います。
皆さんの参考になれば幸いです。