こんんちは!Yokoです。
ライトテーブルの記事を書いて疲れました😩
もう書くのやめたいな…
と思いつつ、忘れてしまいそうなネタなので、ついでに書きます😕
それはですね…
「特定の人にしか見えないシートを作る」というコンテンツです。
ライトテーブルで商品メンテナンスのシートを作ってみたのですが、これって誰でもメンテできちゃいけないから、管理者以外には見えないほうがいい。
また、このシートはマネージャー以上しか見えないようにしたい!
なんていうシチュエーションは結構あったりするわけで、そんな時、皆さんはどうしてますか?
僕なりの方法ではあるのですが、こんな方法があるよ〜というワザをご紹介します。
GetUserAttrというシステム関数
Qlikのシステム関数にGetUserAttrという関数があるのはご存知ですか?
この関数は、ユーザーの属性を取得する関数で、メールアドレスやグループなどを取得できます。
メールアドレスを取得する時は、以下のように指定します。
GetUserAttr('userEmail')
Qlik Cloudはログインする時に、メールアドレスを使いますので、メールアドレスで個人を識別できますよね。
それなら、利用しているユーザのメールアドレスで、シートを表示する条件を指定してあげればいい!
そうそう、もうおわかりですよね?
早速、GetUserAttr関数を使って、特定のユーザにしか見えないシートを作っていきますよ。
ユーザリストの作成
Qlikを利用するユーザの中から、特定のシートを表示できるユーザのリストを作成します。
これはExcelでOK。
例として、こんなユーザリスト(EMAILリスト)を作成して、Qlikで読み込みます。

ユーザリストをアイランドテーブルに取り込む
ユーザリストのExcelから特定のシートを表示できるユーザをusersテーブルにロードします。
これで、アプリ内にEMAILのみからなるusersテーブルができます。
このテーブルは他のテーブルとは全く紐づかないアイランドテーブルです。
users:
LOAD
EMAIL
FROM [lib://<Path>/email.xlsx]
(ooxml, embedded labels, table is Sheet1);
制限を掛けたいシートの表示条件を設定する
制限を掛けたいシートの「条件の表示」に以下のような数式を設定します。
=Match(GetUserAttr('userEmail'), '$(=Concat(distinct EMAIL, chr(39) & ',' & chr(39)))')

これで、現在のユーザ(=GetUserAttr(‘userEmail’))が、シートを表示できるユーザのリスト ‘$(=Concat(distinct EMAIL, chr(39) & ‘,’ & chr(39)))’ に存在するかどうかが帰ってきます。
ユーザのリストに存在すれば、このシートは表示されます。
もし、email01@liner-notes.co.jpさんがログインしていれば、Match(‘email01@liner-notes.co.jp’, ‘email01@liner-notes.co.jp’,’email02@liner-notes.co.jp’)ということになり、email01@liner-notes.co.jpは、’email01@liner-notes.co.jp’,’email02@liner-notes.co.jp’のいずれかに合致していますので、下記のようにシートは見えています。
尚、この設定を間違えると、作成したシートが二度と表示できなくなる危険性があるので、シートを複製してバックアップと取っておくことをお勧めします。

対象外のユーザでアクセスしてみる
一旦、ログアウトして、リストにないユーザでログインし、シートを確認してみます。
email03@liner-notes.co.jpでアクセスしてみました。
はい、シートは見えなくなりましたね。

応用編:ボタンを非表示にもできる
シートの「条件の表示」を使って、非表示にできるのであれば、Qlikアプリ内で、条件を指定できるところはすべてこの手法が使えるということになります。
例えば、「テーブルの特定の列を見えないようにする」とかね。
今回は、特定の人しか[更新]できないように、[更新]ボタン自体を非表示にしてみます。
シートの「条件の表示」の数式は削除しておきます。
ボタン自体を表示する条件設定はできないので、レイアウトコンテナにボタンを格納して、ボタンオブジェクトの「条件の表示」に先程と同じ数式をコピペしてあげます。


対象外のユーザ(email03@liner-notes.co.jp)でログインすると、こんな風にボタンは表示されなくなりました。
この方法を使えば、「特定のユーザにしか更新処理させない」なんていうことが実現できますよね。

まとめ
特定のユーザにしか表示されないシートやボタンを作成するため、GetUserAttr(‘userEmail’)でメールアドレスを使って非表示にする方法をご紹介しました。
なあーんだ!って感じですよね。
でも、こんなに簡単に実現できるんです。
さらに応用すると、ユーザリストに部門などを追加して
Match(GetUserAttr('userEmail'), '$(=Concat({$<部門={'営業部'}>} distinct EMAIL, chr(39) & ',' & chr(39)))')
というような条件を指定すれば、営業部のメンバーだけが表示できるシートも作成できますよ。
Excelでメンテナンスできるというのも楽ですよね。
ではまた!


