2013-11-21 42 views
0

我的總體目標是生成一份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轉換@TeamQueryINT並使TeamQuery多值參數。

我試着在SSRS中打印@query,希望有一些可調試性,但是我看不到SSRS正在使用的查詢。

如果我在SSRS中對@TeamQuery的參數進行硬編碼,則查詢確實有效。我懷疑某些字符串和引號 - 數據庫檢索到的東西與我預期的稍有不同(也許我需要去掉引號?)

回答

0

問題在於列的定義。我錯誤地創建了列定義nchar而不是nvarchar。這會導致額外的填充和查詢錯誤。