【问题标题】:SSRS - Filtering an Integer With Both a String and a Boolean ParameterSSRS - 使用字符串和布尔参数过滤整数
【发布时间】:2017-03-01 00:51:10
【问题描述】:

我有一个名为 WLH 的布尔参数,如果为 True,那么它应该忽略所有内容,但如果为 False,那么它应该为一行中包含“LABORER”一词的每个工艺文本框显示一个 0。这是我正在使用的表达式,但它似乎没有做任何事情。我可以得到帮助以使其工作吗?我做错了什么?

=IIF(Parameters!WLH.Value = false AND ReportItems!craft.Value LIKE "*laborer*", 0, ---main calculation for the else statement---)

【问题讨论】:

    标签: visual-studio visual-studio-2012 reporting-services expression ssrs-2012


    【解决方案1】:

    我在这个表达式中看到了两个需要仔细注意的地方。

    1. Parameters!WLH.Value = CBool​​("false"):相等测试的false端需要用CBool​​(conver to boolean)函数转换为布尔类型。
    2. ReportItems!craft.Value.IndexOf("laborer") >= 0:SSRS 不支持表达式中的 LIKE,但我们可以通过这种方式测试子字符串是否存在。这样做是在字段值中查找索引(字符串“laborer”开始的位置)并检查大于 0 的值。这意味着找到了“laborer”,而除正整数以外的值意味着找不到字符串“laborer”。

    我没有在这台机器上安装 SSRS 来仔细检查,如果您仍然需要帮助,请发表评论。另请注意,IndexOf 区分大小写,如果您也想匹配“Laborer”,则必须在 IndexOf 之前进行大小写转换。

    完整表达:

    =IIF(Parameters!WLH.Value = CBool("false") AND ReportItems!craft.Value.IndexOf("laborer") >= 0, 0, ---main calculation for the else statement---)
    

    EDIT:处理区分大小写 使用“UCase()”将您的字段转换为大写,然后仅针对“LABORER”进行测试。

    =IIF(Parameters!WLH.Value = CBool("false") AND UCase(ReportItems!craft.Value).IndexOf("LABORER") >=0, 0, ---main calculation for the else statement---)
    

    【讨论】:

    • 好吧,我不知道 SSRS 不像 TSQL 那样支持 LIKE 过滤器,但是您的新表达式看起来可能会起作用。然而,只有一个小问题。使用 LIKE 时,单词的大小写无关紧要,但对于您的新表达方式,它可能不会一直有效,因为有时工艺可以是 LABORER、laborer 或 Laborer。索引中的案例真的必须准确吗?或者有没有办法让它查找所有 3 个变量?
    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2017-01-26
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多