Power BI 行レベルセキュリティー (RLS) の応用編


各都道府県に営業所があり、所長、副所長、部長、課長、一般職の役職が在籍している場合以下の要件が求められる場合があります。

  1. 所長は自分が所属している営業所の全データを参照したい。
  2. 部長は自分が所属している営業所の、部長以下の役職のデータを参照したい。
  3. 一般職は自分のデータだけ参照。

このような場合、役職や営業所などで 「階層」 を作成してあげることで、実現が可能です。

サンプルデータ

社員ID アカウント 担当拠点 部署 役職
2001 [email protected] 名古屋 営業部・AA課 課長
1002 [email protected] 名古屋 営業部・AA課 部長
1003 [email protected] 関東 営業部・BB課 部長
2004 [email protected] 関東 営業部・BB課 課長
3005 [email protected] 関東 営業部・BB課 主任

※ 社員マスタ

日付 担当者 顧客 売上(千) 拠点
2019年5月1日 [email protected] 〇〇株式会社 500 関東
2019年5月1日 [email protected] 株式会社ABC 250 名古屋
2019年5月2日 [email protected] グローバル XYZ 300 名古屋
2019年5月3日 [email protected] ▼▼商店 50 関東
2019年5月4日 [email protected] Contoso KK 700 名古屋
2019年5月5日 [email protected] DDD 株式会社 400 関東
2019年5月6日 [email protected] 〇〇株式会社 300 名古屋
2019年5月8日 [email protected] 株式会社ABC 200 関東
2019年5月10日 [email protected] グローバル XYZ 150 名古屋
2019年5月11日 [email protected] ▼▼商店 400 名古屋
2019年5月11日 [email protected] Contoso KK 350 関東
2019年5月12日 [email protected] DDD 株式会社 800 名古屋
2019年5月13日 [email protected] ▼▼商店 50 関東
2019年5月15日 [email protected] Contoso KK 500 名古屋
2019年5月16日 [email protected] 〇〇商店 200 名古屋

※ 成績マスタ

社員マスタの加工

最初の社員マスタのままでは、階層を作成するためのデータが無いため [上司] という列を作成します。
※ 部長が一番上と設定しているので、部長の上司は空白です。
※ 上司は、自分より 1つ上の役職を設定します。

社員ID アカウント 担当拠点 部署 役職 上司
2001 [email protected] 名古屋 営業部・AA課 課長 1002
1002 [email protected] 名古屋 営業部・AA課 部長
1003 [email protected] 関東 営業部・BB課 部長
2004 [email protected] 関東 営業部・BB課 課長 1003
3005 [email protected] 関東 営業部・BB課 主任 2004

 役職の階層作成

社員マスタに [新しい列] にて、以下の計算式を追加します。
役職階層 = PATH([社員ID],[上司])

主任さんを例にすると、自分の ID が一番後ろに存在する状態です。
部長さんは、一番前且つ、自分のみ。

ロールの計算式

ロールの管理より、名簿に対し、下記の DAX 式を追加します。

ロールの管理
PATHCONTAINS(
'名簿1'[役職階層],
LOOKUPVALUE('名簿'[社員ID],'名簿'[アカウント],USERPRINCIPALNAME()))

結果

Dsan の場合

Bsan の場合

Esan の場合

あとがき

細かい設定については、以下リンク先を見ていただければと思います。
Power BI 勉強帳:行レベルセキュリティ(RLS)