我最近问了一些关于这个的问题,我正在到达我需要去的地方,但在我的最后一个问题中可能不够具体,无法一直到达那里。因此,我正在尝试建立一个结构来计算基于应用程序数据的一些指标,它应该是灵活的,以允许轻松(安全地)添加其他指标,并且在我的视图中使用起来也相对简单。
总体目标是我将能够拥有一个自定义助手,在我看来,它允许以下内容:
calculate_metric(@metrics.where(:name => 'profit'),@customer,@start_date,@end_date)
这应该是不言自明的 - 该名称可以替换为任何可用的度量名称,并且可以在任何给定时间段内为任何客户或客户组执行计算。
出现复杂性的地方在于如何存储计算指标的公式 - 我在下面展示了我为此而汇总的当前结构:
您会注意到关键模型是度量、操作、操作类型和操作数。当公式非常简单时,这种结构可以正常工作,比如利润 - 一个只有两个操作数,@customer.sales.selling_price.sum
并且@customer.sales.cost_price.sum
,只有一个类型的减法运算。由于我们不需要存储任何中间值,register_target
will be1
和return_register
.
我认为我不需要写一个完整的例子来说明它在哪里变得更复杂,但我只想说我是否想计算在两个日期之间开户的客户拥有电子邮件地址的客户百分比(但不一定购买),这将变得更加复杂,因为辅助函数需要知道如何处理日期变化。
因此,这种结构似乎过于复杂,除了一个简单的公式之外很难用于任何其他东西——任何人都可以提出解决这个问题的更好方法吗?
编辑:根据 Railsdog 的回答,我对我的模型做了一些细微的改动,并重新上传了图表以清楚起见。本质上,我确保了reporting_category 模型可以用来对用户隐藏中间操作数,并且可以在用户计算中使用的操作数可以以分类格式呈现。我现在需要的只是有人帮助我修改我的结构,以允许操作以 rails-esqe 方式使用实际操作数或先前操作的结果。
感谢您迄今为止的所有帮助!