Crystal reports 如何计算只有时间戳的总时间长度?

Crystal reports 如何计算只有时间戳的总时间长度?,crystal-reports,Crystal Reports,我正在与Crystal Reports 2016合作。我有一些datetime值,它们表示什么时候发生了变化。我有一个在datetime值处更改的数值。在这种情况下,某些网络连接正在3个值(0、1、2)之间更改状态。我想计算周期,以及周期总数;然后用图表表示各期间之间的比率以及报告的时间。我已经做了一些,但我认为我采取了错误的方法,因为最后一点不起作用 我有在线、离线和部分在线的公式,分别如下: 我有计算各州之间周期的公式: 在线 abs(dateDiff("s", next({@TimeSta

我正在与Crystal Reports 2016合作。我有一些datetime值,它们表示什么时候发生了变化。我有一个在
datetime
值处更改的数值。在这种情况下,某些网络连接正在3个值(0、1、2)之间更改状态。我想计算周期,以及周期总数;然后用图表表示各期间之间的比率以及报告的时间。我已经做了一些,但我认为我采取了错误的方法,因为最后一点不起作用

我有在线、离线和部分在线的公式,分别如下:

我有计算各州之间周期的公式:

在线

abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampOnline})) +
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampPartiallyOnline})) 
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
离线

abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampOnline})) +
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampPartiallyOnline})) 
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
部分在线

abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampOnline})) +
abs(dateDiff("s", next({@TimeStampOffline}), {@TimeStampPartiallyOnline})) 
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOffline})) +
abs(dateDiff("s", next({@TimeStampPartiallyOnline}), {@TimeStampOnline})) 
我不能总结计算周期的公式,大概是因为我有第一组有效变量的公式;Crystal Reports不喜欢公式嵌套。如果。。。然后表达式;当我检查错误时,它会给我一个错误(字段必须在这里)。我曾考虑过在前面使用if语句,并且只在它是脱机记录时才执行操作,但是我不能引用其他时间戳

我可以把时间段放在一张图表上,这样可以把它们加起来。然而,计算的时间并不能代表报告执行期间的所有时间,因此,尽管由于数据的特殊性,比率仍然基本良好,但结果图表并非100%正确。对于边缘情况,我无法计算连接脱机的总时间。例如,如果一个连接在整个报告期间处于脱机状态,则会有许多时间戳表明该连接处于脱机状态,但由于该连接处于联机状态的位置没有时间戳,因此脱机时间段为0,从而导致图表失效

如何计算这些期间,然后将其与报告的时间长度进行比较?我已经创建了一个公式,给出了报告中的时间长度(除数又称分子),但我需要股息(分母)进行计算


有更好的方法解决这个问题吗?

使用Next()函数的Crystal Reports计算必须等到完成所有排序、分组和合计之后。它们是有效的,但它们严格限制了在Crystal中对结果的处理。最好的方法是编写SQL查询,以便将每条记录链接到下一条记录。这样一来,Crystal看到的数据集在同一条记录中同时包含周期的开始和结束。如何编写SQL将是一个很好的单独问题


对于没有值的边缘情况,我认为您应该使用IF-THEN逻辑将缺少的值替换为目标周期的开始或结束

到目前为止你做了什么?您能在这里展示一下吗?对于我在Crystal Reports中尝试做的事情,似乎大多数答案都是“在SQL中做”。