1.概述
用户在定义报表模板时有时有定义很多报表参数用于过滤数据,在计算报表时,有很多时候不需要给全部参数都输入内容,这时就要求没有输入内容的参数不参与过滤。
在报表模板设计时,我们可以通过写判断条件来控制参数什么时候参与过滤,什么时候不参与过滤,但是当页面参数很多时,这样逐一去根据参数写过滤条件是一件很麻烦的事情。
mkfilter函数就是系统提供用来解决这一问题的函数,可以使用mkfilter函数过滤掉参数为空的条件,简化过滤条件书写。
2.函数用法
格式:
mkfilter("过滤条件1&过滤条件2&过滤条件3……")
参数:
1个及1个以上过滤条件的组合,例如,(xxb.c5=@kxlb&xxb.c4=@je)|(xxb.c3=@je1)
说明:
过滤条件使用<#=mkfilter("")#>包起来,各个过滤条件之间可以使用&连接,也可以使用|连接,其中&表示并且,|表示或者。
mkfilter要在宏中使用,例如<#=mkfilter("(xxb.c5=@kxlb&xxb.c4=@je)|(xxb.c3=@je1)")#>
典型例子:
表达式 | 报表参数值 | SQL过滤 |
<#=mkfilter("xxb.c5=@kxlb&xxb.c4=@je")#> | @kxlb为20,@je为>43&<100 | xxb.c5=20 and (xxb.c4>43 and xxb.c4<100) |
<#=mkfilter("xxb.c5=@kxlb&xxb.c4=@je")#> | @kxlb为20,@je为空 | xxb.c5=20 |
<#=mkfilter("xxb.c5=@kxlb&xxb.c4=@je")#> | @kxlb为空,@je为空 | 不做过滤 |
<#=mkfilter("(xxb.c5=@kxlb&xxb.c4=@je)|(xxb.c3=@je1)")#> | @kxlb为20,@je为空,@je1为3 | xxb.c5=20 or xxb.c3=3 |
<#=mkfilter("dim(xxb.c5,'abc')=@kxlb&xxb.c4=@je")#> | @kxlb为20,@je为空 | dim(xxb.c5,'abc')=20 |
3.示例
如上所示中药材价格查询表,设置了监测点、商品名称报表参数,我们可以选择地区和商品名称来查询中药材价格。
当过滤条件设置为dim(IZYJG_B0.USERID_)=@xzqh and IZYJG_B0.ID=diminf('中药材价格监测商品维',@sp,'A2') 时,如果只选择“商品名称”参数时,没有查询出数据,但实际上数据中是存在商品名称为“藿香 中等”的数据的。从如下生成的sql语句中可以看出,当“监测点”参数没有选择值时,生成了USERID_ is null or USERID_='' 的过滤,而数据中不存在检测点为空的数据的,所以查询不出数据。
可以看到行政区划的字段做了等于空的过滤,这样计算不出来任何数据,如下图:
根据上述分析表,我们希望能够实现在不选择“监测点”和“商品名称”两个参数其中任意一个或多个参数时都能查询出数据,即不选择参数时过滤掉参数为空的条件。
此时可以使用mkfilter函数,将上述过滤条件改为:
<#=mkfilter("dim(IZYJG_B0.USERID_)=@xzqh & IZYJG_B0.ID=diminf('中药材价格监测商品维',@sp,'A2')")#>
再次计算分析表,不选择“监测点”参数,就可以查询出数据了,计算结果如下:
请先登录