Power BIのRLS(行レベルセキュリティ)完全ガイド:設計・設定・よくある失敗

Power BIで「同じレポートを配りたいけれど、部署や担当者ごとに“見えてよいデータだけ”を出したい」という場面はよくあります。そんなときの基本解がRLS(行レベルセキュリティ)です。この記事では、power bi rls 設定の手順をただ並べるだけでなく、漏れにくく・運用しやすく・遅くなりにくい設計の考え方から、具体的なDAX例、つまずきポイントの回避までを一気通貫で解説します。

RLSでできること・できないこと

RLSが得意なのは「閲覧者に応じて行(レコード)を絞り込む」ことです。たとえば、営業Aには自分の顧客だけ、関東支社には関東の売上だけ、取引先ごとに自社データを分離して提供したい、などに向きます。
一方で、RLSは万能ではありません。列そのものを隠したい、テーブルごと見せたくない、といった要件には別の仕組み(列/オブジェクト単位の制御や、そもそものモデル分割)が必要になります。また、RLSは「Power BIのデータセット上での閲覧制御」なので、元データソースに直接アクセスできる人まで守る仕組みではありません。まずは「どこを守りたいか(レポートの閲覧なのか、データソースそのものなのか)」を切り分けましょう。

設計編:最初に決める3つのこと

  1. セキュリティの軸を決める
    RLSは「何で絞るか」が肝です。代表例は以下です。
    ・担当者ID(SalesRepID)
    ・部署コード(DeptCode)
    ・支社/地域(Region)
    ・顧客ID(CustomerID)
    ・テナントID(TenantID:外部向け提供で多い)

軸はできるだけ安定したキー(ID)で持つのが原則です。名称やメールアドレスの表記揺れは運用で必ず事故ります。名称は表示用、IDは制御用、と役割を分けます。

  1. 静的RLSか、動的RLSかを決める
    ・静的RLS:役割(ロール)ごとに固定の条件を書く(例:関東ロールはRegion=”Kanto”)
    ・動的RLS:ログインユーザーに応じて条件を変える(例:UserEmail=USERPRINCIPALNAME()で自分の許可行だけ)

実運用で増減が多いのは動的RLSです。静的RLSは「組織単位で少数の区分」なら管理が楽ですが、人の異動や兼務が多い場合はロール爆発しやすいので注意してください。

  1. “権限表(セキュリティテーブル)”をモデルに持つ
    おすすめは、許可情報を1つのテーブルに集約する設計です。例:
    Security
    ・UserEmail(ユーザー識別子)
    ・RegionID(許可される地域)
    (担当者軸ならSalesRepID、顧客軸ならCustomerID)

このSecurityテーブルをディメンション側(Region、SalesRep、Customerなど)につなぎ、そこからファクト(売上など)へフィルターが伝播する形にします。RLSをファクトにベタ書きするより、漏れにくく保守しやすく、パフォーマンスも出やすいです。

設定編:Power BI DesktopでのRLS作成手順
ここからは、power bi rls 設定の王道フローを、実際に手を動かす順で説明します。

  1. モデルにSecurityテーブルを用意する
    ・社内のマスタ(Excel/SharePoint/DB)から取り込む
    ・最低限「ユーザー識別子」と「許可キー」を持たせる
    ・複数許可(1人が複数地域など)は行を増やして表現する(UserEmail×RegionIDの組み合わせで複数行)

  2. リレーションシップを張る
    例:Security[RegionID] → Region[RegionID](多対一)
    Region → Sales(RegionIDで多対一)
    この“一本道”ができると、Securityで絞った結果がRegionに伝わり、さらにSales(売上)に伝わります。

  3. 役割(ロール)を作成する
    モデリング(または「管理」)メニューから「役割の管理」を開き、ロール名を付けます。
    動的RLSの場合、フィルターをSecurityテーブルに設定するのが定石です。

  4. DAXフィルターを書く(動的RLSの基本形)
    Securityテーブルに以下の条件を入れます。
    Security[UserEmail] = USERPRINCIPALNAME()
    これだけで「ログインユーザーのUPNと一致する行だけが残る」→「その行に紐づくRegionIDだけが許可」→「売上が絞られる」という流れになります。

表記揺れ対策として、両側を小文字化するのも有効です。
LOWER(Security[UserEmail]) = LOWER(USERPRINCIPALNAME())

  1. Desktopでテストする(表示方法に注意)
    「ロールとして表示(View as)」を使い、
    ・ロールを選択
    ・「他のユーザー」を指定(USERPRINCIPALNAMEの代替)
    で確認します。
    「自分のアカウントで正しく絞れる」だけでなく、「別ユーザーを仮定しても意図どおりか」を必ず見ます。

公開後の設定編:Power BI Serviceでの割当(ここが抜けがち)
Desktopで作っただけでは終わりません。公開後に“誰にRLSを適用するか”をサービス側で割り当てる必要があります。

  1. データセット(セマンティックモデル)のセキュリティを開く
    対象のデータセットを選び、セキュリティ設定を開きます。

  2. ロールにユーザー/グループを追加する
    ここが最重要ポイントです。ロールに割り当てられていないユーザーがデータセット/レポートにアクセスできる状態だと、RLSが適用されずに(権限の範囲で)全データが見えてしまうことがあります。
    個人を直接追加するより、Azure ADのグループ(部署やプロジェクト)をロールに入れる運用が現実的です。異動や入退社のたびにPower BI側を触らずに済みます。
    動的RLSでも「閲覧対象者(またはグループ)をロールに入れる」ことは必須だ、と覚えておくと事故が減ります。

  3. 検証は“閲覧者権限”のアカウントで行う
    管理系の権限を持つユーザーだと、RLSの検証にならない(想定どおりに制限されない/挙動が違う)ことがあります。検証用の閲覧アカウントを用意し、そこで見え方を確認するのが安全です。

実装パターン集:現場で多い設計とDAX
パターンA:地域/部署で絞る(最も安定)
Security(UserEmail, RegionID)→ Region → Fact
ロール条件:Security[UserEmail] = USERPRINCIPALNAME()
特徴:許可単位が明確で、集計の整合が取りやすい。推奨度が高い。

パターンB:担当者で絞る(担当替えが多い場合は注意)
Security(UserEmail, SalesRepID)→ SalesRep → Fact
担当替えが頻繁なら、権限表の更新フロー(誰が、いつ、何を根拠に更新するか)を業務に組み込みます。

パターンC:顧客ごとに見せる(外部共有で多い)
Security(UserEmail, CustomerID)→ Customer → Fact
顧客数が多い場合、権限表の行数が膨らみます。更新頻度と性能を見ながら、顧客グループ単位にする、上位キー(TenantIDなど)でまとめる、といった設計も検討します。

パターンD:複雑な許可条件(複数軸・例外あり)
「基本は部署、ただしこの人だけ例外で別部署も見える」のようなケースは、例外をDAXに埋め込むより、権限表に例外行を足す方が長期的に安全です。ルールが見える化され、監査もしやすくなります。

運用編:安全に回すためのチェックリスト
権限は“作って終わり”ではなく、運用で壊れます。最低限、次を仕組みにしてください。

・権限表の更新責任者を決める(情シス、管理部門、各部門など)
・UserEmail(UPN)の形式を統一する(大文字小文字、別名、旧姓など)
・権限表のキーは必ず一意に管理する(同じUserEmailに同じRegionIDが重複しない)
・権限表はレポート上で非表示にする(閲覧者に割当情報を見せない)
・毎月/四半期に“棚卸し”する(退職者・異動者・一時付与の解除)
・テスト用アカウントを用意し、想定パターンを定期検証する

よくある失敗と対処法

失敗1:Desktopでは絞れているのに、サービスで全件見える
原因の多くは「サービス側でロールへの割当がされていない」ことです。公開後は必ずデータセットのセキュリティで、対象ユーザー(またはグループ)をロールに入れてください。検証は閲覧者権限のアカウントで行うのが安全です。

失敗2:USERNAME()を使って一致しない
DesktopとServiceで返る形式が変わることがあります。ユーザー識別にはUSERPRINCIPALNAME()を基準にし、権限表のUserEmailと揃えるのが無難です。

失敗3:権限表はあるのに、フィルターが伝わらない
多くはリレーションの向き・非アクティブ・キー不一致です。
・Securityからディメンションへ正しくつながっているか
・ディメンションからファクトへつながっているか
・キーのデータ型が一致しているか(文字列/数値混在は要注意)
を順に確認します。最短で効くのは「Security→ディメンション→ファクト」の一本道を作ることです。

失敗4:LOOKUPVALUEでエラー(複数値が返る)または遅い
権限表に重複があるとLOOKUPVALUEが複数行にヒットして失敗します。また、ファクトに直接LOOKUPVALUEで条件を書くと、行数が多いほど遅くなりがちです。
対策は、権限表を正規化(重複排除)し、できるだけ“関係で絞る”設計に寄せることです。

失敗5:計算テーブル/集計テーブルで情報が漏れる
計算テーブルは更新時に作られるため、意図せず「全体の集計結果」を持つテーブルができることがあります。RLSのフィルターが届かない独立テーブルに全体集計を置くと、閲覧者が全体像を推測できてしまいます。
集計は可能な限り通常のディメンション/ファクト上のメジャーで行い、どうしてもテーブル化するなら、RLSが伝播する関係(または同じ絞り軸)を確実に持たせます。

失敗6:双方向フィルターで想定外の絞り込み・表示崩れ
クロスフィルター方向を「両方向」にすると、意図しない経路でフィルターが回り、結果が変わることがあります。RLSと組み合わさると原因特定が難しくなるため、基本は単方向で設計し、必要な場合だけ最小限に両方向を使う方針が安全です。

失敗7:同じ人が複数部署/複数担当を持つと管理が破綻する
「1人1部署」の前提で作ると、兼務が来た瞬間に崩れます。最初から“1人に複数行を許す”権限表で設計し、例外は行追加で表現できるようにしておくと、後から強いです。

性能編:遅くしないためのコツ

・RLSの条件は、なるべく小さいテーブル(Security)に置く
・ファクトに複雑な条件を直書きしない(関係で伝播させる)
・権限表の行数を必要以上に増やさない(顧客単位の付与は要注意)
・キー列は辞書化が効く形(整数IDなど)を優先する
・文字列比較が多い場合は、表記統一や小文字化列の用意を検討する

よくある質問

Q:RLSを入れると、エクスポートで全件抜かれませんか?
A:基本的には、閲覧者が見えている範囲のデータだけが対象になります。ただし「誰にどの権限を与えるか(ワークスペースのロール、データセットの権限、共有方法)」次第で体感が変わるため、権限設計とセットで確認してください。

Q:レポートごとにRLSを変えられますか?
A:RLSはデータセット側の設定です。同じデータセットを使う複数レポートで共通に効きます。レポートごとに制御を変えたい場合は、データセットを分ける、モデルを分割するなど、設計から見直すのが基本です。

まとめ

RLSの成功は、DAXの小技よりも「権限表を中心にしたモデル設計」と「サービス側の割当・運用フロー」にかかっています。まずはSecurityテーブル+USERPRINCIPALNAME()の動的RLSを基準に、ディメンション経由でファクトへフィルターを流す形を作りましょう。そこまでできれば、部署・地域・顧客などほとんどの要件は安全に捌けます。最後に、公開後の割当と検証(閲覧者権限での確認)だけは忘れずに。

こんな課題がある場合はご相談を

  • 「セマンティックモデルは聞いたことがあるけど、具体的にどう始めればいいかわからない」
  • 「既存のデータ構造が複雑すぎて、うまくモデル化できない」
  • 「DAX の高度な使い方がわからない」

こういったお悩みをお持ちの方も多いのではないでしょうか。
Power BI の導入・活用でお困りの際は、ぜひ無料相談をご利用ください。
もし困り事があるなら、まずは無料相談はこちら

コンサルサービスの詳細や成功事例なども合わせてご紹介いたします。
社内にデータ活用のノウハウや専門人材が十分いない場合でも、弊社が伴走しながら最短ルートで成果を出せるようサポートいたします。


セマンティックモデルを活かすためのスキルアップ

📊 Power BIでより効率的なレポート作成を!

DAX 関数をマスターして、実務で使えるスキルを身につけませんか?
Power BIハンズオンセミナー中級編では、短時間でデータモデリングのノウハウを学び、ビジネスに活かせるレポート作成を実践形式で習得できます。

📈 Power BIスキルを次のレベルへ!

DAX関数 × データモデル設計 で、複雑なデータ分析やレポート作成もスムーズに!
Power BIハンズオンセミナー中級編 なら、実践形式で学べるから即戦力に。
業務効率をアップし、社内での評価を高めるチャンス!

セマンティックモデルを最大限に活用するためには、DAX やデータモデル設計の知識が欠かせません。レポートの正確性やパフォーマンスを大幅に改善できるため、学んでおいて損はない分野です。

関連記事

この記事へのコメントはありません。

カテゴリー

アーカイブ