Power BIのレポートをチームに共有したとき、「東京の営業担当者には東京のデータだけ見せたい」「各部門のマネージャーに自分の部門の数値だけ表示したい」——こうした要件を実現するのがRLS(行レベルセキュリティ / Row-Level Security)です。

この記事では、RLSの概念から静的RLS・動的RLSの設定手順、テスト方法、よくある落とし穴まで初心者向けに解説します。

この記事でわかること
・RLSとは何か・どんな場面で使うか
・静的RLSと動的RLSの違いと使い分け
・静的RLSの設定手順(ロール作成・DAXフィルター・メンバー割り当て)
・動的RLS(USERPRINCIPALNAME()方式)の設定手順
・「ロールとして表示」でRLSをテストする方法
・よくある落とし穴と注意事項

RLS(行レベルセキュリティ)とは何か

RLSとは、Power BI Serviceで共有されたレポートにおいて、ログインしたユーザーに応じて表示されるデータの行を自動的に絞り込む機能です。

たとえば同じ「売上レポート」を共有していても:

  • 東京営業部のAさんには → 東京のデータのみ表示
  • 大阪営業部のBさんには → 大阪のデータのみ表示
  • 全国マネージャーのCさんには → 全データが表示

という制御が1つのレポートで実現できます。

💡 RLSはレポートレベルではなく「データモデル(セマンティックモデル)」レベルのセキュリティです。RLSを設定すると、ダッシュボード・レポート・Excelからの接続すべてに同じ制限が適用されます。レポートを非公開にするだけでは不十分な場合にRLSを使います。

静的RLSと動的RLSの違い

種類 仕組み 向いている場面 管理のしやすさ
静的RLS ロールごとに固定のDAX条件を設定(例:「東京ロール」は [地域]=”東京”) 地域・部門の数が少ない・変わりにくい組織 シンプルだが、ロール数が増えると管理が煩雑
動的RLS ユーザーのログイン情報(メールアドレス)に応じてデータを自動フィルター(マッピングテーブルを使用) ユーザー数が多い・人事異動で担当が変わる組織 マッピングテーブルを更新するだけで対応できる

RLS設定の全体の流れ

  1. Power BI Desktopでロールを作成し、DAXフィルターを設定する
  2. レポートをPower BI Serviceに発行する
  3. Power BI Serviceでロールにメンバー(ユーザー)を割り当てる

静的RLSの設定手順

ステップ1:ロールを作成してDAXフィルターを設定する(Power BI Desktop)

  1. Power BI Desktopで「モデリング」タブ → 「ロールの管理」をクリック
  2. ロールの作成」をクリックしてロール名を入力(例:「東京営業部」)
  3. フィルターをかけるテーブルを選択(例:売上データテーブル)
  4. DAXフィルター式を入力(例:[地域] = "東京"
  5. 同様に他の地域のロールも作成(「大阪営業部」「名古屋営業部」など)
  6. 「保存」をクリック
DAXフィルターはTRUE/FALSEを返す式で書きます。[地域] = "東京" と入力すると、「地域列が東京に一致する行だけを表示する」という意味になります。複数条件の場合は [地域] = "東京" || [地域] = "神奈川" のようにOR条件で書けます。

ステップ2:レポートをPower BI Serviceに発行する

ホームリボンの「発行」からPower BI Serviceに発行します。

ステップ3:ロールにメンバーを割り当てる(Power BI Service)

  1. Power BI Service(ブラウザ)でワークスペースを開く
  2. 発行したセマンティックモデルの「・・・」→「セキュリティ」をクリック
  3. ロール一覧から「東京営業部」を選択
  4. ユーザーの追加」欄に東京営業部のメンバーのメールアドレスを入力
  5. 追加」→「保存」をクリック
  6. 他のロールにも同様にメンバーを追加
🔴 重要な注意:ワークスペースの「管理者」「メンバー」「共同作成者」ロールを持つユーザーにはRLSが適用されません。これらのロールを持つユーザーは常に全データが見えます。RLSを適用したいユーザーはワークスペースの「ビューアー」ロールで追加するか、アプリとして配布する必要があります。

動的RLSの設定手順(USERPRINCIPALNAME方式)

動的RLSはユーザーのメールアドレスとデータの対応関係を「マッピングテーブル」として管理します。

ステップ1:マッピングテーブルを準備する

ExcelなどでユーザーのUPNと表示許可の対応テーブルを作成します。

UserEmail(UPN) 地域
tanaka@company.com 東京
suzuki@company.com 大阪
yamada@company.com 東京
manager@company.com (全国マネージャーは別ロール)

ステップ2:マッピングテーブルをPower BIに取り込んでリレーションシップを設定する

  1. マッピングテーブルをPower BIに取り込む
  2. マッピングテーブルの「地域」列と、売上データテーブルの「地域」列をリレーションシップで紐づける

ステップ3:動的RLS用のロールを作成する

  1. 「モデリング」→「ロールの管理」→「ロールの作成」
  2. ロール名を入力(例:「動的RLS」)
  3. マッピングテーブルを選択し、DAXフィルター式を入力:
LOWER([UserEmail]) = LOWER(USERPRINCIPALNAME())
  1. 「保存」をクリック
💡 USERPRINCIPALNAME()とは:現在ログインしているユーザーのUPN(メールアドレス形式のユーザーID)を返すDAX関数です。LOWER()で大文字・小文字を統一することで、メールアドレスの大文字・小文字の違いによる不一致を防ぎます。

ステップ4:Service側でロールにメンバーを追加する

動的RLSの場合、ロールに「このロールを使う全ユーザー」をまとめて追加します。個別の地域設定はマッピングテーブルで管理するため、ロールのメンバー管理はシンプルです。

RLSをテストする方法

Power BI Desktop でのテスト

  1. 「モデリング」タブ → 「ロールとして表示」をクリック
  2. テストしたいロールにチェックを入れる
  3. 動的RLSのテストは「その他のユーザー」にチェックを入れ、メールアドレスを入力
  4. 「OK」をクリックするとそのロール・ユーザーとして見えるデータが確認できる
  5. 確認後は「ロールとして表示」のバーにある「×」をクリックして解除

Power BI Service でのテスト

  1. セマンティックモデルの「・・・」→「セキュリティ」を開く
  2. テストしたいロールの「テスト」をクリック
  3. そのロールで見えるレポートが表示される

よくある落とし穴と注意事項

落とし穴 説明と対処法
管理者・メンバーにRLSが効かない ワークスペースの「管理者」「メンバー」「共同作成者」にはRLSが適用されない。RLS対象ユーザーは「ビューアー」で追加するかアプリとして配布する
USERNAME()とUSERPRINCIPALNAME()の混同 クラウド環境ではUSERPRINCIPALNAME()(メールアドレス形式)が推奨。USERNAME()はオンプレミスや環境によって「ドメインユーザー名」形式で返ることがある
大文字・小文字の不一致 メールアドレスの大文字小文字が一致しないとRLSが効かない。LOWER()で統一するか、マッピングテーブルのUPNを一定の形式に揃える
マッピングテーブルにいないユーザーは全データが見える 動的RLSでマッピングテーブルに登録されていないユーザーはフィルターが当たらず全データが見えることがある。デフォルトで空のデータを返すようにDAXを設計するか、全ユーザーを必ず登録する運用ルールを設ける
ロールを発行したのにServiceで設定が見つからない Power BI DesktopでRLSを設定した後は必ず再発行(上書き発行)する必要がある

静的RLS vs 動的RLS:どちらを選ぶか

状況 推奨
地域・部門が3〜5種類で固定 静的RLS(シンプルで管理しやすい)
社員が多く、担当地域が変わることがある 動的RLS(マッピングテーブルの更新だけで対応)
「自分のデータだけ見える」営業個人レポート 動的RLS(USERPRINCIPALNAME()で自動制御)
全国マネージャーは全データを見たい 静的RLS・動的RLSを問わず専用ロールを作成(フィルターなし)

RLSはPower BIでセキュアなデータ共有を実現する重要な機能です。「誰に何のデータを見せていいか」をきちんと設計してから実装することが、運用ミスを防ぐ最大のポイントです。まず静的RLSでシンプルな地域別制限から試してみましょう。

ABOUT ME
IT解決チャンネル編集部
ExcelやWord、Windows、Googleスプレッドシートなど、ビジネスで使うITツールの使い方を初心者にもわかりやすく解説しています。関数の使い方から実務で役立つ応用テクニックまで、画像付きでていねいに紹介。パソコン操作で困ったときの頼れる情報源を目指しています。