отображать изображение в отчете на основе двух дат - PullRequest
0 голосов
/ 29 марта 2010

Я использую службу отчетов SQL Server 2005 для создания базы данных отчетов. Есть два столбца, которые имеют тип datetime ColumnA и ColumnB. В отчете будет отображаться изображение 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. Я проверил значение DateDiff (d, Fields! ColumnA.Value, Fields! ColumnB.Value) в SSMS, значение равно -1. Почему отображается kpi_y? Кто-нибудь сталкивался с этой проблемой раньше?

С наилучшими пожеланиями,

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Разница в том, что функция SSMS DATEDIFF подсчитывает границы интервалов между двумя датами, тогда как ReportBuilder подсчитывает фактические интервалы. В SSMS, если вы пересекаете полночь, вы установили дневную границу, поэтому в вашем примере вы получите -1. В ReportBuilder он ищет 24 часа между двумя значениями, поэтому вы получаете 0. Если вы измените время на ColumnA на «2010-04-23 17:00:00», вы увидите, что значение изменится на -1 как ты ожидал Для сравнения, возможно, имеет смысл убрать компонент времени из ColumnA и ColumnB при выполнении этого оператора SWITCH.

0 голосов
/ 05 апреля 2010

ответ выше приведен.

Вот несколько способов убрать время с даты в зависимости от ваших предпочтений:

1. сделать это в RS : использовать и выражение типа dateserial (год (Fields! ColumnA.Value), месяц (Fields! ColumnA.Value), день (Fields! ColumnA.Value)) в выражении переключателя

2. сделать это в SQL : использовать в запросе выражение типа cast (round (cast (ColumnA как float), 0,1) как datetime)

...