いつも勉強させていただいております。初めてご質問をさせていただきます。
UXのDisplayにShow_Ifという欄があります。これを使ってユーザの属性に応じたMenuの表示・非表示の切り替えをしたい思っています。
UXのDisplayにShow_Ifという欄に以下の数式を設定し、ユーザマスタというテーブルで"管理者"という属性を持つユーザだけにメニューを表示させようと思ったのですが、表示されません。
"管理者"=LOOKUP(USEREMAIL(),"ユーザマスタ","メールアドレス","Role")
どのようにすればMenuの表示・非表示の切り替えができるかご存じありませんでしょうか。
迅速なご解説をいただき誠にありがとうございました。無事表示をコントロールすることができました。Displayを使った表示のコントロールは初めてであまり情報も載っていなかったので不安でした。辻様のご解説をいただき不安が怪異称しました。今後こうした状況になった場合は同じ答えを返す別の命令文でもトライしてみようと思います。ありがとうございました!😀
Lookup関数を使う手法もありますが、ここでは同じ結果を導き出すselect関数を使ったアプローチにて。
まず前提の理解としてユーザーのデータは
テーブル名 :ユーザマスタ
ユーザーのメルアドのフィールド名:メールアドレス
ユーザーの役割・権限のフィールド名:Role
で、Roleが「管理者」となっているユーザーにのみ対象のviewを表示するように設定することを目的とします。
その場合
"管理者"= ANY(
SELECT(ユーザマスタ[Role],[メールアドレス]=USEREMAIL())
)
ログインしているユーザーのメルアドはUSEREMAIL()の関数で補足。その値とユーザマスタのテーブルのメールアドレスの値が同じrow(行)をselect関数で返します。
select 関数は常にlistタイプの値を返します。おそらくは一人のユーザーは一行のみテーブルに保存され、重複はないと思いますのでselect関数の結果は常に1行。ただし、expressionとしては一行のリストとしての認識となることからこれを一つの値として変換するためにany関数でwrapします。これで一つのroleのvalueが得られます。この結果が管理者であれば、関数はtrueというresultを返しますのでその場合、アプリ上にview表示されるというロジックです。
select関数を使うかlookup関数を使うか?これは好みの問題です。。。。