【问题标题】:Crystal Reports Count Records Between Two Parameter DatesCrystal Reports 计算两个参数日期之间的记录
【发布时间】:2014-09-02 22:11:41
【问题描述】:

希望标题能说明一切。但以防万一。我正在修改一些用 vb.net 编写的定制内部软件,它查询数据库、收集返回的数据并在 vb.net 中处理它,然后将结果输出到 Crystal Reports 以显示。

我们发现这难以置信地浪费资源,而且速度非常慢。就像我之前提到的那样,我正在修改这个程序,以便 Crystal Report 本身收集信息并显示它。今天早上我正在修改一个看似简单的部分,一个只计算总记录、总结一些东西和其他小任务的月度报告。

所以我的问题是,计算返回的记录数的水晶语法是什么,即在两个日期之间。(从 vb 端传入的参数)

我想写这个:

COUNT({Table.Column} in {?FromDate} to {?ToDate});

Crystal Reports 然后突出显示计数中的所有内容并告诉我此处需要一个字段。

我也尝试创建一个运行总数,但它只计算了 1。所以如果这是正确的行动方案,请解释一下。

谢谢!!

【问题讨论】:

  • 报告是否仅包含该日期范围内的记录?还是记录选择公式中没有使用那些参数?

标签: sql crystal-reports


【解决方案1】:

Crystal 报告公式语法不允许以这种方式进行条件计数。我通常用两个单独的公式来执行这种事情:第一个为逻辑测试填充 1 或 0,第二个对第一个求和,例如

{@InRange}:

if {Table.Column} in {?FromDate} to {?ToDate} then 1 else 0

{@sumInRange}:

sum({@InRange}

我很确定我已经在单个公式中获得了类似的结果,但是它使代码的可读性降低并且更难维护,有时需要使用While Printing 命令,这使得公式结果无法在其他领域使用报告。使用两个公式还可以轻松过滤第一个公式。

【讨论】:

  • +1 或者,您可以放弃第二个公式,就像您说的那样,直接将汇总对象插入到报表中。当使用像 sum()count() 这样的普通旧摘要函数时,不需要 WhilePrintingRecords 关键字。
  • 我认为这个答案很棒。我还没有将其标记为答案,因为与原始版本相比,我想出了 +10。我正在解决这个问题,并将返回我的发现。
  • 哈!您的回答产生了正确的结果。不得不再深入一点,但我发现以前的 vb.net 代码不会在最终结果中包含当前日期。然而,Crystal Reports 足够聪明,可以在查询的日期时间部分增加 1 毫秒,以包括当前日期。
  • 但是,按照您的答案格式,我能够为我生成更具可读性的代码。我将{table.column} in {?FromDate} to {?ToDate} 放入{@InRange} 然后在{@sumInRange} 中使用count({@InRange})
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多