セッション・パラメーターを使って、ログインしているユーザー情報をもとにデータを自動的にフィルタする方法

Exploratoryでは、Exploratoryデスクトップで作成したダッシュボードやノートをサーバーにパブリッシュして、他の人がブラウザを通して閲覧可能なように共有することが可能です。

一方で、サーバーにパブリッシュされているコンテンツに対しては、さまざまなユーザーがさまざまな切り口で見たいというニーズがあります。

そういったときには、Exploratoryのパラメーター機能を使って、ダッシュボードやノートを閲覧するユーザーが自分が見たい内容に合わせてパラメーターを実行して、データをフィルタすることが可能です。

このパラメーターは非常に強力な機能である一方で、「アジアの担当者にはアジアのデータだけが見えるようにして、それ以外のデータを一切見せないようにしたい」といったニーズがあったときに、通常のパラメーターだけでは簡単に対応できないという課題があります。

このようなときに多くの場合、叶えたいことは、サーバーにアクセスした人(ユーザー)に応じて、一つのダッシュボードのデータが自動的に書き換わることです。

そこで役立つのがセッション・パラメーターです。

セッション・パラメーターとは

セッション・パラメーターは、Exploratoryデスクトップやサーバーにログインしたユーザーの情報をもとに、動的に閲覧可能なデータをフィルタする機能です。

セッション・パラメーターを利用することで、管理するダッシュボードは1つでありながら、アクセスする人によって表示される内容が変わるといったことを実現できます。

そのため、他の人に見られたくないデータを見せないようにすることも可能です。

セッション・パラメーターで指定可能なユーザー情報

セッション・パラメーターはExploratoryデスクトップやExploratoryサーバーにログインしているユーザーの情報をもとに機能します。

利用可能なユーザー情報は以下の4つです。

  • email: ログインしているユーザーのメールアドレス(Exploratoryのアカウントのメールアドレス)
  • firstname: Exploratoryのアカウントに登録されている名前
  • lastname: Exploratoryのアカウントに登録されている苗字
  • teamnames: ログインしているユーザーが所属している全てのチーム

なお、チーム名は、チームの管理画面から確認が可能です。

ログインしているユーザー情報をもとにデータを自動的にフィルタする

セッション・パラメーターの基本的な使い方は通常のパラメーターとほとんど同じで、フィルタのダイアログで、処理対象の列や演算子を指定したうえで、パラメーターを設定するという点は通常のパラメーターと変わりません。

ただし、通常のパラメーターとは異なる特徴的な動きがあります。

通常のパラメーターであれば、事前にパラメーターを定義する必要がありますが、セッション・パラメーターではパラメーターを事前に定義する必要はありません。

セッション・パラメーターの場合、アクセスした人のユーザー情報で自動的にフィルタが実行されます。そのため、パラメーターペインからパラメーターを実行する操作は行いません。

これがセッション・パラメーターの挙動の最大の特徴です。

また、セッション・パラメーターを使ってデータを自動的にフィルタする方法は、データの構造や閲覧権限の設計によって適切なアプローチが異なります。そのため、ここからは、それぞれの前提に応じた設定方法を紹介します。

ユーザーやチームによって閲覧可能な行が一意に定まる場合

例えば、特定の製品カテゴリーにアクセスできる人が田中さんのみ、というように、該当の行にアクセスできる人が一意に定まる場合は、各製品カテゴリーに対応するユーザー情報の列があれば、そのユーザー情報を使ってデータをフィルタできます。

セッション・パラメーターを利用すると、田中さんがアクセスした場合は、田中さんのメールアドレスをもとにデータがフィルタされ、結果として、電化製品の行にデータがフィルタされる、といった挙動をとるようなイメージです。

ここからは、1行が1つの注文を表す「注文」を使って見ていきます。

このデータには「製品カテゴリー」という列があり、この製品カテゴリーごとに閲覧できる人が決まっている、という背景があります。

そのような時に、まず一番最初に用意すべきなのが、製品カテゴリーに対応する権限リストです。

このデータは1行が製品カテゴリーごとの担当者を表していて、ユーザーごとに閲覧可能な製品カテゴリーの情報を列に持っています。

このようなデータを使うと、製品カテゴリーを「結合キー」にして、注文データに製品カテゴリーのデータを結合(左外部結合)し、製品カテゴリーに対応するEメールアドレスのデータを注文データに追加することが可能になります。

データを結合したら、メールアドレスの列ヘッダーメニューから「フィルタ」、「等しい」を選択します。

フィルタのダイアログが開いたら、パラメーターにチェックを付けて、メールアドレスを使ったセッション・パラメーターを選択し、実行します。

これでログインしているユーザーのメールアドレスをもとに自動的にデータがフィルタされるセッション・パラメーターを追加できました。

これでこのステップの影響をうけるステップ、チャート、レポートにおいて、田中さんがアクセスしたら自動的に「電化製品」のデータにフィルタされる、あるいは鈴木さんがアクセスしたら、「家具」のデータにフィルタされる挙動になります。

ユーザーやチームごとに閲覧可能な行が一意に定まらない場合

前述したケースはシンプルなケースですが、常にユーザーやチームごとに閲覧可能な行が一意に定まらない場合があります。

例えば、先ほどの注文データにおいて、「マーケット」で取りうる値の選択肢がアジア、アフリカ、ヨーロッパ、ラテンアメリカ、北米の5つあったとします。

役職のない社員であれば、ある特定のマーケット(例えばアジアのみ)だけしか見られなくても問題ないことがありますが、一方で役職者になると、すべてのマーケットを見る必要が出てくるといったケースが生じます。

このような場合、1人のユーザーが複数のマーケットにアクセスできる必要があり、単純に1対1の対応関係では表現できません。

そのような場合には、データを結合するアプローチよりも、セッション・パラメーター用の権限リストをあらかじめ作成しておくことが望ましいと言えます。

そして、このようなケースでは、ユーザー情報でデータを直接フィルタするのではなく、ユーザー情報によってフィルタされた別列を使って、パラメーターの値のリストを生成し、そちらを使ってフィルタをかけていきます。

例えば、アクセスできるマーケットが重複するケースを考えてみましょう。

このデータは1行が1人の担当者がアクセス可能なマーケットを表しており、田中さんは北米とラテンアメリカに対して閲覧権限を持っていますが、鈴木さんは北米に対してしか閲覧権限を持っていないという状況です。

まず最初に、このセッション・パラメーター用のデータフレームに対して、メールアドレスを使って、データをフィルタするステップを追加します。

「email」の列ヘッダーメニューから「フィルタ」、「等しい」を選択します。

フィルタのダイアログが開いたら、演算子に「等しい」が選択されていることを確認して、パラメーターには「($email) (単一選択)」を選択して実行します。

するとログインしているメールアドレスをもとに、データがフィルタされるステップが追加され、現在ログインしているユーザー(田中さん)のデータでフィルタが実行されます。

このステップにより、元の権限表は、アクセスする人(田中さん)が閲覧可能なマーケットに絞られました。

次に、このマーケット列の情報を使ったパラメーターを設定するために、プロジェクトメニューの「パラメーター」をクリックします。

パラメーターの設定ダイアログが表示されたら、「新規パラメーターの追加」ボタンをクリックし、新しいパラメーターを作成します。

任意のパラメーターの名前や表示名を付けて、データ型はCharacter型(文字列)にします。

入力タイプには「テキスト入力」、「値のリスト(単一選択)」または「値のリスト(複数選択)」のいずれかを選択します。

このとき、値が常に1つに定まるようにしたいときには、「値のリスト(単一選択)」を選択し、「 選択なしのサポート」をアンチェックしてください。この設定をしなかった場合、何も値を選択しないと全ての値が返る挙動になるためです。

重要なポイントは、データフレームを動的に取得する必要があるため、値のリストのオプションで「データフレームから値を取得」を選択した上で「値を動的に取得」のオプションを有効にすることです。

データフレームには、先ほどセッション・パラメーターによるフィルタを設定した、権限管理用のデータフレームと、セッション・パラメーターを設定したステップを指定します。

最後に、値の列にはマーケットを選択し、保存します。

これにより、セッション・パラメーターによって、権限表がログインしているユーザーでフィルタされた状態でマーケットのリストが自動生成されます。

現在のユーザーが田中さんだった場合、上記の設定において、田中さんは、北米とラテンアメリカに対する権限しかもたないため、その両者だけを含む値のリストが動的に生成されていることになります。

パラメーターを保存したら、注文のデータフレームに戻ってステップメニューから、フィルタのステップを追加し、マーケット列から「フィルタ」を選択します。

フィルタのダイアログが表示されたら、先ほど作成したマーケットのパラメーターを指定し、実行します。

このようにすることで、ユーザーごとに動的にマーケットのリストが変化し、それに応じてアクセスできる内容が変わるようになります。

ログインしているのが田中さんの場合、パラメーターペインに「北米」と「ラテンアメリカ」のみが表示され、鈴木さんがアクセスした場合は「北米」のみが表示される、といった挙動になります。

セッション・パラメーターを利用して、階層関係があるパラメーターの値のリストを動的に変更する

これまでに紹介してきた2つのケースはいずれも、1つの列に対するフィルタの話でした。

しかし、パラメーターを利用するときには、階層関係のあるデータを扱いたいケースもあります。

例えば、北米というマーケットの中にはいくつかの地域が含まれているような構造のデータで、田中さんという人が決まると、田中さんはアメリカ中部、あるいはアメリカ南部にアクセスできるといった形で、親パラメーターと子パラメーターの両方を動的に制御したいケースです。

このような時には、セッション・パラメーターを使ってフィルタしたデータを使って、動的に階層関係にあるパラメーターのリストを生成することで、期待している処理を簡単に実現できます。

そして、このような設定をしたいときには、以下のように階層構造になっており、列には親カテゴリーや子カテゴリーの情報を持ち、1行が1人のユーザーがアクセス可能な最下層の値を表すデータが必要です。

上記のようなデータを用意しておくと、先ほどと同じように、セッション・パラメーターを使ってメールアドレスをもとにデータをフィルタするステップを追加すると、田中さんのデータにフィルタされているので、田中さんが閲覧可能なマーケットおよび地域のリストの両方が該当のデータフレームに残ります。

このデータを使って、マーケットという親パラメーターの、子パラメーターである地域のパラメーターを作成していきます。

プロジェクトメニューから「パラメーター」をクリックします。

続いて、「パラメーターを作成」ボタンをクリックします。

先ほどと同じように、名前・表示名には任意の内容を入力し、データ型にはCharacter型を選択します。

入力タイプには「テキスト入力」、「値のリスト(単一選択)」または「値のリスト(複数選択)」のいずれかを選択します。

値のリストの設定では、先ほどと同様に「データフレームから値を取得」と「値を動的に取得」にチェックを付けます。

データフレームには権限管理用のデータフレーム(今回はマーケット)を選択して、ステップにはセッション・パラメーターを使ってデータを動的にフィルタしたステップを選択します。

値の列には階層関係にある子供の方のパラメーター、今回のケースでいうと「地域」を選択します。

この設定で保存することで、先ほどのマーケットと同様に、セッション・パラメーターによってログインしたユーザーに応じて、自動的に地域のパラメーターも動的に更新されるようになります。

あとは元のデータフレームに戻って子パラメーターのフィルタを追加するだけです。

フィルタのダイアログが開いたら、パラメーターにチェックを付けて、地域のパラメーターを選択し、実行します。

これにより、ユーザーごとにパラメーターペインに表示される親パラメーター(マーケット)および子パラメーター(地域)のリストが動的に更新されることになります。

従業員や組織のテーブルを使って、効率的にセッション・パラメーターのリストを作成する方法

今回紹介したセッション・パラメーターを設定するために利用したマーケットや製品カテゴリーに関するテーブルについては、あらかじめユーザーの方が何らかの形でテーブルを用意することを前提にした内容になっています。

一方で、ダッシュボードを大規模に展開していき、数百人に対して利用可能な値の権限表を生成するのは現実的ではありません。

そこで、以下の2つのデータがあれば、動的にセッション・パラメーターを設定するためのリストを作ることも可能です。

  • 従業員
  • 組織

詳細はこちらのノートをご参考ください。

  • 組織と従業員のデータを使って、セッション・パラメーター用の権限表を作成する方法 - リンク

参考情報

  • Exploratoryのパラメーターの紹介 - リンク
  • 親子関係にあるパラメーターを作成して運用する方法 - リンク
Export Chart Image
Output Format
PNG SVG
Background
Set background transparent
Size
Width (Pixel)
Height (Pixel)
Pixel Ratio