SSRS表达多种条件

时间:2018-05-31 17:57:15

标签: sql sql-server reporting-services ssrs-2012

我试图在Tablix上构建SSRS表达式。它使用两个参数:产品{A,B,C,D}作为产品,Qtr作为季度1,2,3,4,金额为1000,2000,3000,4000,5000,6000,7000。我试图通过说产品是A和qtr是4来为产品A添加一个额外的条件,如果不是Amt是3000则Amt是2000.下面的表达式给出了Tablix中的#Error。我不知道出了什么问题。

=iif(Parameters!Product.count=2,1000,iif(Parameters!Product.Value(0)="A" AND Parameters!Qtr.Value(0)=4,2000,iif(Parameters!Product.Value(0)="A",3000,iif(Parameters!Product.Value(0)="B",4000,iif(Parameters!Product.Value(0)="C",5000,iif(Parameters!Product.Value(0)="D",6000,7000)))))) 

2 个答案:

答案 0 :(得分:2)

这可能不是最优雅的解决方案,但它适用于我的测试用例。我不确定原因,但Parameters!Product.Value(0)的引用导致了这个问题。对我来说没有意义,因为根据你的表达式检查count = 2,它必须是一个多值参数,这意味着它不能为null,所以总会有一个Value(0)。您可以将=Parameters!Product.Value(0)单独放在文本框中,但将其置于条件中会导致问题。

首先,Switch比嵌套的IIf更适合这个任务,所以这就是我用来代替的。这与错误没有任何关系,但它更易读,更容易理解。

为了解决条件中引用Parameters!Product.Value(0)的问题,我创建了一个逗号分隔的参数值字符串,然后只用Left(Join(Parameters!Product.Value, ","), 1)从该字符串中取出第一个字符。如果Product的实际值是可变数量的字符,则需要修改它以在第一个逗号之前解析该值,但由于您的值为A,B,C和D,因此这将起作用。所以完整的表达式看起来像这样:

=switch(
    Parameters!Product.Count = 2, 1000,
    Left(Join(Parameters!Product.Value, ","), 1) = "A" and Parameters!Qtr.Value = 4, 2000,
    Left(Join(Parameters!Product.Value, ","), 1) = "A", 3000,
    Left(Join(Parameters!Product.Value, ","), 1) = "B", 4000,
    Left(Join(Parameters!Product.Value, ","), 1) = "C", 5000,
    Left(Join(Parameters!Product.Value, ","), 1) = "D", 6000,
    true, 7000
)

答案 1 :(得分:0)

而不是使用IIF实现尝试使用switch语句。 这使得编码在长期内变得简单和易于管理

例如: =开关 ( 领域!filestatus.Value = “P”, “浅绿” ,isnothing(领域!filestatus.Value), “印地安” ,真的,“没有颜色” )