Построитель отчетов SQL Server - значение TransactionDate неправильно отображается больше значения endDate - PullRequest
0 голосов
/ 25 марта 2019

У меня есть значение TransactionDate, которое извлекается из набора данных, и значение endDate, которое создается как параметр, выбранный пользователем.

Примерно для 98% всех моих строк отчета правильный результат отображается соответствующим образом, но у меня есть несколько строк, которые не возвращают данные должным образом, как предполагалось, и это потому, что построитель отчетов идентифицирует определенные TransactionDates как больше чем endDate.

Параметр уже был установлен в вычисляемое поле -> FormatDateTime(Parameters!endDate.Value,DateFormat.ShortDate)

Используемое мной утверждение показывает мне результаты, которые я просматриваю, чтобы понять, что работает, а что нет:

=IIF((Fields!endDateCalc.Value >= Fields!TransactionDateCalc.Value), Fields!UnitSales.Value, "N/A")

По сути, я обеспокоен пониманием того, почему это может происходить / что я делаю, чтобы это произошло.

Я, конечно, перевернул использованную формулу, которая показывает мне результаты, которые я ищу, и изменил ее, чтобы увидеть, реагирует ли линия, и это так. (Просто переключите >= на <=.

Например, мы можем сказать, что TransactionDate - это 3/4/2019, а endDate - это 3/25/2019. Для этой строки будет возвращен неверный результат, и он будет представлен как N/A. Это должно возвращать правильное значение UnitSales для этой строки, но, как указано, это не так.

Принимая во внимание, что если TransactionDate было 3/12/2019, а endDate было все еще 3/25/2019, оно вернуло бы правильное значение UnitSales.

Пожалуйста, дайте мне знать, если нужна какая-либо другая информация.

1 Ответ

0 голосов
/ 25 марта 2019

Я думаю, что сравнение берет 3/4/2019 и по какой-то причине берет 4 и сравнивает это с 2 в endDate. Я бы предложил изменить сравнение на что-то вроде следующего выражения.

  =IIF((Year(CDate(Fields!endDate.Value)) >= Year(CDate(Fields!TransactionDate.Value))) 
     AND DatePart(DateInterval.DayOfYear, CDate(Fields!endDate.Value)) >= DatePart(DateInterval.DayOfYear, CDate(Fields!TransactionDate.Value)),
     Fields!UnitSales.Value, "N/A")

Сначала будут сравниваться годы каждой даты, а затем избегаться любые проблемы с конверсией и просто получаться день года для каждой из них для сравнения и подтверждения того, что endDate больше TransactionDate.

...