【问题标题】:SSRS: Filter 1 field based on 2 possible values in another fieldSSRS:根据另一个字段中的 2 个可能值过滤 1 个字段
【发布时间】:2017-06-29 15:22:53
【问题描述】:

如果我是个傻瓜,我不会,但我已经进行了大量搜索并尝试了几个选项:无法实现。这就是问题所在。

我有以下数据查询:

首先,对不起,这是法语。其次,如您所见,这些字段是“文件编号”、“年份”和“不同患者的数量”。

想要的结果:我想过滤出同时出现在 2015 年和 2016 年的案例编号。

如您所见,某些患者连续几年出现。但是,我想知道有多少人出现在 2015 年和 2016 年(不是 2014 年等)(所以 2 年总共有 2 次访问)。因此,仅在 2015 年和 2016 年的数据查询中进行过滤是行不通的,因为它无法排除只出现一次的患者。此外,过滤 2015 年和 2016 年,然后 Count(Fields!File_number.Value)=2 将不起作用,因为它无法排除 2014 年可能在这里的患者。

我尝试了几个布尔表达式,但只要我在过滤器中包含 2 年,它就会将我的 tablix 清空。 (可以理解,因为我告诉它 Fields!Year.Value 必须同时等于 2015 和 2016)。

所以我尝试通过告诉它绕过它并执行以下操作: 表达式:

=IIF(Lookup(Fields!FileNumber.Value, Fields!FileNumber.Value, Fields!Year.Value, "Dataset")=2015 AND Lookup(Fields!FileNumber.Value, Fields!FileNumber.Value, Fields!Year.Value, "Dataset")=2016, True, False)

它仅适用于 1 年:只要我通过“AND”或添加附加过滤器添加 2015,mytable 就会变为空白。

有什么建议吗?谢谢!

【问题讨论】:

    标签: reporting-services ssrs-2008 mdx ssrs-2008-r2 reportbuilder3.0


    【解决方案1】:

    是的,这不是一件容易解决的事情,你不是傻瓜:) 你对查询中的双布尔表达式是正确的,两个组合查找也不起作用。在查找的情况下,LOOKUP 返回数据集中的第一个匹配项,因此每次查找都将返回第一个值。

    还有另一个名为LookupSet 的函数,它确实会从查询中返回所有匹配项。应该可以围绕这个函数创建一个丑陋的表达式来专门测试字符串 2015 和 2016 是否都出现在结果中,例如:

    =Join(LookupSet(Fields!FileNumber.Value, Fields!FileNumber.Value, Fields!Year.Value, "Dataset"),",")  
    

    然后搜索“2015”和“2016”的子字符串(我会让你摆弄那部分)

    【讨论】:

    • 感谢 Daniel 确认问题不仅仅存在于我的两只耳朵之间 =') 并感谢您的回答!它与包含您的答案、“In”运算符和 [2016,2015] 作为值的表达式字段完美配合。只是为了推动这一步,如果我想要 2014 年和 2017 年,您能否建议如何制定价值字段?例如:[2017,|*|,|*|,2014]?
    • 您要求提供两个日期(我假设为动态参数),然后搜索其间的任何内容?
    • 最后,我意识到我的问题的上下文没有意义。我只是想知道(出于好奇)如何在这种情况下使用通配符。由于 Join(LookupSet(...) 产生一个字符串,我想知道是否有办法以某种方式使用 * 符号来补偿丢失的字符。但不要打扰,这纯粹是好奇对我的情况没有任何附加价值。非常感谢!
    • 好吧,我相信没有通配符语法可以解决这种特殊情况。但是,如果最小/最大年份来自动态参数源,我建议查看自定义代码隐藏函数。在两个整数之间循环并使用 VB 函数创建值数组将是微不足道的
    • 我明白了。这是一个更艰巨的过程。谢谢!
    猜你喜欢
    • 2019-03-22
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2011-09-20
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多