我的總體目標是生成一份SSRS 2012報告,其中顯示了有關不同團隊中工作人員的指標。此外,我想有一些自定義下拉式(每個團隊可定製),只顯示特定的工作人員。SSRS報告,帶有從數據庫定義的動態查詢參數
例如,我有2個項目 - Project1和Project2。 Project1希望允許他們在舊金山和紐約隊展示他們的工作人員的下拉選擇。 Project2希望有一個下拉菜單,可以讓他們向休斯敦和舊金山的團隊展示工作人員。
團隊不是由數據庫中的數據表示的結構。我也想在將來任意定義自定義團隊(在家工作的團隊,知道C++的團隊等)。 「全部」團隊意味着沒有過濾。
一個項目的查詢是
select Member.MemberName, Member.MemberWork from Member where Member.Project='Project1'
對於PROJECT1,舊金山團隊,我會寫
select Member.MemberName, Member.MemberWork from Member where Member.Project='Project1' and Member.MemberID IN (123, 125, 127) /* teams are not stored in the database so I need to hardcode member IDs that compose a team */
我存儲的每個自定義下拉菜單選擇之間的關係的方式如下:
CREATE TABLE [dbo].[TeamQueries] ([ProjectName] [nchar](128) NULL,
[TeamName] [nchar](64) NULL,[TeamQuery] [nchar](3096) NULL
) ON [PRIMARY]
示例此表中的行將在此映像中(我不能後因缺乏信譽的)
查詢(數據集在SSRS報告中稱爲「數據」)如下
的@ProjectDropdown
是一個單值TEXT
參數使用默認和可用值來自何處查詢
select ProjectName from Projects
的@TeamQuery
也是一個單值TEXT
參數使用默認和可用值從曲來ERY
SELECT TeamName ,TeamQuery FROM TeamQueries
WHERE ([email protected] or ProjectName = 'All')
選擇TEAM1和舊金山在可用下拉列表,錯誤消息我得到的是:
查詢執行失敗的數據集的「數據」。 '127'附近的語法不正確。
下拉列表填充正常。通過選擇Project1,我可以在下拉列表中選擇舊金山和紐約。
我的問題是 - 怎麼了,我該如何得到這個工作?一般的問題是我想要一個where謂詞字符串(這是IN子句的一部分)來自數據庫,並可選擇應用於SSRS。
這是我嘗試過的一些事情。
- 我試圖讓這個構造在動態SQL之外工作。例如,使用或構建體,以避免
select Member.MemberID from Member
,並具有以下
select Member.MemberName, Member.MemberWork from Member where [email protected] and (@TeamQuery IS NULL OR Member.MemberID IN (@TeamQuery))
我一直得到VARCHAR
到int轉換錯誤。我試圖 select Member.MemberName, Member.MemberWork from Member where [email protected] and (@TeamQuery IS NULL OR CONVERT(VARCHAR(Member.MemberID)) IN (@TeamQuery))
或通過SPLIT
轉換@TeamQuery
到INT
並使TeamQuery多值參數。
我試着在SSRS中打印@query
,希望有一些可調試性,但是我看不到SSRS正在使用的查詢。
如果我在SSRS中對@TeamQuery的參數進行硬編碼,則查詢確實有效。我懷疑某些字符串和引號 - 數據庫檢索到的東西與我預期的稍有不同(也許我需要去掉引號?)