我正在为2016年水晶报告工作。我有一些datetime值来表示某些事情发生变化时的情况。我有一个改变datetime值的数值。在这种情况下,一些网络连接正在改变3个值(0、1、2)之间的状态。我想计算期间和期间的总和;然后绘制各期间之间的比率,以及报告的时间。我已经做了一些,但我认为我采取了错误的方法,因为最后一点不起作用。
我有在线、离线和部分在线的公式,(分别)如下:
If {CRV_AttributeLog.AnalogValue}=2
Then {CRV_AttributeLog.LogTimeStamp}
If {CRV_AttributeLog.AnalogValue}=0
Then {CRV_AttributeLog.LogTimeStamp}
If {CRV_AttributeLog.AnalogValue}=1
Then {CRV_AttributeLog.LogTimeStamp}我有计算各州之间周期的公式:
Online
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不喜欢嵌套公式。我不能只将copypasta替换为if ... then表达式的公式名;当我检查它是否有错误时,这会给我一个错误(字段必须在这里)。我考虑让if语句在前面,只有当它是脱机记录时才执行操作,但是我不能引用其他时间戳。
我可以把时间周期放到一个图表中,这样就可以把它们加起来。然而,计算的时间并不代表报告执行期间的所有时间,因此,由于数据的特殊性,虽然比率仍然很好,但结果图表并不是100%正确的。对于边缘情况,我无法计算连接离线的时间。例如,如果一个连接离线了整个报表长度,则会有许多时间戳表明它是脱机的,但由于没有联机时间戳,脱机期间为0,从而抛出图表。
如何计算这些期间,然后将其与报告的时间长度进行比较?我已经创建了一个公式,给我报告中的时间长度(除数,也就是分子),但是我需要红利(分母)来计算。
有没有更好的方法来解决这个问题?
发布于 2017-03-05 14:11:34
使用Next()函数的Crystal Reports计算必须等到所有排序、分组和汇总完成后才能完成。它们可以工作,但它们严格地限制了您对水晶中的结果所能做的。最好的方法是编写SQL查询,以便将每个记录链接到下一个记录。这样,水晶所看到的数据集在同一记录中既包括句点的开始,也包括句号的结束。如何编写该SQL将是另一个很好的问题。
对于没有值的边缘情况,我认为您希望使用IF-然后逻辑将缺失的值替换为目标期间的开始或目标周期的结束。
https://stackoverflow.com/questions/42516485
复制相似问题