我想检索当前行中的上一行值,如下所示(Crystal Report 2008):
+------------+-----------------+----------+------------+----------------+
| Date | PreviousBalance | Loan | Collection | CurrentBalance |
+============+=================+==========+============+================|
| 14/02/2012 | 00.00 | 10000.00 | 00.00 | 10,000.00 |
| 15/02/2012 | 10,000.00 | 00.00 | 500.00 | 9,500.00 |
| 16/02/2012 | 9,500.00 | 00.00 | 500.00 | 9,000.00 |
| 18/02/2012 | 9,000.00 | 5,000.00 | 00.00 | 14,000.00 |
+------------+-----------------+----------+------------+----------------+
答案 0 :(得分:3)
比看起来容易:
为字段{#TLoan}
创建两个正在运行的总计{table.Loan}
,为字段{#TCol}
创建一个集合{table.Collection}
。
使用以下内容创建公式:{@Total}
:
{#TLoan}-{#TCol}
这将具有CurrentBalance值。
{@Prev}
,其中包含以下内容: {@Total}-{table.Loan}+{table.Collection}
这将具有PreviousBalance值。
使用这种方法不需要复杂的公式,结果是预期的。
希望它有所帮助!
答案 1 :(得分:2)
使用previous()
函数似乎是此解决方案的明显选择,但因为公式不能周期性地相互引用(即{@CurrentBalance}
可以' t引用{@PreviousBalance}
,反之亦然)也不能递归,实现它的方式比它最初看起来更难实现。
相反,您应该使用变量来跟踪事务之间的平衡。您可以通过创建3个公式并将它们放在报告的相应部分来完成此任务。
// {@initVars} - Initialize balance variable
//This formula should be placed in your report header
whileprintingrecords;
numbervar balance:=0
// {@previousBalance} - Display previous line's balance
//This formula should be placed in your Details section
whileprintingrecords;
numbervar balance;
// {@currentBalance} - Display current balance after transactions
//This formula should be placed in your Details section
evaluateafter({@previousBalance});
numbervar balance := balance + {table.LoanAmount} - {table.CollectionAmount}
答案 2 :(得分:1)
我认为有很多方法。怎么样:
previous({Table.Field})
或者你可以有一个总计,然后{#total} - {Table.Field}
?
答案 3 :(得分:1)
在存储过程存储中,通过使用从表中读取并返回先前余额并将其存储在变量中的函数,然后在存储过程内读取当前余额,将变量中的前一个余额存储在变量中。 使用 union 读取分隔行中的previous和Current,并在报告中获取它们。
答案 4 :(得分:0)
尝试:
// {@PreviousBalance}
If PreviousIsNull({@CurrentBalance}) Then
0
Else
Previous({@CurrentBalance})
答案 5 :(得分:0)
从存储过程(如果您使用的是)按日期ASC排序数据,或者如果您不使用SP,您需要按日期ASC对数据表或数据集进行排序,那么您必须确定GROUPING标准( ClientId)为一个客户端分组信息,例如在您提到的这种排序和分组中,您可以从(字段资源管理器 - >组名称字段 - >插入组)
分组记录答案 6 :(得分:0)
请查看此link。您还没有指定基础数据源,因此我找到了MS SQL的示例。
如果您无权访问数据库以查询/编辑存储过程,则可以编写foreach循环并计算相应的值。问题是报告通常会汇总,切片和过滤数据。 "之前"的概念和"关注"在这种背景下失去了它的意义。