用 esper 的 epl 语法表述以下规则:月新签单数 < 3 或入职后每连续 3 个月的总单数 < 15
在 Esper 的 EPL(Event Processing Language)语法中,表述这样的规则需要定义事件流,并编写相应的查询来检测这些条件。以下是如何用 EPL 表述所提供的规则的示例:
首先,我们假设有一个名为 SalesEvent 的事件流,该事件流包含了以下属性:newSigns(月新签单数)和 employeeId(员工ID),以及一个时间戳属性 timestamp。
以下是表述所提供规则的 EPL 语句:
@Name('RuleForLowSales')
@Description('检测月新签单数小于3或者连续3个月总单数小于15的规则')
select *
from pattern [
every A=SalesEvent(newSigns < 3) ->
not SalesEvent(newSigns >= 3 and employeeId = A.employeeId) for 3 months
or
every B=SalesEvent ->
(select sum(newSigns) as totalSigns
from SalesEvent#time_batch(3 months)
where employeeId = B.employeeId
group by employeeId
having totalSigns < 15)
]
这个查询由两部分组成,第一部分检测每个月新签单数小于3的情况,然后检查接下来的三个月内是否有新签单数大于等于3的事件发生。如果没有,则触发规则。
第二部分计算每个员工每连续三个月的总单数,如果这个总单数小于15,则触发规则。