SSRS表达式多重条件

SSRS expression multiple conditions

我正在尝试在 tablix 上构建 SSRS 表达式。它使用两个参数:以 {A、B、C、D} 作为产品的产品,以季度 1、2、3、4 和数量为 1000、2000、3000、4000、5000、6000、7000 的产品。我试图通过说如果产品是 A 并且 qtr 是 4 那么 Amt 是 2000 如果不是 Amt 是 3000 来为产品 A 添加一个额外的条件。以下表达式在 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)))))) 

尝试使用 switch 语句代替 IIF 实现。 这使得编码在长期内变得简单且易于管理

示例: =开关 ( 字段!filestatus.Value="P","lightGreen" ,isnothing(字段!filestatus.Value),"IndianRed" ,真的,"No Color" )

这可能不是最优雅的解决方案,但它适用于我的测试用例。我不确定为什么,但对 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
)