SSRS过滤表达式

时间:2013-07-10 14:50:04

标签: reporting-services

我从下面的DataSet绘制图表

Owner        Ver
A            1.1
A            1.2
A            1.3
B            1.1
B            1.2
C            1.1

在图表中,我需要的是一个表达式,用1.1和B过滤A和1.1和1.2并休息 因此数据将具有

Owner        Ver
A            1.1
B            1.1
B            1.2
C            1.1

2 个答案:

答案 0 :(得分:8)

根据您的具体要求,您可以在图表上设置过滤器,如下所示:

enter image description here

表达式为:

=IIf(
    (Fields!Owner.Value <> "A" and Fields!Owner.Value <> "B")
    or (Fields!Owner.Value = "A" and Fields!Ver.Value = 1.1)
    or (Fields!Owner.Value = "B" and Fields!Ver.Value = 1.1)
    or (Fields!Owner.Value = "B" and Fields!Ver.Value = 1.2)
  , "INCLUDE"
  , "EXCLUDE"
)

这会得到您所需的结果:

enter image description here

然而,这根本不可扩展,因为随着存在更多要求,您将不得不使表达式变得越来越复杂 - 如在其他当前答案中所提到的,考虑在基于参数输入的存储过程中应用过滤可能是值得的。如果可能的话。

但如果您有非常具体的要求,上述情况应该没问题。

在评论后修改

要明确排除而不是包含,您可以使用完全相同的东西,只需翻转逻辑。

假设您要排除以下组合:

A -> 1.2
A -> 1.3
B -> 1.3

您只需将表达式更改为以下内容:

=IIf(
    (Fields!Owner.Value = "A" and Fields!Ver.Value = 1.2)
    or (Fields!Owner.Value = "A" and Fields!Ver.Value = 1.3)
    or (Fields!Owner.Value = "B" and Fields!Ver.Value = 1.3)
  , "EXCLUDE"
  , "INCLUDE"
)

这给出了与上面相同的结果。

答案 1 :(得分:1)

你是否特别需要(1.1,1.2)中的A = 1.1和B?否则,您可以使用minimum()运算符来查找结果。事实上,看起来你需要为B使用WHERE逻辑,否则你无法得到你想要的结果。

关键点在于您需要为所有者字段设置不同的逻辑,但数据不支持您想要执行的操作。如果您使用PROC SQL命令进行编码,则可以使用CASE语句并强制执行结果,但这最终是一个糟糕的设计选择。