【问题标题】:Drools nested aggregationDrools 嵌套聚合
【发布时间】:2019-04-26 14:42:03
【问题描述】:

我在流口水中有以下规则。发生的情况是$expense 是基于每张卡进行评估的。但我希望对每个用户进行评估($u)。

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

【问题讨论】:

  • 我设法通过创建一个复合声明类型来实现这一点,仅用于我的规则目的。我还声明了一个实例化的“agg”事实,用于存储总费用。

标签: java jboss drools rules rule-engine


【解决方案1】:

我认为您需要在 Transactions 中添加一个用户 ID 字段才能使其正常工作。在这种情况下,您可以从规则中删除卡,以便它可以在用户基础上工作。

【讨论】:

  • 是的。那是正确的。但也可以这样做,而无需触及从规则驱动程序插入到引擎中的事实,并在规则文件本身中声明所需的事实。然后使用这些声明的事实进行计算。这就是我所做的,因为修改外部事实不是我们想要的选择。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2021-12-14
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 2017-07-16
相关资源
最近更新 更多