フィルタの作成

Essbaseデータベース値に対して加える必要のある一連のアクセス制限ごとにフィルタを作成できます。同じアクセス・ニーズを持つユーザーに対して、個別のフィルタを作成する必要はありません。フィルタを作成したら、複数のユーザーまたはユーザーのグループに割り当てることができます。

ノート:

メンバーのセット(子や子孫など)を戻す計算関数を使用し、それが空のセットと評価される場合、セキュリティ・フィルタは作成されません。リージョン定義が空のセットに評価されたことを示すエラーがアプリケーション・ログに書き込まれます。

フィルタを作成する前に、次のアクションを行います。

  • サーバーに接続し、フィルタに関連付けるデータベースを選択します。

  • 制限にあるフィルタの命名ルールを確認します。

フィルタの作成を参照してください。

フィルタを作成するには、create filter MaxL文を使用することもできます。

メンバーのフィルタリングとメンバーの組合せのフィルタリング

Essbaseデータベース値へのアクセスは、メンバー全体をフィルタするか、メンバーの組合せをフィルタすることで制御できます。メンバーを個別にフィルタした場合、それらのメンバーのデータ・スライス全体に影響します。メンバーの組合せをフィルタした場合は、メンバー交差にあるデータに影響します。

図30-1データのAND/OR関係へのフィルタの影響


このイメージは、2つのキューブを示しています。左側のキューブはOR関係の影響を示しています。右側のキューブはAND関係の影響を示しています。

ノート:

メンバーの組合せに対するフィルタリング(AND関係)はメタ読取りには適用されません。メタ読取りではメンバーを個別にフィルタします(OR関係)。

メンバーを個別にフィルタ

1つ以上のEssbaseアウトライン・メンバーのすべてのデータをフィルタするには、各メンバーのアクセスを独自の行で定義します。フィルタの個別の行のフィルタ定義は、OR関係で処理されます。

たとえば、SalesまたはJanへのアクセスをブロックするために、ユーザーKSandsに次のフィルタが割り当てられているとします。

  • アクセス: なし。メンバー指定: Sales。

  • アクセス: なし。メンバー指定: Jan。

次回ユーザーKSandsがSample Basicに接続されると、Qtr1の利益率のスプレッドシート表示に、#NOACCESSでマークされたメンバーSalesまたはメンバーJanのデータ値にアクセスできないことが示されます。Salesのすべてのデータ、およびSalesメンバーの内外の1月のすべてのデータは表示されません。Salesの兄弟でMarginの子であるCOGS (売上原価)のデータは、1月のCOGSを除いて使用できます。

図30-2 SalesまたはJanへのアクセスをブロックするフィルタの結果


このイメージは、フィルタによってブロックされたセルが#NOACCESSでマークされたスプレッドシートを示しています。

メンバー組合せのフィルタ

Essbaseメンバーの組合せのデータをフィルタするには、フィルタ・エディタで行を使用して各メンバーの組合せのアクセスを定義します。フィルタ定義で、カンマで区切られた2つのメンバー・セットは、これらの2つのメンバー・セットの和集合(AND関係)として処理されます。

たとえば、ユーザーRChinに次のフィルタが割り当てられているとします。アクセス: なし。メンバー指定: Sales、Jan。

次回ユーザーRChinがSample Basicに接続すると、Qtr1の利益率のスプレッドシート表示に、メンバーSalesとJanの交差にある#NoAccessでマークされたデータ値にアクセスできないことが示されます。1月の売上データは表示されません。ただし、他の月の売上データ、および1月の売上以外のデータは使用できます。

図30-3 Sales、Janへのアクセスをブロックするフィルタの結果


このイメージは、1月の売上データがユーザーに対してブロックされているスプレッドシートを示しています。

置換変数を使用したフィルタ

Essbase代替変数を使用すると、定期的に変更される情報をより管理することができます。各変数には、名前と値が割り当てられています。データベース・マネージャは、いつでも値を変更できます。代替変数がフィルタに指定されると、データへのアクセス時に値が適用されます。

たとえば、ユーザーのグループに現在の月のデータのみを表示する場合は、CurMonthという名前の代替変数を設定し、フィルタ(MonthlyAccess)を定義できます。ここで、メンバー名に&CurMonthを使用してアクセスを指定します。指定の先頭にアンパサンド(&)を使用すると、Essbaseでは、メンバー名ではなく代替変数として識別されます。MonthlyAccessフィルタを該当するユーザーに割り当てます。

毎月、CurMonth代替変数の値を現在の月のメンバー名(Jan、Febなど)に変更することのみが必要です。新しい値は、割り当てられたすべてのユーザーに適用されます。

情報変更のための変数の実装を参照してください。

属性関数を使用したフィルタ

フィルタを使用して、特定の属性を共有する基本メンバーのデータへのアクセスを制限できます。 属性ディメンションで定義された特定の属性を持つメンバーのデータをフィルタするには、属性メンバーを@ATTRIBUTE関数または@WITHATTR関数と組み合せて使用します。

ノート:

@@ATTRIBUTE@WITHATTRはメンバー・セット関数です。フィルタ定義では、ほとんどのメンバー・セット関数を使用できます。

たとえば、ユーザーPJonesに次のフィルタが割り当てられているとします。アクセス: なし。メンバー指定: @ATTRIBUTE("Caffeinated_False")。

次回ユーザーPJonesがSample Basicに接続すると、カリフォルニアでの第1四半期のコーラの売上のスプレッドシート表示に、Caffeinated_Falseに関連付けられた基本ディメンション・メンバーのデータ値にアクセスできないことが示されます。カフェインなしコーラの売上データは表示されません。Caffeine Free Colaは基本メンバーであり、Caffeinated_Falseは属性ディメンションCaffeinatedの関連付けられたメンバーであることに注意してください(スプレッドシート表示には表示されません)。

図30-4カフェインなし製品へのアクセスをブロックしたフィルタの結果


このイメージは、カフェインなしコーラの売上データがユーザーに対してブロックされているスプレッドシートを示しています。

メタデータ・フィルタ

メタデータのフィルタリングにより、データのフィルタリングおよび追加のセキュリティ層が提供されます。メタデータのフィルタリングを使用すると、Essbase管理者はユーザーのビューからアウトライン・メンバーを削除して、ユーザーが関心を持っているメンバーのみにアクセスを提供することができます。

フィルタを使用してメンバーにメタ読取り権限を適用する場合:

  1. そのメンバーのすべての祖先のデータがフィルタ・ユーザーのビューで非表示になります。

  2. そのメンバーのすべての兄弟のデータおよびメタデータ(メンバー名)がフィルタ・ユーザーのビューで非表示になります。

動的フィルター

外部ソース・データに基づく動的Essbaseセキュリティ・フィルタを作成して、必要なフィルタ定義の数を削減できます。これは、メソッド@datasourceLookupと変数$LoginUserおよび$LoginGroupを含む動的フィルタ定義構文を使用して行います。

ノート:

動的フィルタでは、LOWER、UPPER、CASTなどのSQL関数(ネストされた式を含む)がサポートされます。これらの関数をメンバー・セット関数と直接使用して、より柔軟で正確なアクセス・フィルタ定義を作成できます。

動的フィルタ構文

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

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

$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インタフェースの「ファイル」セクションで利用できます。