2016-04-21 126 views
0

enter image description here我正在研究具有「Quarter1」,「Quarter2」,「Quarter3」和「Quarter4」參數的SSRS報告,並且我有一個查詢需要獲取用戶值獲取該季度的數據,如果選擇了季度1,則我的查詢看起來像這樣。我使用VS 2010 BIDS爲SSRS和SQL 2012數據庫SSRS報告參數需要多個值

Select 
CASE WHEN MONTH(DateGenerated) <= 3 THEN '1Q/' 
WHEN MONTH(DateGenerated) > 3 and MONTH(DateGenerated) <= 6 THEN '2Q/' 
WHEN MONTH(DateGenerated) > 6 and MONTH(DateGenerated) <= 9 THEN '3Q/' 
WHEN MONTH(DateGenerated) > 9 and MONTH(DateGenerated) <= 12 THEN '4Q/' END 
as GenDate, Notes, Equation 

from SubTask 

where Year(DateGenerated) = @year and MONTH(DateGenerated) in (@Quarter) 

當SSRS這樣做,我不能給個月(1,2和3)價值Quarter1。有沒有我失蹤的方法。感謝幫助..

回答

0

您的來自SSRS的參數將以逗號分隔的字符串的形式出現,因此我們需要一個函數來分隔這些值。

例如,如果你的參數是四分之一......那麼你的SQL就像

Create Procedure xyz 
@Quarter varchar(50) = null 
as BEGIN 

Select 
CASE WHEN MONTH(DateGenerated) <= 3 THEN '1Q/' 
WHEN MONTH(DateGenerated) > 3 and MONTH(DateGenerated) <= 6 THEN '2Q/' 
WHEN MONTH(DateGenerated) > 6 and MONTH(DateGenerated) <= 9 THEN '3Q/' 
WHEN MONTH(DateGenerated) > 9 and MONTH(DateGenerated) <= 12 THEN '4Q/' END 
as GenDate, Notes, Equation 

from SubTask 

where Year(DateGenerated) = @year and MONTH(DateGenerated) 
in (Select Value From dbo.FNSplit(@Quarter,',')) 

而且功能...

CREATE FUNCTION [dbo].[FnSplit] 
(
@List nvarchar(max), 
@SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(

Id int identity(1,1), 
Value varchar(max) 
) 
AS 
BEGIN 
While (Charindex(@SplitOn,@List)>0) 
Begin 
Insert Into @RtnValue (value) 
Select 
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
End 

Insert Into @RtnValue (Value) 
Select Value = ltrim(rtrim(@List)) 
Return 
END 

GO