「ユーザー関数」使っていますか
今年もTableauユーザーグループ「Tabjo」の
Advent Calendarの季節がやってまいりました。
私はDAY16の担当として、今回のnoteをお贈りします。
はじめに
Tableau Server/Cloudで、組織内のたくさんの人に
データを公開するのはとても素晴らしいこと!
ただ、閲覧する人に応じて見せるデータを制御したいケースもあるかと思います。
例えば、
全社を管理する立場の人は、全社のデータを閲覧してOK。でも、個社の社員には、自社データのみ閲覧OKにしたい、など。
そんな時に使えるのが
「行レベルセキュリティ(Row Level Security)」
ということで、Tableauにおける
行レベルセキュリティのことを書き進めていたのですが
行レベルセキュリティの話をしていると
「ユーザー関数?こんなのあったんだ!」
という反応をいただくことが多かったなーとふと思い
今回のテーマは「ユーザー関数」に変更しました。笑
ユーザー関数とは
ユーザー関数とは、
Tableau Server/Cloudにサインインしているユーザーの情報を取得/参照した結果を返す関数です。
全部で6つの関数があります。
①FULLNAME
②USERDOMAIN
③USERNAME
④ISFULLNAME
⑤ISMEMBEROF
⑥ISUSERNAME
①~③は、それぞれに該当するユーザー情報を
④~⑥は、引数とユーザー情報がイコールか否かを
教えてくれます。
言葉だけでは、イメージが湧きにくいので
実際にどんな結果が返されるのかを見てみましょう。
ユーザー関数を使ってみよう
今回の実験で使用するTableau Cloudには
以下の通りユーザー登録がされているとします。
まずはDesktopからCloudにサインインします。
[サーバー]>[サインイン]>[Tableau Online]>サインイン情報を入力
ワークブックの右下にサインインユーザー名が表示されたらOK!
以下の計算フィールドを作成し、ビューに表示すると…
じゃん!
①~③には、「辻岡 美羽」さんの情報が返され
④~⑤には、「辻岡 美羽」さんの情報と引数がイコール→「真」が返されました。
他のユーザーでサインインしたらどうなるのかも気になりますね。
そんな時は、サインインユーザー名の横の▼から
サインインユーザーを切り替えることができます。
「宮前 誠」さんを選択してみると…
サインインユーザーが「宮前 誠」さんに切り替わり、ビューには…
じゃん!
「宮前 誠」さんに対応する結果が表示されました。
なんとなくイメージが湧いたでしょうか。
ユーザー関数の活用方法
じゃあ、このユーザー関数を使って何をできるの?
ということですが
ユーザー情報の取得・参照結果を用いて
閲覧する人に応じた、データのアクセス制御をできます。
「③USERNAME」を使用した一例を
実装手順に沿って、簡単にご紹介します。
1) 地域とユーザー名のマスタを作成
2) [地域]をキーに、トランザクションに結合
3) 以下のような計算フィールドを作成
4) 3)をデータソースフィルターに入れ「真」を保持
↓
データソース内のデータがサインインユーザー名に紐づくレコードに絞られます。
例えば、「辻岡 美羽」さんがアクセスすると
USERNAMEで「miu.tsujioka@s-store.com」を取得し、その値が[ユーザー名]とイコールになるレコードにデータソースフィルターで絞られ(以下赤枠内)
ビューには、当該データのみ表示されます。
このように、データ1行単位のアクセス制御をすることを「行レベルセキュリティ(Row Level Security)」と言います。
Tableauでの行レベルセキュリティの実装には
前述のもの以外にもいくつかのやり方があります。
それぞれに、メンテナンス性や拡張性において
メリット・デメリットがあるので
制御単位や、権限変更の頻度等を考慮した上で
最適なやり方を選びます。
さいごに
ユーザー関数のことを書きながら
普段ダッシュボードを作る時のことを考えました。
"ビジュアライズの仕方と同じくらいに
ビジュアライズの対象を精査できているだろうか"
データをみんなで共有するのは素晴らしいこと。
でも、何でもかんでも見せるのがベストか、というとそうではないはず。
行レベルセキュリティが求められるような
見せることがNGなケースはもちろん
見せてもNGではないけれど、見えることで
相手を困惑させてしまうこともあるかもしれません。
Get dataも担うCreatorとして
ビジュアライズの仕方だけでなく
ビジュアライズ対象を丁寧に考え
あえて広く公開しない、という選択もできることが
大切なのかもしれないと思いました。
おしまい。