Reporting services 具有多个真值的报表生成器IIF()函数

Reporting services 具有多个真值的报表生成器IIF()函数,reporting-services,ssrs-tablix,reportbuilder,iif,Reporting Services,Ssrs Tablix,Reportbuilder,Iif,我在写RB的报告时遇到了一个问题 我有一个tablix,其中列是一天中的小时数,行是不同的产品。我还有一个带有3个值的参数(AM、PM、NIGHT) 这里的要点是,如果参数设置为AM,tablix仅显示6到12的列,如果设置为PM,tablix显示12到18的列 我可以使用过滤器显示时间间隔(6到12),在“6、7、8、9、10、11、12”中告诉他“小时”。但当我将过滤器值设置为以下值时,它不起作用: 表达式:=Cstr(字段!ProdHour.Value) 操作员:在 价值: =iif(jo

我在写RB的报告时遇到了一个问题

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

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

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

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

操作员:

价值:

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


你知道我怎么解决这个问题吗?试图更改整数中的每个数字,但不起作用…

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

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

=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”。然后,您的挑战是编写一个表达式,该表达式只对要保留的行返回True

这可能类似于:

=Iif((参数!Shift.Value=AM和(“6,7,8,9,10,11,12”)。包含(字段!Hour.Value))
或(…


换档参数是多选的吗?

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

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

ShiftStart值:=iif(join(参数!Shift.Label)=“AM”、“6”、iif(join(参数!Shift.Label)=“PM”、“12”、iif(join(参数!Shift.Label)=“NIGHT”、“0”、“0”))

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

就这么简单


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

你试过使用switch语句而不是一系列嵌套的iif语句吗?没有,我会尝试并给出反馈。谢谢switch函数只允许1个值表示“真”或“假”。这与iif()相同声明。我从微软网站上取了一个例子:SWITCH(Customer Type=“I”,“Individual”,Customer Type=“S”,“Shop”),在我的例子中,我需要的是,如果Customer Type=I,值应该是“Indiv1,Indiv2,…”你知道我的意思吗?我需要它给出与我使用如下过滤器集相同的结果:表达式:=Fields!Hour.Value运算符:IN Value:6,7,8,9,10,11,12我不确定我是否在跟踪你。在你的问题中,你的iif语句返回逗号分隔的字符串。我看不出在返回时使用开关的问题ng一个字符串值。每个开关段计算一个真-假语句。看起来您误解了开关函数@MaximeCoppeée。它允许您为任意数量的条件的第一个真条件返回一个值。逗号分隔的字符串是“一个值”。因此,您可以执行MyField=“AM”,“1,2,3”,MyField=“PM”,“4,5,6”,MyField=“NIGHT”,“7,8,9”。不过,我建议您尝试将嵌套IIF表达式末尾的“false”更改为空字符串。我认为我们的方法是正确的@Naveen Kumar。我尝试了这个方法,如果我输入=Parameters!Shift.Value(0),它将正确显示“6,7,8,9,10,11,12”在文本框中,但在我的列过滤器中,它不显示任何列…因为我无法在此处发布图像,您可以看到以下链接的屏幕截图:以下是输出报告应显示的内容,例如,我选择了“AM”“在参数中:当我尝试你的命题和以上所有内容时,它不会显示任何东西..::它没有9,10和11是正常的,因为列没有数据,所以它不会显示它。看起来,即使参数的值输出是“6,7,8,9,10,11,12”如果Shift(我希望这是正确的拼写,而不是您在上面使用的:-)参数是multiselect,则它将如下所示:
=Iif((Join(Parameters!Shift.Value,,”))。包含(“AM”)和(“6,7,8,9,10,11,12”)。包含(字段!Hour.Value)或(…