SSRS數據集有兩個T-SQL查詢。一個查詢只有在某個參數選擇了兩個或更多個值時纔會運行。另一個查詢只會在參數只有一個值被選中時運行。如何讓數據集知道從參數中選擇了一個值還是多個值?SSRS報告 - 多選擇定義多個查詢
回答
可以創建名爲NumberOfValues
的addional整數參數,將其設置爲hidden
,並在使用表達式,如下面默認值:
=Parameter!YourMultipleValueParam.Value.Count
然後在數據集可以使用NumberOfValues
參數來確定YourMultipleValueParam
參數選擇的值的數量。
IF @NumberOfValues > 1 BEGIN ....
好問題。這是我發現的一種方法。
第1步:在您的數據集屬性中,轉到「參數」選項卡。使用以下表達式添加參數,用您的參數名稱替換MyParameterName
。
=join(Parameters!MyParameterName.Value,",")
第2步:如果你不已經有一個,增加一個分流的功能,以您的SQL Server的功能。簡單的谷歌搜索將引導您到這樣的事情:Split function equivalent in T-SQL?
步驟3:選擇在你的SSRS報告中使用的參數計數。根據這個結果,做什麼是需要的:(我劃分功能簡稱爲分體式)
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
編輯:替代步驟2和3,如果你不希望(或不能)創建/利用分割功能。
步驟2:在頂部的主查詢,包括以下(基本上直列版本分割功能的)
declare @string varchar(max), @delimiter char(1)
declare @temptable table (items varchar(max))
set @string = @MyParameterName
set @delimiter = ','
declare @idx int, @slice varchar(max)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
步驟3:選擇的參數的計在您的SSRS報告中使用。根據這個結果,做什麼是需要的:(我劃分功能簡稱爲分體式)
IF (select count(*) from @temptable) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from @temptable) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
我瞭解除分割功能以外的所有內容。我在哪裏編寫函數?是否將它添加到主數據集(帶有兩個查詢的數據集),參數的數據集中,還是將它放入新的數據集中? –
不是,它是一個函數(https://msdn.microsoft.com/en-us/library/ms186755.aspx)被添加到數據庫(認爲SSMS,而不是通過報告服務)。一旦它在數據庫中,您可以在查詢中使用它。如果您無權將其添加到數據庫中,我將修改步驟2以包含一個內嵌解決方案,您只需將其添加到查詢頂部即可。 –
雖然Matt H的解決方案沒有錯,但我會選擇Alejandro的解決方案,因爲它使用SSRS函數來確定所選參數值的數量。一旦添加了Alejandro建議的參數,在數據集中,您可以簡單地編輯數據集以讀取IF @MyNewParameter> 1 BEGIN ....您的多值查詢... END ELSE。開始您的單個值查詢END。 (道歉缺少換行符) –
- 1. SSRS多個或單個參數選擇(報告服務)
- 2. SSRS報告,允許選擇多個日期範圍參數
- 3. SSRS報告查詢語法
- 4. SSRS報告 - 參數查詢
- 5. SQL查詢在SSRS報告
- 6. SQL查詢SSRS報告
- 7. SSRS通過多選參數報告
- 8. SSRS 2005報告中的多值選擇和可選過濾器
- 9. SSRS查詢一個報告到另一個報告
- 10. 在報告上運行多個查詢
- 11. 使用多個查詢創建報告
- 12. 報告sql查詢多個何在
- 13. 與多個SSRS報告共享參數
- 14. SSRS報告參數需要多個值
- 15. SSRS報告與多個子表
- 16. SSRS報告與多個數據庫
- 17. 批量更新多個SSRS報告
- 18. 從SSIS包執行多個SSRS報告
- 19. SSRS報告迭代多個參數
- 20. 多個mysql選擇查詢
- 21. 查詢多個選擇框
- 22. 多個選擇查詢
- 23. 如何在查詢SSRS報告中使用多值參數?
- 24. vb.net報告查看器多個報告
- 25. SSRS 2005多對多選擇
- 26. Project Server SSRS報告 - 一個報告動態地包含多個報告
- 27. SSRS報告 - SharePoint 2013 - >在報告中插入多個項目
- 28. SSRS:將多個報告上載到報告服務器2008 R2
- 29. 多選擇查詢
- 30. 將多對多查詢分爲多個列進行報告
您可以創建一個addional整數參數,將其設置爲隱藏**和**使用表達式像這樣爲默認值:!'參數YourMultipleValueParam.Value.Count'然後在數據集可以使用hidden參數來確定'YourMultipleValueParam'參數中選擇的值的數量。 –
好的,我要在主數據集中寫什麼來定義要使用哪個查詢?會像IF(@YourMultipleValueParam> 1)和(@YourMultipleValueParam = 1)的罰款? –
我的意思是你有兩個在SSRS中創建一個額外的隱藏參數,並使用它將所選值的數量傳遞給數據集。因此,如果您將隱藏參數命名爲「NumberOfValues」,則應在SQL中使用「IF(@NumberOfValues> 1)」。 –