フィルタの作成

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など)に変更することのみが必要です。新しい値は、割り当てられたすべてのユーザーに適用されます。

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

属性関数によるフィルタ

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

ノート:

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

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

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

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


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

メタデータのフィルタ

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

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

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

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

動的フィルタ

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

動的フィルタ構文

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

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

$loginuser

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

$logingroup

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

@datasourcelookup

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

構文

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

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

columnName

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

columnValue

columnName内で検索する値。

returnColumnName

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

説明

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

select returnColumnName from dataSourceName where columnName=columnValue

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. データのソースがファイルかリレーショナル・ソースかを識別します。
  2. 接続およびEssbaseのデータソースを、グローバルまたはアプリケーション・レベルで定義します。
  3. キューブ・レベルでフィルタを作成します。
    • Redwoodインタフェースでキューブに移動し、「カスタマイズ」「フィルタ」の順に選択します。
    • クラシックWebインタフェースで、データベース・インスペクタの「フィルタ」セクションを使用します。

  4. 必要に応じて動的フィルタ構文で$loginuser変数、$logingroup変数および@datasourcelookupメソッドを使用して、各フィルタのフィルタ行を定義します。
  5. フィルタをユーザーまたはグループに割り当てます。
  6. フィルタをグループに割り当てる場合は、フィルタするアプリケーションにグループを割り当てます。
    • Redwoodインタフェースでアプリケーションに移動し、「カスタマイズ」「権限」の順に選択します。
    • クラシックWebインタフェースで、アプリケーション・インスペクタの「権限」セクションを使用します。

動的フィルタの例

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


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

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