如何隐藏已经反转的重复记录(在水晶报表中)?

时间:2008-11-24 18:24:35

标签: sql reporting-services crystal-reports report

这个问题是我前几天提出的问题的后续问题("Need to find duplicate records but exclude reversed transactions")

我有一份水晶报告,显示客户的燃料交易。有时会错误地导入重复的事务。如果/当发现此错误时,管理员将撤销交易,从而留下两个原始重复项和一个“否定”交易以进行撤销。例如:

Date;     Qty;     Value;     Reversal

1/14/08     5       20         N
1/14/08     5       20         N
1/14/08    -5      -20         Y
1/20/08     8       56         N
1/22/08     9       62         N
1/22/08     9       62         N

理想情况下,客户只会看到单一交易(或尚未转回的重复交易)。如果交易已被撤销,我们只希望他们看到原始的唯一记录。示例(基于上述数据):

Date;     Qty;     Value;

1/14/08     5       20
1/20/08     8       56
1/22/08     9       62
1/22/08     9       62

我已经有一个 查询 ,它将以我刚才描述的方式返回数据,但我需要将它与一个需要连接到其他表的水晶报表集成。如果我使用已有的sql,性能是可怕的,所以我试图看看是否可以在Crystal的公式中隐藏重复(反向)事务,而不是使用SQL命令作为连接到其他表的表。 / p>

如果我不清楚,请告诉我。我提前感谢你的智慧!

2 个答案:

答案 0 :(得分:2)

逆转总是排在最后吗?如果是这样,您可以使用公式检查下一条记录并有条件地隐藏详细信息部分。

因此,在详细信息部分添加公式以有条件地禁止该部分(如果它是反转记录)或当前记录与后续反转记录匹配:

( {Reversal} = "Y" ) OR 
( {Date} = Next({Date}) AND {QTY} = Next({QTY}}) * -1 AND 
  {Value} = Next({Value}) * -1 AND Next({Reversal}) = "Y" )

如果反转始终匹配,您可以将其简化为:

( {Reversal} = "Y" ) OR 
( Next({Reversal}) = "Y" )

答案 1 :(得分:0)

稍微改变数据模型是否为时已晚,以便反转和反转记录并以某种方式标记?我曾经在这样一个系统上工作,其中插入的记录带有'C'(当前)标志,如果反转则更新为'O'(原始),并且反转记录被标记为'R'。所有只想查看当前数据的查询只能添加到WHERE子句中:

AND rec_type = 'C'