筛选对数据的访问

筛选器控制对 Essbase 多维数据集内数据值的安全访问权限。筛选器是粒度最小的可用安全形式。筛选器即为特定的多维数据集单元或一系列单元格指定一组限制。管理员或经理分配筛选器以规范用户或组的访问权限。

您自己的安全角色可确定您是否可以创建、分配、编辑、复制、重命名或删除筛选器:

  • 如果您具有“应用程序管理者”角色,则可以管理任何用户或组的任何筛选器。筛选器不会影响您。
  • 如果您具有“数据库更新”角色,则可以管理您创建的应用程序的筛选器。
  • 如果您具有“数据库管理者”角色,则可以管理您的应用程序或多维数据集的筛选器。
  • 如果您具有“数据库访问”角色(默认角色),则可以对所有单元格中的数据值进行读取访问,除非筛选器对您的访问权限进行了进一步限制。

使用 Essbase Web 界面创建筛选器

Essbase Web 界面的“数据库定制”部分中,您可以创建将多维数据集访问权限限制为用户或组的安全筛选器。

可以为一个多维数据集创建多个筛选器。如果您编辑某个筛选器,则对该筛选器的定义进行的修改会自动由该筛选器的所有用户继承。

  1. 导航到筛选器编辑器。
    1. 主页上,打开应用程序,然后打开数据库(多维数据集)。
    2. 单击过滤器
  2. 单击添加
  3. 筛选器名称文本框中输入筛选器名称。
  4. 在筛选器编辑器中,单击添加
  5. 访问下,单击并从下拉菜单中选择访问级别。
    • 无:无法检索或更新数据

    • 读取:可以检索数据,但无法更新数据

    • 写入:可以检索和更新数据

    • MetaRead:可以检索和更新元数据(维名称和成员名称)

      MetaRead 访问级别覆盖所有其他访问级别。其他数据筛选器是在现有的 MetaRead 筛选器中实施的。(使用 AND 关系)对成员组合的筛选不适用于 MetaRead。MetaRead 分别筛选每个成员(使用 OR 关系)。

  6. 选择成员规范下的行并输入成员名称,然后单击保存

    您可以单独筛选成员,也可以筛选成员组合。指定由函数或替代变量名称定义的维或成员名称、别名、成员组合、成员集合,函数或替代变量名称前面是一个与号 (&)。用逗号分隔多个条目。

  7. 根据需要为筛选器创建其他行。

    如果筛选器行重叠或冲突,则会应用更详细的多维数据集区域规范(而非不太详细的规范)和更宽松的访问权限(而非更严格的访问权限)。例如,如果您授予用户对 Actual 的 Read 访问权限,对 Jan 的 Write 访问权限,则用户将对 Jan Actual 具有 Write 访问权限。

  8. 单击验证以确保筛选器有效。
  9. 单击保存

要编辑过滤器,请选择多维数据集并单击左侧面板中的 "Filters"(过滤器)选项。然后,在筛选器编辑器中通过单击筛选器名称并进行更改来编辑筛选器。要编辑现有行,请在相应行中双击。

您可以单击筛选器名称旁的“操作”菜单并选择选项,用来复制、重命名或删除筛选器。

创建筛选器后,将其分配给用户或组。

请参阅使用安全筛选器控制对数据库单元的访问

创建高效的动态筛选器

您可以基于外部源数据创建动态筛选器,以减少所需的筛选器定义数量。

您可以根据成员和用户名筛选对外部源数据中多维数据集单元格的访问,而不是为多个用户管理一组硬编码的数据访问筛选器。
您将使用动态筛选器定义语法执行此操作,包括方法 @datasourceLookup 与变量 $LoginUser$LoginGroup。您的外部源数据是一个 csv 文件或关系表。对于关系源数据,您可以将 .csv 加载到关系表中。

动态筛选器语法

使用动态筛选器语法可创建可以分配给多个用户和组的灵活筛选器。

除了成员表达式之外,筛选器行还可以包含以下元素作为其定义的一部分。

$loginuser

此变量存储在运行时当前登录用户的值。可以将它与 @datasourcelookup 方法一起使用。

$logingroup

此变量存储当前已登录用户所属的所有组的值。它包括直接组和间接组。与 @datasourcelookup 方法一起使用时,将根据数据源分别查找每个组。

@datasourcelookup

此方法从数据源提取记录。

语法

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
Parameter (参数) 说明
dataSourceName

Essbase 中定义的外部数据源的名称。对于应用程序级别的数据源,请以应用程序名称和一个句点作为名称的前缀。

columnName

要在其中搜索给定 columnValue 的数据源列的名称。

columnValue

要在 columnName 中搜索的值。

returnColumnName

要从中返回值列表的数据源列的名称。

注意:

数据源列名不应使用 SQL 保留字,例如 USER、GROUP 或 ROLE。使用保留字可能会导致 SQL 语法分析错误或意外的过滤器行为。

说明

@datasourcelookup 调用等效于以下 SQL 查询:

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookup 会查找给定的数据源并搜索 columnName 包含 columnValue 的记录。如果将 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")

以下示例返回属于 Sales 或 Marketing 部门的门店。

@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 的多维数据集。该多维数据集是库中提供的一个示例模板。


包含三行的动态筛选器,用于向登录用户授予 MetaRead 访问权限。

要了解如何创建和应用此动态筛选器,请从库的 "Technical" 部分下载工作簿模板 Efficient_Filters.xlsx,并根据该工作簿中的 README 说明进行操作。库在 Essbase Web 界面的文件部分中提供。