First I will mention a bit of my work to better understand my question
So, in SSRS, I have multiple parameters which all are sent to procedure using =Join(Parameter!x.value,",") then in the procedure I create a where condition by concatenating all the parameters.
Something like this:
> Set @where =
> 'and Table.Column in(''' + replace(RTRIM(LTRIM(@Parameter1)),',', ''',''')
> + ''')' + '
> and Table.Column in(''' + replace(RTRIM(LTRIM(@Parameter2)),',', ''',''')
> + ''')' + '
> and Table.Column in(''' + replace(RTRIM(LTRIM(@Parameter3)),',', ''',''') +
> ''')' + '
My question is: How can I create this @where in SSRS as a dataset/parameter. I want to do this so that I can use the same @where in a detail report which is connected to main summary report and passed to my detail report when I click on a number in my summary report. I don't want to recreate the same where condition again in my detail rdl
As @StevenWhite pointed out, you probably need to rethink your approach but if you really want to do this.
You need to add an additional parameter to your report (you can hide it once it's all working OK)
The dataset for this parameter would be your existing dynamic sql code, but just the WHERE clause part, so hte end of the dataset query just do something like SELECT @where.
So, this new parameter will be populated once the other parameters have been populated and it's value will be your where clause. You can then pass that as a parameter to your other datasets where applicable.
If that doesn't make sense, let me know and I'll do a more complete answer soon.
More Complete Answer
In this example I've used hte
Northwind
sample databaseI show how to generate a WHERE clause that can be used in another dataset (or as many as you like). In this exmaple I'll just do it with one.
I will have two parmeters for the where clause selections
Our final dataset query will be dynamic sql that forms the statement something like this..
Heres the steps I took:
Created a new blank report Added a conncetion to the Northwind database
Created a dataset called
dsProd
Set the query for this dataset to beSELECT ProductID, ProductName FROM Products ORDER BY ProductName
Created a dataset called
dsEmployee
Set the query for this dataset to beSELECT EmployeeID, FirstName FROM Employees ORDER BY FirstName
Added a parameter called
pProd
Set the parameter to be Mutil-value Set the available values to thedsProd
dataset Set the Value field toProductID
Set the Label field toProductName
Added a parameter called
pEmp
Set the parameter to be Mutil-value Set the available values to thedsEmployee
dataset Set the Value field toEmployeeID
Set the Label field toFirstName
Added a final parmater called
pWHERE
Set the default value (Specify values) for this to the following ExpressionNext added a datset called
dsResults
Set the dataset Query toFinally I added a table to the report pointing to
dsResults
to display the output.Now, when you choose the employees and products, the where clause is constructed in the
pWHERE
parameter and passed to the final query's dataset.NOTE: Going back to my original point, reiterating what @StevenWhite was saying, all this is probably unneccessary. In this simple case you could have simply set the final dataset query to
SELECT o.* , d.Discount, d.ProductID, d.Quantity, d.UnitPrice FROM Orders o JOIN [Order details] d on o.OrderID = d.OrderID WHERE ProductID in (@pProd) and EmployeeID IN (@pEmp)
This would do exactly the same job, it would be quicker, you would not need the pWHERE parameter at all and it would be more reliable, the example above will probably have issues after the first run as the
pWHERE
parameter may not refresh correctly.Anyway, that's up to you but doing it the right way is always quicker in the long run..