Sql-Server-2016
在 SSRS 中如何為變數賦值
最近開始使用 Microsoft SQL Server 2016 Reporting Services,第五版,Brian Larson 學習 Reporting Services。我正在創建這個使用 UNION 創建數據集 FuelType 的報告,該數據集將用於將值分配給下拉列表。
SELECT 'All' AS Fueltype, '_All' AS SortField UNION SELECT Description, Description FROM Propulsion ORDER BY SortField
現在有另一個數據集可以幫助為我和那裡生成圖表。
SELECT Propulsion.Description AS Fueltype, FuelPrice.PriceStartDate, FuelPrice.Price FROM FuelPrice INNER JOIN Propulsion ON FuelPrice.PropulsionID = Propulsion.PropulsionID WHERE (YEAR(FuelPrice.PriceStartDate) = @year) AND (Propulsion.Description = @PropulsionType) OR (YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All') ORDER BY Fueltype, FuelPrice.PriceStartDate
我不明白,如何通過使用“@PropulsionType = ‘All’”將所有可用值傳遞給參數。
對於有這本書的人,這是在第 6 章:燃料價格圖表,第 2 版下
SSRS 沒有做任何特別的事情。實際上是查詢區分了提取所有燃料類型或僅提取指定的燃料類型,儘管我懷疑這本書有錯字,因為它看起來缺少一對額外的括號。真正的魔法應該發生在謂詞中,這裡:
WHERE (YEAR(FuelPrice.PriceStartDate) = @year) AND (Propulsion.Description = @PropulsionType) OR (YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All')
這確實應該以以下兩種方式之一編寫:
WHERE ((YEAR(FuelPrice.PriceStartDate) = @year) AND (Propulsion.Description = @PropulsionType)) OR ((YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All'))
或者,另一種方式:
WHERE (YEAR(FuelPrice.PriceStartDate) = @year) AND ((Propulsion.Description = @PropulsionType) OR (@PropulsionType = 'All'))
基本上這樣做是在您的報告傳遞
'All'
參數的情況下,不要過濾Propulsion.Description
. 如果傳遞的參數不是'All'
,則您希望過濾該特定值。從中取出 SSRS,您可以通過此dbfiddle.uk連結查看工作範例。