2012-06-27 48 views
3

我正在使用SSRS(VS2008)并创建工作订单报告。在报告表的详细信息行,我有以下的列(有一些假数据)检查字段值是否在SSRS报告中的字符串列表中

WONUM | A | B | Hours 
ABC123 | 3 | 0 | 3 
SPECIAL| 0 | 6 | 6 
DEF456 | 5 | 0 | 5 
GHI789 | 4 | 0 | 4 
OTHER | 0 | 2 | 2 

正如你可以种看到,所有工作任务有一个工单号(WONUM),以及作为一个整体小时数(小时)。我需要根据WONUM将时间放入A列或B列。我有一个特别命名的工单的列表(在这个例子中,它们是“SPECIAL”和“OTHER”),这将导致HOURS值被放入B列。如果WONUM不是特殊的名称,那么它进入A列下面就是我想要把尽可能表达对列A和B列:

Column A: =IIF(Fields!WONUM.Value IN ("SPECIAL","OTHER"), 0, Fields!Hours.Value) 
Column B: =IIF(Fields!WONUM.Value IN ("SPECIAL","OTHER"), Fields!Hours.Value, 0) 

但正如你可能知道,Fields!WONUM.Value IN ("SPECIAL","OTHER")是不是这样做的一个有效的方法!做这项工作的最佳方式是什么?由于其他原因,我无法以任何其他方式在SQL查询中将其标记,因此必须在表中完成。

在此先感谢您的帮助!

+0

如果它只是你试图筛选出两个WONUMs,没有任何理由,为什么你不能只在使用OR IIf声明? – thyme

回答

2

如果它只是两个WONUMs那么你可以这样做:

A柱:

=IIF((Fields!WONUM.Value <> "SPECIAL") AND (Fields!WONUM.Value <> "OTHER"), Fields!Hours.Value, 0) 

B栏:

=IIF((Fields!WONUM.Value = "SPECIAL") OR (Fields!WONUM.Value = "OTHER"), Fields!Hours.Value, 0) 

或一致性每列使用相同的公式并在最后交换字段/ 0。

+0

如果你有2个以上会发生什么?没有“IN”等价物? – PeterX

+0

有些事情你可以做,例如使用'IndexOf',这取决于你的要求。如果你有一个特定的问题,你应该把它作为一个新问题,我们可以在那里处理它。 –

+0

我将我的逻辑移至SQL IN语句以帮助简化SSRS逻辑。 – PeterX

3

试试这个,(使用InStr函数()函数)

IIF(InStr(Fields!WONUM.Value,"SPECIAL")>0 OR InStr(Fields!WONUM.Value,"OTHER")>0, 0, Fields!Hours.Value) 

IIF(InStr(Fields!WONUM.Value,"SPECIAL")>0 OR InStr(Fields!WONUM.Value,"OTHER")>0, Fields!Hours.Value,0) 
+0

感谢您的选择。我在报告中使用了Chris Latta的回答。 –

相关问题