Laura2112
asked on
pass multiple values as parameters from main report to drill down in SSRS
Hi, I am successfully able to set report parameters and use them in the data parameters on a main report I want to pass all the values now to the drilldown report. I went to the properties of the textfield, selected Navigate to the next report using the same parameters. It works but for only one of the multi values. I do not know how to test the string that is being passed in the SQL to see what is happening. Is it possible in the first place to pass multiple values to a drilldown report? I am using the same string as in the first report, in it's own query. I get the message that The report parameter "AcqID" has a DefaultValue or ValidValue that depends on the report parameter "AcqID"
Forward dependancies are not vailid.
WHERE ((C.AcquisitionID IN(@AcquisitionID)) AND (C.ResultID IN(@ResultID)) )
Forward dependancies are not vailid.
WHERE ((C.AcquisitionID IN(@AcquisitionID)) AND (C.ResultID IN(@ResultID)) )
To pass a multi valued parameter to a drill through, when you select the parameter in the expression builder, it will automatically add
=Parameters!AcqID.Value(0)
This (helpfully!) only passes the first selected item. You need to change it to
=Parameters!AcqID.Value
And then it will pass through the entire selection
=Parameters!AcqID.Value(0)
This (helpfully!) only passes the first selected item. You need to change it to
=Parameters!AcqID.Value
And then it will pass through the entire selection
ASKER
Thanks for responding. That makes perfect sense. My text box on main report did have
=Field!AcqID.Value. That was working. When I changed it to =Parameters!AcqID.Value instead I get the error Parameter is a type and cannot be used as an expression. Where am I suppose to use the parameter value? I do not have the choice to do it that way when I am in the Navigation pane assigning the parameters to the drilldown report .
=Field!AcqID.Value. That was working. When I changed it to =Parameters!AcqID.Value instead I get the error Parameter is a type and cannot be used as an expression. Where am I suppose to use the parameter value? I do not have the choice to do it that way when I am in the Navigation pane assigning the parameters to the drilldown report .
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
Let me play around with this, you are great! Will let you know how it is coming.
Definately want the same parameter selection as was chosen in the main report, so will use
=Parameters!xxx.Value [again, you will have to type this manually, it doesn't exist in the dropdown]
Definately want the same parameter selection as was chosen in the main report, so will use
=Parameters!xxx.Value [again, you will have to type this manually, it doesn't exist in the dropdown]
ASKER
Excellent!!! I am getting ready to post another question now that I have this report working. Man, the hours spent on this!
If you are using multi-value parameters, RS converts this to a comma seperated list.
e.g. 123, 654, 8765
The simplest way is then in your query you say
Select * From myTable Where Id In (@myParameter)
BUT for best practice, you should be calling a stored procedure not ad hoc queries.
This is when multi-value parameters become a bit sticky but there is a good solution.
Just pass the parameter into the stored procedure as normal, then call the SQL function listed below from the procedure to break the parameter into a usable form. I use this a lot and it works well. I can't take credit for this code though but it's been so widely published, I'm not too sure who to credit.
Here is an example stored procedure that would use this function;
CREATE PROCEDURE SSRS.SalesByGroups (@Groups varchar(8000))
AS
Select *
From Sales.InvoiceLine
Where PostingGroup In (Select Value From dbo.ufn_Split(@Groups))
Go
e.g. 123, 654, 8765
The simplest way is then in your query you say
Select * From myTable Where Id In (@myParameter)
BUT for best practice, you should be calling a stored procedure not ad hoc queries.
This is when multi-value parameters become a bit sticky but there is a good solution.
Just pass the parameter into the stored procedure as normal, then call the SQL function listed below from the procedure to break the parameter into a usable form. I use this a lot and it works well. I can't take credit for this code though but it's been so widely published, I'm not too sure who to credit.
Here is an example stored procedure that would use this function;
CREATE PROCEDURE SSRS.SalesByGroups (@Groups varchar(8000))
AS
Select *
From Sales.InvoiceLine
Where PostingGroup In (Select Value From dbo.ufn_Split(@Groups))
Go
CREATE FUNCTION [dbo].[ufn_Split](@String nvarchar(4000))
RETURNS @Results TABLE (value nvarchar(4000))
AS
-- ------------------------------------------------------------------------------------------------
-- This function takes a string containing an array and splits the array out and returns it as a
-- table object. This is particularly useful for handling multi value parameters in Reporting
-- Services.
--
-- To use it code as follows;
-- SELECT value FROM master.dbo.ufn_Split('3,23,45,2,6', ',')
-- ------------------------------------------------------------------------------------------------
-- This function takes two parameters; the first is the delimited string, the second is the delimiter
BEGIN
Declare @Index Int, @Slice nvarchar(4000), @Delimiter char(1)
-- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z
Select @Index = 1, @Delimiter = ','
IF @String IS NULL RETURN
WHILE @Index != 0
BEGIN
-- Get the Index of the first occurence of the Split character
SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
-- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
IF @INDEX !=0
SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
ELSE
SELECT @SLICE = @STRING
-- PUT THE ITEM INTO THE RESULTS SET
INSERT INTO @Results(value) VALUES(@SLICE)
-- CHOP THE ITEM REMOVED OFF THE MAIN STRING
SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
-- BREAK OUT IF WE ARE DONE
IF LEN(@STRING) = 0 BREAK
END
RETURN
END
GO
PS: The Database Reporting Zone is a better place for Reporting Services questions
ASKER