具有多个 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] 之间的列。
就这么简单!
谢谢大家的帮助!对不起,我不能给你投票,声望不够:(
我在编写关于 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] 之间的列。
就这么简单!
谢谢大家的帮助!对不起,我不能给你投票,声望不够:(