Java Drools嵌套聚合

Java Drools嵌套聚合,java,jboss,drools,rules,rule-engine,Java,Jboss,Drools,Rules,Rule Engine,我流口水有以下规则。现在的情况是,$expense是基于每张卡进行评估的。但我希望它是在每个用户的基础上进行评估的($u) 规则“测试”: 什么时候 $u:User() $card:card(用户id==$u.id) $expense:Double()来自 积累( $transaction:交易记录( card_id==$card.id, 事务处理日期>='startDate', transaction_date我想你需要在交易中有一个用户ID字段才能工作。在这种情况下,你可以从规则中删除该卡,

我流口水有以下规则。现在的情况是,
$expense
是基于每张卡进行评估的。但我希望它是在每个用户的基础上进行评估的(
$u

规则“测试”:
什么时候
$u:User()
$card:card(用户id==$u.id)
$expense:Double()来自
积累(
$transaction:交易记录(
card_id==$card.id,
事务处理日期>='startDate',

transaction_date我想你需要在交易中有一个用户ID字段才能工作。在这种情况下,你可以从规则中删除该卡,这样它就可以在用户基础上工作。

我成功地实现了这一点,只为我的规则创建了一个复合声明类型。我还声明了一个实例化的“agg”事实,这是用来存储总费用的。是的。这是正确的。但也可以在不接触规则驱动程序插入引擎的事实的情况下执行此操作,并在规则文件本身中声明所需的事实。然后使用这些声明的事实进行计算。这就是我所做的,因为修改外部事实是不必要的这不是我们想要的选择。
rule "test":

when
    $u: User()
    $card: Card(user_id == $u.id)
    $expense: Double() from 
         accumulate (
             $transaction: Transactions(
                   card_id == $card.id,
                   transaction_date >= 'startDate',
                   transaction_date <= 'endDate'
         ),
         sum($transaction.amount)
then
    // do something with expense. 
    // but I want to the expense to be the expense for a user. not a card.
end