Expression expected error for SSRS parameter - reporting-services

I want to pass multiple choices from a filter to my stored procedure. The main parameter which I allow user to choose multiple values named restCode. Beside this, I created a new parameter named multiRestCode to store multiple choice values as a comma delimited string and then pass this string to my stored procedure. I have set the default value of multiRestCode with this expression;
=Join(Parameters!restCode.Value, ',')
However, I am getting the following error when I try to run the report;
The Value expression for the report parameter ‘multiRestCode’ contains an error: [BC30201] Expression expected.
How Can I solve this issue? Thanks in advance.

There was a very basic solution. I just replaced the '' with "" and report worked.
From this;
=Join(Parameters!restCode.Value, ',')
To this;
=Join(Parameters!restCode.Value, ",")

Related

SSRS - multi-value parameter is throwing error when more than one value is selected

I am using Visual Studios 2015 with SSDT installed. I cannot show my query as it has confidential columns in it. Let's just say I have two temporary tables that gather general data which are joined in the select statement and uses a where clause that accepts a multi-value parameter of text datatype (column is char(8)) to filter the information in the report. I have checked allow multiple values in the parameter properties. There are no available values, the user types the values in. (I've also tried supplying values in drop down list with same results).
Where smpl_lvl_cd in (#SampleLevel)
I would think this is quite simple and when the user selects one value, everything works well. As soon as you choose more than one value, you get the error "An expression of non-Boolean type specified in a context where a condition is expected, near ','."
For example: Sample Levels 'Q' and 'V' are selected. The way I understand it, SSRS send 'Q,V' to the query. (Or does it send "Q,V,'?) With this in mind, I've tried using:
Where smpl_lvl_cd in (select value from string_split(#SampeLevel, ','))
with similar results "Procedure or function string_split has too many arguments specified....." followed by the same Boolean message.
This parameter is not being sent to a stored procedure but I've tried using the join function on the parameter in combination with the string_split in the query. I end up getting no data for more than one selection.
Please help.
See this article: SSRS multi-value parameter using a stored procedure. You have to change your multi-valued parameter array into a string before sending into your dataset. therefore send the expression =Join(SampeLevel!Value,",") instead of [#SampeLevel]

What is the SSRS Multi Value Data Type and how to use

I have a multi-select.
I think the underlying datatype is int || array(int). This is pretty frustrating that you have to do a check to see if a multi-value is present before jumping into an index. But how does this value get passed to SQL?
It's easy enough to use in a IN (#variable) statement. How else can it be used? Is it a string or a table. From my investigations it appears to be single table row with many un-named columns but I'm not really sure.
Finally, when you want to simulate a multi-select in a query inside visual studio, for example to "Refresh Fields" how do you do that? For example "1,2,3", {1,2,3} or #{1,2,3}. It's not (123) because that is -123.
It dpends what you are trying to do and in what context.
As you said, if you have a datset query that is a SQL script (as opposed to a stored proc) then you can use IN(#paramName). In this instance SSRS take the parameter values (not the labels) and injects them into the sql statement as a string e.g. '1,2,3'. The result would be IN(1,2,3). If you want to pass in a list of, say, countries then you would have to set the parameter values to be the same as the parameter labels So rather then Value =1, Label = Spain you would have Value = Spain and Label = Spain. Used in an IN() would generate something like IN('Spain', 'France').
If you try to do the same with a stored proc e.g. EXEC myProc #myParam, then the parameter values would be passed as a sing string which would then need to be split out by the proc.
If you just want to get a list of selected parmeter values or label shoing in your report then you can simply do something like
=JOIN(Parameters!myParam.Value, ",")
or
=JOIN(Parameters!myParam.Label, ",")
where "," is the delimiter
If you pop this expression in a text box, you'll get a list of the selected parmater values/labels
I think it's a kind of madness but I found a workaround to get a table of values from the results from SSRS. I query the IDs against a source table using IN(). I hope there is a better way of doing this?
SELECT [TblFeeBillingCycleID]
FROM [TblFeeBillingCycle]
WHERE [TblFeeBillingCycleID] IN(#intCycleId)

Pad user input with zeros in a multiple value parameter

Is there a way to pad numbers in a multiple value parameter to make them have 8 characters in length? Right now I am using:
=Right("00000000" & Parameters!Accounts.Value,8)
in an invisible parameter then that parameter is passed to the in part of my query. When I have, multiple values unchecked it works properly, but as soon as I turn on multiple values I get an error
The DefaultValue expression for the report parameter ‘ActualAccounts’ contains an error: Operator ‘&’ is not defined for string “00000000” and type ‘Object()’.”
I want the user to be able to paste in a list of accounts like:
93874
93932128
3838
And then it queries the database as
00093874
93932128
00003838
Here is an approach that could work for you.
First, grab the udf_Split user-defined function (UDF) from the this question's answer. With this UDF you to pass the delimited string as a parameter, and it will return a table with a row for each value. This is how SSRS sends the data to SQL Server when it comes to multi value parameters.
Once you have that in place, then all you need to do is use that UDF in the following manner.
DECLARE #ActualAccounts varchar(100) = '93874,93932128,3838'
SELECT RIGHT('00000000' + RTRIM(LTRIM(Value)), 8) AS Accounts
FROM dbo.udf_Split(#ActualAccounts, ',');
Results:
Accounts
--------
00093874
93932128
00003838
Then you could use this in the SQL for the report
SELECT *
FROM Accounts
WHERE AccountNumber IN (SELECT RIGHT('00000000' + RTRIM(LTRIM(Value)), 8)
FROM dbo.udf_Split(#ActualAccounts, ','));
This answer assumes the name of the SSRS parameter is ActualAccounts. You should be able to fit this into a stored procedure, if that is what you are using. It should work in straight SQL if you have that embedded in the RDL, too.
Hope this helps out.

Multiple values to pass in a subreport SSRS

Can I use the below expression to pass multiple value in a parameter in subreport?
=Join(LookupSet(1,1,Fields!Name.Value, "DatasetName")," / ")
Will the Join and LookupSet function work in prameter value expression?
No your expression won't work. The Available Values for the Parameter are expecting a single record at a time.
I would create a parameter in the main report with the dataset as DatasetName with the Value of Name. You can set that to Hidden and don't need to use it.
Use that parameter to link to your sub report's parameter.
That should have the same functionality as what you want and would be faster that using the JOIN/LOOKUPSET.
As long as the receiving parameter in the subreport is set to "allow multiple values", you should be able to pass in the lookupset array itself without needing the JOIN function at all.

Read query string parameter value in SSRS Report

I have passed one parameter to report server url.
http://<your server>/ReportServer?/<folder>/<reportname>&UserID=Name
How can I read UserID value in report.
Or
How can I print this value in any of the textbox to check what is passed to it?
For example: Above url should show 'Name'.
Based on your comments I think you've figured this out already, but all you should need is the parameter UserId to exist on the report and it will get its value from the query string.
A couple other problems that can crop up when trying to pass a parameter:
Report parameters are case sensitive
Report parameters with visibility set to Internal can't be passed a value through URL
See also: Pass a report parameter within a URL on MSDN
You can try with the Built-In SSRS fields ...
Try using Expression -> Built-In-Fields -> UserId should work in this case, if I understood your question correctly...
OR
Try manipulating the report server URL. Provided below one for example ...
=mid(Globals!ReportServerUrl , InStr(Globals!ReportServerUrl,"&UserID=")+8)
Issue was with my parameter UserId.
I have set it as Internal that's why it was set to default value blank space instead of passed parameter UserId value. (Now I am using hidden)
Note: Report parameters are case sensitive so in my case it must be UserId