首页 > Linux操作系统 > Linux操作系统 > Essbase触发器
Essbase触发器分为两类:更新时触发器(只对块存储数据库时使用)与更新后触发器。
更新时触发器的条件数据不能来自于动态计算、HyBrid Analysis、分区。触发器在下列情况下可能被激活:数据加载、计算、锁定并从Spreadsheet Add-in 发送(仅适用于块存储数据库上的更新时触发器)。在调整数据库时不会激活触发器。
另外在触发器的条件中英避免引用稀疏维成员。当Analytic Services 对某一个数据块执行触发器时它必须读取另一个可能被更新或未被更新的数据块。根据第二个数据块的状态,Analytic Services 可能会错误地激活触发器。
假设 East 及 West 为稀疏维,并且假设以下语句定义了触发条件: FIX (East, West, Sales, Jan, Actual, Cola)
IF ((Sales->East + Sales->West) > 20)
EMAIL sales@hyperion.com
假设对于 East 和 West,存储了以下的 Sales 数据值:
|
• |
Sales->East = 5 |
|
• |
Sales->West = 6 |
|
• |
Sales->East = 15 |
|
• |
Sales->West = 3 |
|
• |
Sales->East = 15 |
|
• |
Sales->West = 6 |
Analytic Services 将激活触发器,因为 15+6 > 20。接着,Analytic Services 将 Sales->West 更新为 3。现在数据不满足触发条件,因为 15+3 < 20。但是,Analytic Services 已经激活了触发器。
当在数据加载之后接着进行计算时,若加载的数据和计算出的数据都满足触发条件,Analytic Services 将激活触发器两次,一次在数据加载时,一次在计算时。
更新后触发器不能使用来自HyBrid Analysis功能的数据,电子表格的锁定并发送不会激活更新后触发器。
触发器对性能和内存使用的影响:
视数据库中已启用的触发器数量而定,计算和数据加载的性能可能有小幅度下降。可通过指定 essbase.cfg 文件中的 TRIGMAXMEMSIZE 配置设置,来控制触发器功能使用的最大内存。默认情况下,TRIGMAXMEMSIZE 被设为 4096 字节。可选择将信息记录在文件中,而不是发送电子邮件,这样可以通过减少网络流量而提高计算和数据加载的性能。
触发器例:
当所计算的成员是 Jan,并且在一月份,可乐的 Actual, Sales 值超过了 20 时,该示例将向两个电子邮件帐户发送一封电子邮件。
create trigger Sample.Basic.Trigger_Jan_20 where "(Jan,Sales,[100],East,Actual)" when Jan > 20 and is(Year.currentmember,Jan) then mail ([Docs.Company.com],[trgsales@company.com], [inventory@company.com], [Mail sent by trigger_Jan_20]) end;
当所计算的成员为 Jan、Feb 或 Mar,并且在一月、二月或三月,可乐的 Actual, Sales 值超过 20 时,该示例将会相应地在文件 Trigger_Jan_Sales_20、Trigger_Feb_Sales_20 或 Trigger_Mar_Sales_20 中记录一个条目。在之后激活触发器时,旧日志值与新日志值都被保留在日志文件中。
create or replace trigger Sample.Basic.Trigger_Qtr1_Sales
log_value on
Where "(crossjoin(Qtr1.children, {(Measures.Sales, [100],
East, Scenario.Actual)}))"
When Year.Jan > 20 and is(Year.currentmember, Jan) then
spool Trigger_Jan_Sales_20
When Year.Feb > 20 and is(Year.currentmember, Feb) then
spool Trigger_Feb_Sales_20
When Year.Mar > 20 and is(Year.currentmember, Mar) then
spool Trigger_Mar_Sales_20
end;
在更新操作完成后,激活触发器。若东部区域中 Colas 的库存低于 500,000,则该示例将在文件 Inventory_East 中记录一个条目。
create after update trigger Sample.Basic.Inventory_east
where "(crossjoin ({children([Qtr1])},
{([Market].[East], [Product].[100],
[Inventory].[Ending Inventory])}))"
when [Ending Inventory] < 500000 then
spool Inventory_East
end;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7477027/viewspace-462699/ ,如需转载,请注明出处,否则将追究法律责任。