我有一个SSRS报告,其中包含用户在运行时选择的几个参数。其中一个参数允许多选。我使用这些值来填充文本框,并且在选择倍数时使用参数值时遇到问题。以下是用户选择一个值时的操作:
=Switch(Parameters!ID.Value(0) = 5, "Location 1", Parameters!ID.Value(0) = 9, "Location 2") & " Status Report"
不过,我还有一个案子。由于它是多选的,如果参数包含值5和9,我想让它说";位置1和位置2"";状态报告";
我不知道如何做到这一点。
我试过了:
=Switch(Parameters!ID.Value(0) = 5, "Location 1", Parameters!ID.Value(0) = 9, "Location 2", **Parameters!ID.Value(0) = 5 AndAlso Parameters!ID.Value(0) = 9, "Location 1 and Location 2"**) & " Status Report"
想法?
假设您的ID参数为
- 从查询或
- 手动设置其可用值
因此,您的参数中应该有两个可用属性。它的值(实际传递给查询/过滤器等的位(和标签(您通常作为用户看到的位(。
假设你的参数列表中有3个ID,如
Value Label
5 Location 1
9 Location 2
10 Some other location
然后,您所需要做的就是像这样引用表达式中参数集合的标签。
= JOIN(Parameters!ID.Label, " and ") & " Status Report."
就是这样。
当我试图在多值参数中找到一个值时,我所做的是将所有值连接到一个字符串中。
"|" & JOIN(Parameters!ID.Value,"|") & "|"
如果选择了参数值1、2和3,则字符串将为|1|2|3|
。管道已添加,因此在选择11时找不到1。
如果要检查某个值,请使用INSTR函数,并将值括在"管道"中。如果未找到,INSTR将返回0,如果找到,则返回字符位置。
这将从上面的参数字符串中搜索5:
INSTR("|" & JOIN(Parameters!ID.Value,"|") & "|", "|5|")
所以你的表情会像一样
=Switch(INSTR("|" & JOIN(Parameters!ID.Value,"|") & "|", "|5|") > 0 AndAlso INSTR("|" & JOIN(Parameters!ID.Value,"|") & "|", "|9|") > 0, "Location 1 and Location 2",
INSTR("|" & JOIN(Parameters!ID.Value,"|") & "|", "|5|") > 0, "Location 1",
INSTR("|" & JOIN(Parameters!ID.Value,"|") & "|", "|9|") > 0, "Location 2",
1 = 1, "Locations " & JOIN(Parameters!ID.Value,", ")) &
" Status Report"
我把你的AND标准移到了第一个位置,因为SWITCH会选择第一个,除非既没有选择5也没有选择9,否则永远不会到达你的第三个。如果既没有选择5也没有选择9,我还添加了1 = 1
作为余波。
我使用了以下内容,它对我有效:
=CStr(Parameters!Month.Label) &", " &CStr(Parameters!Year.Label)
您需要使用CStr将数字转换为字符串,以便添加逗号等其他字符。