I was working on re-designing a report today where I was changing certain single-valued parameters to multi-value. I love this ability in that it allows the user to create much more dynamic reports. The previous version of the report was displaying the value of the selected parameters in text boxes in the header of the report using the expression: ="<parameterName>: " & Parameter!<parameterName>.Label. Unfortunatley, this caused an error when switching to multi-value parameters. I found a couple of great articles and comments that showed how to display the value / label of a multi value parameter (links below). You can use the JOIN(expression, delimiter) function to create a delmited string of either the parameter’s values or labels. To make a comma delimited list of the parameter’s labels, you would use the expression: JOIN(Parameters!<parameterName>.Label, ","). This solution works perfectly. I still had one other problem. One of my parameters contained a large list of staff, and I didn’t want every staff member to be shown if the user selected all of the values for the parameter. Fortunately, SSRS report parameters have an attribute called Count that contains the number of selected values. With this, you can construct a conditional expression to control what is displayed depending on how many values are selected. For example, This expression will only display the word "All" if all of the values have been selected, or else it will display the comma delimited list of values: IIF(Parameters!<parameterName>.Count = <totalNumberOfValues>, "All", JOIN(Parameters!<parameterName>.Label, ",")). So how do you determine the total number of values to compare against? If you have a non-queried dataset for a parameter, then the solution is easy; simply count up the values you have and that’s your number. For my purposes, I was gathering a list of staff which can change over time. The solution was to create a new dataset that returned the count of staff, using the same query that retrieved the staff names for the parameter. Once I had the count, I created a new internal parameter and assigned it’s default value to the value of that count. Now in my expression, I can compare the count of parameter values to the count of staff retrieved and contained in my internal parameter. This way the results will always be the same and dynamic.
Hope this helps. Happy coding!