Как получить аккуратно отформатированные параметры даты в SSRS, используя базовый тип данных даты? - PullRequest
0 голосов
/ 24 июня 2011

Я генерирую некоторые отчеты MI в SSRS, которые используют базовые таблицы с датой и некоторой фактической информацией, например:

RiskID int
DateRaised date
Severity varchar(30)
Title varchar(200)

Я создал отчет с параметрами @StartDate, @EndDate и @Severity. Я хочу, чтобы пользователь мог выбирать даты в форме "Январь 2006" или, возможно, "Q4 2010". Я могу сделать это, имея набор данных для параметров, например ::1004

SELECT DISTINCT DATENAME("Year", DateRaised) + ' Q' + DATENAME("Quarter", 
DateRaised) AS Date FROM tbRisks ORDER BY Date

Однако в итоге сортировка происходит так:

2003 April
2003 August
2003 December

и т. Д. (Поскольку она сортируется как строка).

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

Кто-нибудь знает, как я могу разрешить удобные для пользователя вводы (отсортированные по дате) для параметров, основанных на диапазоне дат в таблице, в то же время позволяя ограничивать диапазон дат в наборе данных основного отчета?

Большое спасибо!

Bob

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Вариант 1:

SELECT DISTINCT
  DATENAME("Year", DateRaised) + ' Q' + DATENAME("Quarter", DateRaised) AS Date,
  DATEPART("Year", DateRaised) AS Sort1,
  DATEPART("Quarter", DateRaised) AS Sort2,
FROM tbRisks
ORDER BY Sort1, Sort2

Вариант 2:

SELECT
  DATENAME("Year", DateRaised) + ' Q' + DATENAME("Quarter", DateRaised) AS Date
FROM tbRisks
GROUP BY
  DATENAME("Year", DateRaised) + ' Q' + DATENAME("Quarter", DateRaised)
ORDER BY MIN(DateRaised)
0 голосов
/ 29 июня 2011

Приветствия, ребята,

В итоге я добавил два дополнительных «столбца», сгенерированных из исходных данных, которые я мог бы использовать в аргументах отчета, например, Предположим, что пользователь выбирает Дата начала = "Май 2008" Дата окончания = "Фев 2009". Что действительно нужно в запросе, так это дата начала 2008-05-01 с 00:00:01 по 2009-02-28 23:59:59, это сделает это на лету и будет использовать удобные для пользователя даты:

Select DISTINCT 
'YearMonth' =
  CASE
     WHEN MONTH(dtwhen) = 01 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jan'
     WHEN MONTH(dtwhen) = 02 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Feb'
     WHEN MONTH(dtwhen) = 03 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Mar'
     WHEN MONTH(dtwhen) = 04 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Apr'
     WHEN MONTH(dtwhen) = 05 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' May'
     WHEN MONTH(dtwhen) = 06 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jun'
     WHEN MONTH(dtwhen) = 07 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jul'
     WHEN MONTH(dtwhen) = 08 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Aug'
     WHEN MONTH(dtwhen) = 09 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Sep'
     WHEN MONTH(dtwhen) = 10 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Oct'
     WHEN MONTH(dtwhen) = 11 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Nov'
     WHEN MONTH(dtwhen) = 12 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Dec'
     ELSE LEFT(CONVERT(varchar, dtwhen, 20),4)+'Jan' -- DPT
  END,
  CAST(CAST(YEAR(dtwhen) AS varchar) + '-' + CAST(MONTH(dtwhen) AS varchar) + '-01 00:00:01' AS DateTime) AS MonthBegin,
--Add a date column storing the exact date at the end of the selected month
-- E.g. Jan 2004 becomes Jan 29th 23:59:59
-- It basically adds 1 month to the exact beginning of next month, then rolls back 2 seconds..
DATEADD(SECOND,-2,DATEADD(MONTH,1,CAST(CAST(YEAR(dtwhen) AS varchar) + '-' + CAST(MONTH(dtwhen) AS varchar) + '-01 00:00:01' AS DateTime))) AS MonthEnd
FROM Feedback
ORDER BY MonthBegin DESC

Ключевым моментом, на который следует обратить внимание, является то, что в SSRS вы можете отобразить поле varchar для пользователя ("май 2005") и использовать другое вычисленное базовое значение datetime (2005-05-01 00:00:01) в своем запросе. .

0 голосов
/ 24 июня 2011

Если DateRaised имеет формат даты, просто измените конец вашего утверждения на

ORDER BY DateRaised
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...