2017-06-20 26 views
1

我一直试图多次调整这个想法,因为我的空检查被打破。在这里引用一个空格式:IIF Statement Null Check带过滤器的SRSS交换机一直抛出错误

这似乎并没有为我的情况。无论如何,如果任何人都可以快速查看一下,看看他们是否能够看到那样的错误。

=SWITCH(
Fields!lmItemStatus.Value, "Additional Repair Proposal Submitted - Pending Award", Year(DateAdd(DateInterval.Day, (Fields!lmFinalDelvTerms.Value + 60), Today)), 

Fields!lmItemStatus.Value, "Repair Award*", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 90), Today)), 

Fields!lmItemStatus.Value, "Award Received - Pending Shipment For Assessment" & Fields!vendor.Value, "H" or "I", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 90), Fields!lmiiiSAAwardDate.Value)), 

Fields!lmItemStatus.Value, "Award Received - Pending Shipment For Assessment" & Fields!vendor.Value, "A" or "B" or "C" or "D" or "E" or "F" or "G", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 30), Fields!lmiiiSAAwardDate.Value)), 

Fields!lmItemStatus.Value, "Undergoing Assessment at Repair Facility", Year(DateAdd(DateInterval.Day, (Fields!lmArmaDelvTerms.Value + fields!lmFinalDelvTerms.Value + 30), Fields!lmVendorStartDateAssess.Value)), 

Fields!lmItemStatus.Value, "Assessment Complete - Pending Action", Year(DateAdd(DateInterval.Day, (Fields!lmFinalDelvTerms.Value + 60), Fields!lmAssessCompleteDate.Value)), 

Fields!lmItemStatus.Value, "Final Repair Awarded" and Not(IsNothing(Fields!EstDelivDate.Value)), Year(Fields!EstDelivDate.Value), 

Fields!lmItemStatus.Value, "Final Repair Awarded" and IsNothing(Fields!EstDelivDate.Value), Year(Fields!lmFinalDelvTerms.Value + 30), Today) 

我一直得到的错误是一个转换错误从“Lom”到类型“Long”是无效的。

+0

拿出每个案例,直到找到罪魁祸首,然后纠正它 – JohnHC

+0

我现在就试试。我想知道这是否是我在最后两条语句中试图检查空值的方式 – Nate

+0

所以基本上没有任何一个工作正常如果我一直走到第一个单独的位置,它会抛出一个转换字符串Dispsoed DRMO to Type Boolean无效。所以,如果字符串存在,也许我必须找到另一种解析年份的方法吗? – Nate

回答

-1

想通了,我的代码里面有多个错误。在线

Fields!lmItemStatus.Value = "Award Received - Pending Shipment For Assessment" & Fields!vendor.Value, "A" or "B" or "C" or "D" or "E" or "F" or "G", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 30), Fields!lmiiiSAAwardDate.Value)), 

我没有意识到我实际上不能在交换机内使用“或”或“和”。我不得不这样分成单独的开关每串即:

Fields!lmItemStatus.Value = "Award Received - Pending Shipment For Assessment" & Fields!vendor.Value = "A", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 30), Fields!lmiiiSAAwardDate.Value)), 
Fields!lmItemStatus.Value = "Award Received - Pending Shipment For Assessment" & Fields!vendor.Value = "B", Year(DateAdd(DateInterval.Day, (Fields!lmADelvTerms.Value + Fields!lmFinalDelvTerms.Value + 30), Fields!lmiiiSAAwardDate.Value)), 

此外,我试图解析日期出来。我不需要那样做。

+0

错误地使用开关,请参阅StevenWhite的建议。在条件部分的交换机中还允许使用OR或AND表达式,请参阅https://social.msdn.microsoft.com/Forums/sqlserver/en-US/8691c7fd-1526-426d-95fc-f9ecfc3d26cf/ssrs- case-statement?forum = sqlreportingservices – niktrs

+0

是的,这就是我为什么要自己回答。因为我想通了,并做了转发。为什么我发布否定的正确答案?史蒂文斯的回答只是部分回答了我的问题,所以我没有回复他。 – Nate

+0

我没有downvote,但你的答案是错误的,可能会混淆他人。正如我所提到的,或者,例如在您的答案中,您可以将其设置为开关(Fields!lmItemStatus.Value =“已收到奖励 - 待评估的待发货物”和(Fields!vendor.Value =“A”或Fields!vendor.Value = “B”),....使用括号来控制条件评估顺序 – niktrs

2

您的语法错误。 Switch函数接受一对参数。这些需要是一个表达式,其值为真或假,其次是结果如果是真的。所以它应该看起来像这样:

=Switch(Fields!lmItemStatus.Value = "Additional Repair Proposal Submitted - Pending Award" 
    , Year(DateAdd(DateInterval.Day, (Fields!lmFinalDelvTerms.Value + 60), Today)) 
    , ...) 
+0

Uhhh ...我看不出你的例子和我的区别吗?它看起来像你移动了逗号下一行,没有别的。 – Nate

+0

请注意=后的项目状态,而不是逗号。你需要有2个参数,而不是3的对。 – StevenWhite

+0

Got - 足够有趣我注意到这是我没有意识到的问题之一这个问题并没有完全解决,这是我错过的一个部分问题,我认为它与IIF声明的结构是一样的,另一个问题是内部的“和”/“或”我的开关。 – Nate