データへのアクセスのフィルタ

フィルタはEssbaseキューブ内のデータ値へのセキュリティ・アクセスを制御します。フィルタは、利用可能な最も粒度の細かいセキュリティ形式です。フィルタは、特定のキューブ・セルまたはセルの範囲に一連の制約を指定します。管理者またはマネージャは、ユーザーまたはグループのアクセスを規制するフィルタを割り当てます。

自分のセキュリティ・ロールによって、自分がフィルタを作成、割当て、編集、コピー、名前変更、または削除できるかどうかが決まります。

  • アプリケーション・マネージャ・ロールがある場合は、ユーザーまたはグループに対するフィルタを管理できます。フィルタは自分には影響を与えません。
  • データベース更新ロールがある場合は、自分が作成したアプリケーションに対するフィルタを管理できます。
  • データベース・マネージャ・ロールがある場合は、アプリケーションまたはキューブ内のフィルタを管理できます。
  • データベース・アクセス・ロールがある場合は(デフォルト)、自分のアクセス権がフィルタでさらに制限されていないかぎり、すべてのセル内のデータ値に対して読取りアクセス権があります。

Essbase Webインタフェースを使用したフィルタの作成

Essbase Webインタフェースのデータベース・カスタマイズ・セクションで、ユーザーまたはグループへのキューブ・アクセスを制限するセキュリティ・フィルタを作成できます。

1つのキューブに対して複数のフィルタを作成できます。フィルタを編集した場合、その定義に加えた変更は、そのフィルタのすべてのユーザーによって継承されます。

  1. フィルタ・エディタに移動します。
    1. ホーム・ページでアプリケーションを開き、データベース(キューブ)を開きます
    2. 「フィルタ」をクリックします。
  2. 「追加」をクリックします
  3. 「フィルタ名」テキスト・ボックスにフィルタ名を入力します。
  4. フィルタ・エディタで、「追加」をクリックします。
  5. 「アクセス権」で、ドロップダウン・メニューをクリックして使用し、アクセス・レベルを選択します。
    • なし: データの取得や更新はできません

    • 読取り: データの取得はできますが、更新はできません

    • 書込み: データの取得と更新ができます

    • メタ読取り: メタデータ(ディメンション名とメンバー名)の取得と更新ができます

      メタ読取りアクセス・レベルは、他のすべてのアクセス・レベルより優先されます。追加のデータ・フィルタは、既存のメタ読取りフィルタ内で強制されます。メンバーの組合せのフィルタリング(AND関係を使用)は、メタ読取りには適用されません。メタ読取りでは、各メンバーが個別にフィルタされます(OR関係を使用)。

  6. 「メンバー指定」で行を選択し、メンバー名を入力して「保存」をクリックします。

    メンバーを個別にフィルタするか、メンバーの組合せをフィルタできます。先頭にアンパサンド(&)を付けて、ディメンション名またはメンバー名、別名、メンバーの組合せ、関数で定義されているメンバー・セット、あるいは代替変数名を指定します。カンマを使用して複数のエントリを区切ります。

  7. 必要に応じて、フィルタに追加の行を作成します。

    フィルタ行が重複または競合する場合、より詳細度の高いキューブ領域指定が詳細度の低いものの上に適用され、より許容度の高いアクセス権が許容度の低いものの上に適用されます。たとえば、Actualへの読取りアクセス権とJanへの書込みアクセス権をユーザーに付与した場合、ユーザーは、Jan Actualへの書込みアクセス権を持つことになります。

  8. 「検証」をクリックして、フィルタが有効であることを確認します。
  9. 保存」をクリックします

フィルタを編集するには、キューブを選択し、左側のパネルの「フィルタ」オプションをクリックします。次に、フィルタ名をクリックしてフィルタ・エディタで変更を加え、フィルタを編集します。既存の行を編集するには、その行をダブルクリックします。

フィルタをコピー、名前変更または削除するには、フィルタ名の右にある「アクション」メニューをクリックしてオプションを選択します。

フィルタの作成後、フィルタをユーザーまたはグループに対して割り当てます。

セキュリティ・フィルタの使用によるデータベース・セルへのアクセスの制御を参照してください。

効率的な動的フィルタの作成

外部ソース・データに基づく動的フィルタを作成して、必要なフィルタ定義の数を削減できます。

多数のユーザー用のハードコードされた一連のデータ・アクセス・フィルタを管理するのではなく、メンバーおよびユーザー名に基づいて、外部ソース・データのキューブ・セルにフィルタ・アクセスできます。
メソッド@datasourceLookupおよび変数$LoginUser$LoginGroupを含む動的フィルタ定義構文を使用してこれを実行します。外部ソース・データはcsvファイルまたはリレーショナル表です。リレーショナル・ソース・データの場合は、.csvをリレーショナル表にロードできます。

動的フィルタ構文

動的フィルタ構文を使用して、複数のユーザーとグループに割当て可能な柔軟なフィルタを作成します。

フィルタ行の定義には、通常のメンバー式に加えて、次の要素を含めることができます。

$loginuser

この変数には、現在のログイン・ユーザーの値が実行時に格納されます。@datasourcelookupメソッドと組み合せて使用可能です。

$logingroup

この変数には、現在ログインしているユーザーが属するすべてのグループの値が格納されます。直接グループと間接グループの両方が含まれます。@datasourcelookupメソッドと組み合せて使用すると、各グループがデータソースに対して個別に検索されます。

@datasourcelookup

このメソッドは、データソースからレコードをフェッチします。

構文

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
パラメータ 説明
dataSourceName

Essbaseで定義された外部データソースの名前です。アプリケーション・レベル・データソースの場合は、名前の前にアプリケーション名と期間を付加します。

columnName

指定されたcolumnValueを検索するデータソース列の名前。

columnValue

columnName内で検索する値。

returnColumnName

値のリストを返すデータソース列の名前。

ノート:

データソース列名には、USER、GROUP、ROLEなどのSQL予約語を使用しないでください。予約語を使用すると、SQL解析エラーまたは予期しないフィルタ動作が発生する可能性があります。

説明

@datasourcelookupコールは次のSQL問合せと同じです。

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookupは、指定のデータソースを参照してcolumnNamecolumnValueが含まれているレコードを検索します。columnValue$loginuserを指定した場合、このメソッドではcolumnNameに現在ログインしているユーザーの名前が含まれているレコードが検索される。

Essbaseでは、リスト要素をカンマ区切りの文字列として組み合せることによりフィルタ定義行を作成します。レコードに特殊文字、スペース、または数値のみが含まれている場合、引用符で囲まれます。

ノート:

@optionsパラメータは、ルックアップの失敗動作を制御するために使用できます。strictLookup=trueの場合、ルックアップの失敗は致命的エラーとして扱われ、フィルタ結果は返されません。

パラメータを引用符で囲みます。

次のコールではグローバル・データソースを参照し、Maryがストア・マネージャであるストア名のリストを返します。

@datasourceLookup("StoreManagersDS","STOREMANAGER","Mary","STORE")

次のコールではアプリケーション・レベルのデータソースを参照し、現在のログイン・ユーザーがストア・マネージャであるストア名のリストを返します。

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")

次のコールではアプリケーション・レベルのデータソースを参照し、ログイン・ユーザーが属するグループのいずれかとストア部門が一致するストア名のリストを返します。

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","$logingroup","STORE")

ログイン・ユーザーが3つグループに属している場合、前述の@datasourcelookupメソッドは、各グループについて一致するすべての列値を返します。

次の例では、動的フィルタ式内でSQL関数を使用します。

@datasourceLookup("Sample.StoreManagersDS",LOWER(CAST("STOREMANAGER" AS VARCHAR(30))),LOWER("$loginuser"),"STORE")

次の例では、明示的な大文字と小文字を区別する関数を使用して、大文字と小文字を区別する評価を実行します。

@datasourceLookup("Sample.StoreManagersDS",UPPER("STOREMANAGER"),UPPER("$loginuser"),"STORE")

次の例では、営業部門またはマーケティング部門に属する店舗を戻します。

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","Sales","Marketing","STORE")

次の例では、@datasourceLookupを持つメンバー・セット関数を使用しています。

@DESCENDANTS(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE"))

次の例では、ネストされたメンバー・セット関数をデータソース参照とともに使用します。

@CHILDREN(@LSIBLING(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")))

次の例では、厳密なルックアップ動作を使用します。検索が失敗した場合、フィルタ結果は返されません。

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE",@options(strictLookup=true))

動的フィルタを作成するためのワークフロー

動的フィルタを作成するには、次の一般的なワークフローを使用します。

この動的フィルタのワークフローは、すでにキューブがあり、ユーザーおよびグループがプロビジョニングされていることを前提としています。

  1. データのソースがファイルかそれともリレーショナル・ソースかを識別します。
  2. 接続およびEssbaseのデータソースを、グローバルまたはアプリケーション・レベルで定義します。
  3. フィルタをキューブ・レベルで作成します。キューブにナビゲートし、「フィルタ」を選択します。
  4. 必要に応じて動的フィルタ構文で$loginuser変数、$logingroup変数および@datasourcelookupメソッドを使用して、各フィルタのフィルタ行を定義します。
  5. フィルタをユーザーまたはグループに割り当てます。
  6. フィルタをグループに割り当てた場合、そのグループをフィルタ対象のアプリケーションに割り当てます。アプリケーションに移動し、「権限」を選択します。

動的フィルタの例

次の動的フィルタは、サンプル・テンプレートとしてギャラリに用意されているEfficient.UserFiltersという名前のキューブで使用できます。


ログイン・ユーザーにメタ読取りアクセス権を付与する3つの行がある動的フィルタ。

この動的フィルタを作成して適用する方法を学習するには、ギャラリーのテクニカル・セクションからワークブック・テンプレートEfficient_Filters.xlsxをダウンロードし、ワークブック内のREADMEの手順に従ってください。ギャラリは、Essbase Webインタフェースの「ファイル」セクションで利用できます。