报告构建器IIF()函数具有多个TRUE值

时间:2015-05-20 10:10:38

标签: reporting-services ssrs-tablix reportbuilder iif

我在讨论关于RB的一些报告时遇到了一个问题。

我有一个tablix,其中列是一天中的小时数,行是不同的产品。我还有一个带3个值的参数(AM,PM,NIGHT)。

这里的要点是,如果参数设置为AM,则tablix仅显示6到12的列,如果设置为PM,则Tablix显示为12到18,...

我可以使用过滤器显示时间间隔(6到12),我告诉他“小时”IN“6,7,8,9,10,11,12”。但是当我将过滤器值设置如下时,它不起作用:

表达式:=Cstr(Fields!ProdHour.Value)

接线员:IN

价值:

=iif(join(Parameters!Shift.Value) = "AM", "6, 7, 8, 9, 10, 11, 12" , iif(join(Parameters!Shift.Value) = "PM", "13, 14, 15, 16, 17, 18", iif(join(Parameters!Shift.Value) = "NIGHT", "19, 20, 21, 22, 23, 0", false) ) )

你知道我怎么解决这个问题吗?试图改变整数中的每个数字,但没有工作......

3 个答案:

答案 0 :(得分:1)

我建议更改参数的绑定,如(ID,Value),请参阅下面的屏幕截图

enter image description here

现在您可以使用表达式来获取选定的值

=Parameters!ReportParameter1.Value

如果您不想硬编码,也可以使用以下查询来绑定您的下拉列表

Select ID,Value From 
(Values('6,7,8,9,10,11,12','AM'),
('13,14,15,16,17,18','PM'),
('19,20,21,22,23,0','Night'))
tblTime(ID,Value)

我认为这就是你要找的东西

答案 1 :(得分:1)

我会放弃在SSRS过滤器表达式中使用In运算符。除了" ="我使用任何操作符的过滤器只有普遍不好的经验。还有数据类型的问题。

我的偏好是使用SQL在数据集查询中过滤掉这些数据。然而,这不是问题。

在SSRS过滤器中,根据经验,我现在只设置数据类型:"布尔",运算符:" ="和价值:"真"。然后,您的挑战是编写一个表达式,该表达式仅为您要保留的行返回True。

这可能是这样的:

=Iif ( ( Parameters!Shift.Value = AM and ("6,7,8,9,10,11,12").Contains(Fields!Hour.Value) ) Or ( ...

Shift参数是多选吗?

答案 2 :(得分:1)

我找到了一个有效的解决方案:

我必须在与表格相同的数据集中创建2个新字段,我将这些字段命名为" ShiftStart"和" ShiftStop"。

ShiftStart值:= iif(join(参数!Shift.Label)=" AM"," 6",iif(join(参数!Shift.Label)=&#34 ; PM"" 12"!,IIF(加入(参数Shift.Label)=" NIGHT"" 0"" 0&# 34;)))

与ShiftStop相同,但与其他值(12,18,0)相同。因此,对于这两个数据,当我选择&#34; AM&#34;,ShitStart = 6和ShiftStop = 12时,现在我可以创建一个过滤器来显示[Hour]在[ShiftStart]和[ShiftStop]之间的列。< / p>

这很简单!

谢谢你的帮助!对不起,我不能保护你,声名不好:(