SSRS过滤表达式

3
我从下面的数据集中绘制图表。
Owner        Ver
A            1.1
A            1.2
A            1.3
B            1.1
B            1.2
C            1.1

在这张图表中,我需要一个表达式来筛选A值为1.1,B值为1.1和1.2的数据以及其余数据。因此,数据将会是:

Owner        Ver
A            1.1
B            1.1
B            1.2
C            1.1
2个回答

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

这将得到与上面相同的结果。

展示解决方案并讨论规模问题的出色工作。非常感谢! - William M-B
这很棒,运行得很好。 如果我只需要指定需要排除的版本,那么相比需要包含的版本列表来说,这个列表很小。所以如果提到了这些版本,就将它们排除掉。 - Alfaromeo
很高兴能帮到你!我添加了一个示例,可能有助于另一种方法,即显式排除而不是排除;原理相同,只需根据需要更改表达式中的逻辑。 - Ian Preston

1

你是否需要A=1.1且B在(1.1, 1.2)的结果?否则,你可以使用minimum()运算符来找到你想要的结果。现在看起来,你需要使用WHERE逻辑来处理B,因为否则你无法得到想要的结果。

问题在于你想要Owner字段的不同逻辑,但数据不支持你想做的事情。如果你在PROC SQL命令中编写一个CASE语句并强制结果,那么这最终是一个糟糕的设计选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接