创建筛选器
您可以为需要放置在 Essbase 数据库值上的每组访问限制创建筛选器。您无需为具有相同访问需求的用户创建单独的筛选器。创建筛选器后,可以将其分配给多个用户或用户组。
注意:
如果使用返回一组成员(如子代或后代)的计算函数,并且计算结果为空集,则不会创建安全筛选器。将错误写入应用程序日志,指出区域定义的计算结果为空集。
在创建筛选器之前,请执行以下操作:
-
连接到服务器并选择与筛选器关联的数据库。
-
检查限制中筛选器的命名规则。
请参见 Create Filters 。
要创建过滤器,还可以使用 create filter MaxL 语句。
筛选成员与筛选成员组合
可以通过筛选整个成员或通过筛选成员组合来控制对 Essbase 数据库值的访问。单独过滤成员会影响这些成员的整个数据切片。筛选成员组合会影响成员交叉点的数据。
图 30-1 筛选器如何影响数据和/或关系

注意:
对成员组合(AND 关系)进行筛选不适用于元区。Metaread 分别过滤每个成员(OR 关系)。
单独筛选成员
要筛选一个或多个 Essbase 大纲成员的所有数据,请为其自己的行中的每个成员定义访问权限。筛选器单独行上的筛选器定义使用 OR 关系进行处理。
例如,要阻止对 Sales 或 Jan 的访问,假设为用户 KSands 分配了以下筛选器:
-
访问:无。会员规格:销售。
-
访问:无。会员规格:Jan。
下次用户 KSands 连接到 Sample Basic 时,她对 Qtr1 利润率的电子表格视图显示,她无权访问成员 Sales 或成员 Jan(标记为 #NOACCESS)的数据值。Sales 的所有数据都已阻止查看,以及 Sales 成员内部和外部的一月的所有数据。有销货成本(销货成本)、销售兄弟姐妹和毛利子项的数据,但 1 月的销货成本除外。
图 30-2 阻止访问 Sales 或 Jan 的筛选结果

筛选成员组合
要筛选 Essbase 成员组合的数据,请使用筛选器编辑器中的行定义每个成员组合的访问权限。在过滤器定义中,用逗号分隔的两个成员集合被视为这两个成员集合(AND 关系)的联合。
例如,假定为用户 RChin 分配了以下筛选器:Access:None。会员规格:销售,一月。
下次用户 RChin 连接到 Sample Basic 时,她对 Qtr1 利润率的电子表格视图显示,她无权访问成员 Sales and Jan(标记为 #NoAccess)交叉处的数据值。阻止查看一月份的销售数据。但是,其他月份的销售数据可用,并且 1 月的非销售数据可用。
图 30-3 筛选器阻止对销售的访问的结果,1 月

使用替代变量进行筛选
使用 Essbase 替代变量可以管理定期更改的信息。每个变量都有一个指定的名称和值。数据库管理器可以随时更改该值。在筛选器中指定替代变量时,将应用访问数据时的值。
例如,如果希望一组用户仅查看当月的数据,则可以设置名为 CurMonth 的替代变量并定义一个筛选器 (MonthlyAccess),在该筛选器中,您可以使用 &CurMonth 指定成员名称的访问权限。在规范开头使用“和”号 (&) 可将其标识为替代变量,而不是 Essbase 的成员名称。将 MonthlyAccess 筛选器分配给相应的用户。
每个月,只需将 CurMonth 替代变量的值更改为当前月份的成员名称,例如 Jan、Feb 等。新值将应用于所有分配的用户。
请参阅实施变量以更改信息。
使用属性函数进行筛选
您可以使用筛选器来限制共享特定属性的基本成员对 Essbase 数据的访问。要筛选在属性维中定义了特定属性的成员的数据,请将属性成员与 @ATTRIBUTE 函数或 @WITHATTR 函数结合使用。
注意:
@ @ATTRIBUTE 和 @WITHATTR 是成员集函数。大多数成员集函数都可以在过滤器定义中使用。
例如,假定为用户 PJones 分配了以下筛选器:Access:None。成员规范:@ATTRIBUTE("Caffeinated_False")。
下次用户 PJones 连接到 Sample Basic 时,他在加利福尼亚州第一季度可乐销售额的电子表格视图显示,他无权访问与 Caffeinated_False 关联的任何基本维成员的数据值。禁止查看 Caffeine Free Cola 的销售数据。请注意,Caffeinated_False 是基本成员,Caffeinated_False 是属性维 Caffeinated 的关联成员(在电子表格视图中未显示)。
图 30-4 过滤阻断无咖啡因产品访问的结果

元数据过滤器
元数据过滤可提供数据过滤和额外的安全层。通过元数据筛选, Essbase 管理员可以从用户视图中删除大纲成员,从而仅提供对用户感兴趣的那些成员的访问权限。
当使用筛选器对成员应用 MetaRead 权限时:
-
该成员的所有祖先的数据在筛选器用户视图中隐藏。
-
该成员的所有同级的数据和元数据(成员名称)在筛选器用户视图中隐藏。
动态筛选器
您可以基于外部源数据创建动态 Essbase 安全筛选器,以减少所需的筛选器定义数量。您将使用动态筛选器定义语法执行此操作,包括方法 @datasourceLookup 与变量 $LoginUser 和 $LoginGroup。
注意:
动态筛选器支持 LOWER、UPPER 和 CAST 等 SQL 函数,包括嵌套表达式。您可以直接将这些函数与成员集函数一起使用,以创建更灵活、更精确的访问过滤器定义。
动态筛选器语法
使用动态筛选器语法可创建可以分配给多个用户和组的灵活筛选器。
除了成员表达式之外,筛选器行还可以包含以下元素作为其定义的一部分。
$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))