具有多个 TRUE 值的报告生成器 IIF() 函数

report builder IIF() function with multiple TRUE value

我在编写关于 RB 的一些报告时遇到问题。

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

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

我可以使用过滤器显示时间间隔(6 到 12),我告诉他 "Hour" 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) ) )

你知道我该如何解决这个问题吗?尝试更改 Integer 中的每个数字但没有成功...

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

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

=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)

我想这就是你要找的

我会放弃在 SSRS 过滤器表达式中使用 In 运算符。除了使用“=”之外的任何运算符以及数据类型问题,我在使用过滤器时只有普遍糟糕的经历。

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

在 SSRS 过滤器中,根据大量经验,我现在只设置数据类型:"Boolean"、运算符:“=”和值:"True"。那么您的挑战是编写一个表达式,该表达式仅对要保留的行 returns 为真。

可能是这样的:

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

Shift参数是否多select?

我找到了可行的解决方案:

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

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

与 ShiftStop 相同,但具有其他值 (12,18,0)。因此,对于这 2 个数据,当我选择 "AM"、ShitStart= 6 和 ShiftStop=12 时,现在我可以创建一个过滤器来显示 [Hour] 在 [ShiftStart] 和 [ShiftStop] 之间的列。

就这么简单!

谢谢大家的帮助!对不起,我不能给你投票,声望不够:(