RLS?
R = Row
L = Level
S = Security
データテーブルの中でログインユーザーに応じて見せるデータ(行)を絞り込むことができる。
例えば
- 営業担当者本人の売上だけ閲覧できるようにする
- 担当部署の売上だけ確認できるレポート
こういったレポートを作成するときに、RLSを使用しないで実現させようとすると、担当者の数(部署の数)だけワークスペースを切り分ける必要がでてくるが、RLSを使用すればレポート側でユーザー情報に応じてビジュアライズするデータを絞り込んでくれる。
Let's Try
こんなデータを用意します。
RLS設定前なので全件のデータが見えてしまっています。
担当者がこのレポートを開いたときに、自分の受注実績だけを見せるようにしたいと思います。
モデリングタブ→セキュリティ→ロールの管理
username() または userprincipalname()
ここで特殊?なDAX関数を使用します。
- username() は DOMAIN\User の形式でユーザーを返す
- userprincipalname() は user@contoso.com の形式でユーザーを返す
今回はメールアドレスを利用して絞り込みたいので、userprincipalname()
を使用します。
これでほぼ終わりです。簡単ですね!
設定がきちんとできているか確認
今度は 表示方法
クリックします。
その他のユーザー
その他のユーザーにチェックをいれ、なりすましたいユーザーのメールアドレスを入力します。
先程作成したRLSの設定にもチェックをいれます。
できた!
Power BI Service にも発行→動作をチェック
Power BI Service へ発行したら、データセットの3点リーダー内の「セキュリティ」をクリック。
RLSの設定及び適用の確認をする画面にいきます。
ここでテストしたい人のメールアドレスを登録しておきます。
そして今度は設定した項目(今回でいうとMailで絞り込み)の横の3点リーダーをクリック。
ロールとしてテストを実行します。
できていますね。
※Power BI Service 上でテストする際には、組織内で有効なメールアドレスでしかチェックできませんでした。ですので、事前にPBDでモデルを作成するときに自分のアドレスを含むように変更しています。
この例だと「小川さよ子」さんに自分のメールアドレスを割り振っています。
応用すると
メールアドレスをkeyとして、ユーザー情報で絞り込みが可能なので、役職のテーブルがあれば、
マネージャー以上ではないと閲覧できないレポートを作成したりすることもできますね。
詳しくはドキュメントを。