2011-06-23 25 views
0

我產生一些MI在SSRS報告說,使用底層表與日期和一些真實的信息,例如:如何使用基礎日期數據類型在SSRS中獲得整齊格式化的日期參數?

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

我已經創建了參數@StartDate,@EndDate和@Severity報告。我希望用戶能夠以「2006年1月」或者「2010年Q4」的形式選擇日期。我可以通過具有一個數據集要這樣做的參數是例如: -

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

然而這最終排序像這樣:

2003 April 
2003 August 
2003 December 

等(因爲它被分類爲一個字符串)。

這也意味着我不能使用的參數在主報告中的數據集的日期,因爲它們都是字符串限制結果。

有誰知道我怎樣才能讓(按日期排序)基於表中的日期範圍內的參數,方便用戶的輸入,同時仍允許在主報告的數據集按日期範圍限制?

非常感謝!

鮑勃

回答

0

如果DateRaised是日期格式,那麼就改變你的語句的結束

ORDER BY DateRaised 
1

選項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

乾杯傢伙S,

我結束了添加源數據生成的兩個額外的「列」,我可以在報告中使用的參數,例如假設用戶選擇Start Date =「May 2008」End Date =「Feb 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年5月」),並在查詢中使用的其他計算,潛在的日期時間值(2005-05-01 00:00:01)。