2010-03-29 62 views
0

我正在使用sql server 2005报告服务在数据库上生成报告库。有两列是日期时间类型ColumnA和ColumnB。该报告将通过比较这两个columns.Below该报表上显示一个KPI图像选择图像在基于两个日期的报告上显示图像

SWITCH(DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)<0,"kpi_r", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)>0,"kpi_g", 
     DateDiff("d",Fields!ColumnA.Value,Fields!ColumnB.Value)=0,"kpi_y") 

对于大多数记录的表达,图像是正确的。只有一条记录,结果很奇怪。 对于此记录

ColumnA = 2010-04-23 08:00:00 ColumnB = 2010-04-22 17:00:00 它会显示kpi_r,它显示kpi_y。我在SSMS中检查了DateDiff的值(d,Fields!ColumnA.Value,Fields!ColumnB.Value),值为-1。为什么它显示kpi_y?有没有人遇到过这个问题?

此致

回答

1

的区别在于,SSMS DATEDIFF函数计算两个日期之间的时间间隔的边界,而计数的ReportBuilder实际间隔。在SSMS中,如果你通过午夜,你已经触发了一天的边界,所以在你的例子中你得到-1。在ReportBuilder中,它会在两个值之间寻找24个小时,因此您得到0.如果您将ColumnA上的时间更改为'2010-04-23 17:00:00',您将看到值更改为-1你的预期。为了进行比较,当您执行此SWITCH语句时,从ColumnA和ColumnB中去除时间分量可能是有意义的。

0

上面的答案是现货。

这里根据自己的喜好剥夺休假日期的几种方法:

1.做在RS:使用和表达像dateserial(一年(场ColumnA.Value),月(场!ColumnA.Value),天(在你的开关表达式字段ColumnA.Value))

2.做在SQL:使用表达式像蒙上了(轮(CAST(ColumnA为float),0,1 )as datetime)在您的查询中