筛选对数据的访问
筛选器控制对 Essbase 多维数据集内数据值的安全访问权限。筛选器是粒度最小的可用安全形式。筛选器即为特定的多维数据集单元或一系列单元格指定一组限制。管理员或经理分配筛选器以规范用户或组的访问权限。
您自己的安全角色可确定您是否可以创建、分配、编辑、复制、重命名或删除筛选器:
- 如果您具有“应用程序管理者”角色,则可以管理任何用户或组的任何筛选器。筛选器不会影响您。
- 如果您具有“数据库更新”角色,则可以管理您创建的应用程序的筛选器。
- 如果您具有“数据库管理者”角色,则可以管理您的应用程序或多维数据集的筛选器。
- 如果您具有“数据库访问”角色(默认角色),则可以对所有单元格中的数据值进行读取访问,除非筛选器对您的访问权限进行了进一步限制。
使用 Essbase Web 界面创建筛选器
在 Essbase Web 界面的“数据库定制”部分中,您可以创建将多维数据集访问权限限制为用户或组的安全筛选器。
可以为一个多维数据集创建多个筛选器。如果您编辑某个筛选器,则对该筛选器的定义进行的修改会自动由该筛选器的所有用户继承。
要编辑过滤器,请选择多维数据集并单击左侧面板中的 "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))