フィルタの作成
データベース値に対して加える必要のある一連のアクセス制限ごとにフィルタを作成できます。同じアクセス・ニーズを持つユーザーに対して、個別のフィルタを作成する必要はありません。フィルタを作成したら、複数のユーザーまたはユーザーのグループに割り当てることができます。
ノート:
メンバーのセット(子や子孫など)を戻す計算関数を使用し、それが空のセットと評価される場合、セキュリティ・フィルタは作成されません。リージョン定義が空のセットに評価されたことを示すエラーがアプリケーション・ログに書き込まれます。
フィルタを作成する前に、次のアクションを行います。
-
サーバーに接続し、フィルタに関連付けるデータベースを選択します。
-
制限にあるフィルタの命名ルールを確認します。
フィルタの作成を参照してください。
フィルタを作成するには、create filter MaxL文を使用することもできます。
メンバーのフィルタリングとメンバーの組合せのフィルタリング
このトピックでは、データベース・セルへのアクセスを制御する様々な方法について説明します。データは、メンバー全体をフィルタするか、メンバーの組合せをフィルタすることによって保護できます。
-
メンバーを個別にフィルタした場合は、それらのメンバーのデータ・リージョン全体に影響します。
-
メンバーの組合せをフィルタした場合は、メンバー交差にあるデータに影響します。
図31-1 データのAND/OR関係に対するフィルタの影響
ノート:
メンバーの組合せに対するフィルタリング(AND関係)はメタ読取りには適用されません。メタ読取りではメンバーを個別にフィルタします(OR関係)。
個別のメンバーのフィルタリング
1つ以上のメンバーのすべてのデータをフィルタするには、フィルタ・エディタで各メンバーのアクセスを独自の行に定義します。フィルタの個別の行のフィルタ定義は、OR関係で処理されます。
たとえば、SalesまたはJanへのアクセスをブロックするために、ユーザーKSmithに次のフィルタが割り当てられているとします。
-
アクセス: なし。メンバー指定: Sales。
-
アクセス: なし。メンバー指定: Jan。
次回ユーザーKSmithがSample.Basicに接続すると、Qtr1の利益率のスプレッドシート表示に、#NOACCESSでマークされたメンバーSalesまたはメンバーJanのデータ値にアクセスできないことが示されます。Salesのすべてのデータ、およびSalesメンバーの内外の1月のすべてのデータは表示されません。Salesの兄弟でMarginの子であるCOGS (売上原価)のデータは、1月のCOGSを除いて使用できます。
図31-2 SalesまたはJanへのアクセスをブロックするフィルタの結果

メンバーの組合せのフィルタリング
メンバーの組合せのデータをフィルタするには、フィルタ・エディタで行を使用して各メンバーの組合せのアクセスを定義します。フィルタ定義で、カンマで区切られた2つのメンバー・セットは、これらの2つのメンバー・セットの和集合(AND関係)として処理されます。
たとえば、ユーザーRChinnに次のフィルタが割り当てられているとします。アクセス: なし。メンバー指定: Sales、Jan。
次回ユーザーRChinnがSample.Basicに接続すると、Qtr1の利益率のスプレッドシート表示に、メンバーSalesとJanの交差にある#NoAccessでマークされたデータ値にアクセスできないことが示されます。1月の売上データは表示されません。ただし、他の月の売上データ、および1月の売上以外のデータは使用できます。
図31-3 Sales、Janへのアクセスをブロックするフィルタの結果

代替変数を使用したフィルタリング
代替変数を使用すると、定期的に変更される情報をより簡単に管理できます。各代替変数には、名前と値が割り当てられています。データベース・マネージャは、いつでも値を変更できます。フィルタで代替変数が指定されている場合は、その時点の代替変数値が使用されます。
たとえば、ユーザーのグループに現在の月のデータのみを表示する場合は、CurMonthという名前の代替変数を設定し、フィルタ(MonthlyAccess)を定義できます。ここで、メンバー名に&CurMonth
を使用してアクセスを指定します。指定の先頭にアンパサンド(&)を使用すると、Essbaseでは、メンバー名ではなく代替変数として識別されます。MonthlyAccessフィルタを該当するユーザーに割り当てます。
毎月、CurMonth代替変数の値を現在の月のメンバー名(Jan、Febなど)に変更することのみが必要です。新しい値は、割り当てられたすべてのユーザーに適用されます。
代替変数の使用方法を参照してください。
属性関数によるフィルタリング
フィルタを使用して、特定の属性を共有する基本メンバーのデータへのアクセスを制限できます。属性ディメンションで定義された特定の属性を持つメンバーのデータをフィルタするには、属性メンバーを@ATTRIBUTE関数または@WITHATTR関数と組み合せて使用します。
ノート:
@ATTRIBUTEと@WITHATTRはメンバー・セット関数です。フィルタ定義では、ほとんどのメンバー・セット関数を使用できます。
たとえば、ユーザーPJonesに次のフィルタが割り当てられているとします。アクセス: なし。メンバー指定: @ATTRIBUTE("Caffeinated_False")。
次回ユーザーPJonesがSample.Basicに接続すると、カリフォルニアでの第1四半期のコーラの売上のスプレッドシート表示に、Caffeinated_Falseに関連付けられた基本ディメンション・メンバーのデータ値にアクセスできないことが示されます。カフェインなしコーラの売上データは表示されません。カフェインなしコーラは基本メンバーであり、Caffeinated_Falseは属性ディメンションCaffeinatedの関連付けられたメンバーであることに注意してください(前述のスプレッドシート表示には表示されていません)。
図31-4 カフェインなし製品へのアクセスをブロックするフィルタの結果

メタデータのフィルタリング
メタデータのフィルタリングにより、データのフィルタリングおよび追加のセキュリティ層が提供されます。メタデータのフィルタリングを使用すると、管理者はユーザーのビューからアウトライン・メンバーを削除して、ユーザーが関心を持っているメンバーのみにアクセスを提供できます。
フィルタを使用してメンバーにメタ読取り権限を適用する場合:
-
そのメンバーのすべての祖先のデータがフィルタ・ユーザーのビューで非表示になります。
-
そのメンバーのすべての兄弟のデータおよびメタデータ(メンバー名)がフィルタ・ユーザーのビューで非表示になります。
動的フィルタリング
必要なフィルタ定義の数を減らすために、外部データソースに基づいて動的フィルタを作成できます。これは、メソッド@datasourceLookup
と変数$LoginUser
および$LoginGroup
を含む動的フィルタ定義構文を使用して行います。
詳細は、効率的な動的フィルタの作成を参照してください。