Sql 带滤波器的SRSS开关保持抛出错误

Sql 带滤波器的SRSS开关保持抛出错误,sql,vba,reporting-services,Sql,Vba,Reporting Services,我已经多次尝试调整它,认为我的空检查被破坏了。此处引用了空检查表单: 这似乎对我的案子不起作用。无论如何,如果有人能快速看一下,看看他们是否能看到错误,那就太好了 =SWITCH( Fields!lmItemStatus.Value, "Additional Repair Proposal Submitted - Pending Award", Year(DateAdd(DateInterval.Day, (Fields!lmFinalDelvTerms.Value + 60), Today)

我已经多次尝试调整它,认为我的空检查被破坏了。此处引用了空检查表单:

这似乎对我的案子不起作用。无论如何,如果有人能快速看一下,看看他们是否能看到错误,那就太好了

 =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”类型的转换错误是无效的

您的语法错误。
开关
函数采用成对的参数。它们必须是一个计算结果为真或假的表达式,如果为真,则第二个表达式是结果。所以它应该是这样的:

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

我发现了——我的代码中有多个错误。一致

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

我还试着把日期解析出来。我不需要那样做

把每个案子都拿出来,直到你找到罪犯,然后纠正它。我现在就来试试。我不知道这是不是我的方式“我试图检查最后两条语句中的空值,所以基本上它们都不起作用。如果我一直到第一个,它抛出一个转换字符串Dispsoed DRMO to Type Boolean是无效的。因此,如果字符串存在,我可能必须找到另一种方法来解析年份?嗯。。。我看不出你的例子和我的有什么不同?看起来您将逗号下移到了下一行,而没有移动其他内容。请注意,项目状态后面的=符号而不是逗号。你需要有2对参数,而不是3对。明白了-有趣的是,我注意到这是我的问题之一,但没有意识到你帖子中的=符号。然而,这并没有完全解决问题。这是一个局部问题,我没想到它的结构与IIF声明相同。我的另一个问题是开关内部的“and”/“or”。开关使用错误,请参阅StevenWhite的建议。还有,或者,条件部分的开关中允许使用表达式,请参见Yeah中的示例,这就是我给出自己答案的原因。因为我弄明白了,然后重新发布了。为什么我在发布正确答案时会被否定?史蒂文斯的回答只是部分回答了我的问题,所以我没有代表他。我没有投反对票,但你的回答是错误的,可能会混淆其他人。正如我提到的或,并且是允许的,例如在您的回答中,它可以是切换(Fields!lmItemStatus.Value=“已收到奖励-待评估的装运”和(Fields!vendor.Value=“A”或Fields!vendor.Value=“B”),…使用括号来控制条件评估顺序。理解。使用括号是为了简洁和减少行数。