I have a report where I switched all the single valued parameters to multi-value. The report had 8 sections whose visibility was controlled through the selection of a parameter. The user could choose one of the sections or all. I had set the sections up as rows of a table and used the following expression on the hidden attribute for that table row: IIF(Parameters!<parameterName>.Value = <thisSectionName> OR Parameters!<parameterName>.Value = "ALL", false, true). This expression would cause this section to only be displayed if that section’s name or All was picked from the parameter ("ALL" was a static value I added to the parameter value when it was created). However this no longer worked when switching to multi-value parameters. The solution was to combine the JOIN() function, which creates a delimited string out of its argument, with the InStr() function, which returns the starting position of a string within another string. Combining the two resulted in the following expression: IIF(InStr(JOIN(Parameters!<parameterName>.Value), "<thisSectionName>") > 0 OR Parameters!<parameterName>.Count = <totalNumberOfParameterValues>, false, true). This expression will create a string containing all of the selected values of the multi-value parameter and search it for an occurence of the section name. If found, the integer position will be returned. If that value is greater than 0, then we want the section displayed (hidden = false). Also, the expression checks to see if all of the values are selected, which is controlled by the count property of the parameter compared against the total number of possible values, which again will signal that we want the section displayed. If the string is not found or all of the values are not selected, then the section will not be displayed (hidden = true).
Hope this helps. Happy Coding!