亿信ABI
当前版本:5.3.1

mkfilter函数

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.示例

mkfilter函数

如上所示中药材价格查询表,设置了监测点、商品名称报表参数,我们可以选择地区和商品名称来查询中药材价格。

当过滤条件设置为dim(IZYJG_B0.USERID_)=@xzqh and IZYJG_B0.ID=diminf('中药材价格监测商品维',@sp,'A2') 时,如果只选择“商品名称”参数时,没有查询出数据,但实际上数据中是存在商品名称为“藿香 中等”的数据的。从如下生成的sql语句中可以看出,当“监测点”参数没有选择值时,生成了USERID_ is null or USERID_='' 的过滤,而数据中不存在检测点为空的数据的,所以查询不出数据。

可以看到行政区划的字段做了等于空的过滤,这样计算不出来任何数据,如下图:

mkfilter函数

根据上述分析表,我们希望能够实现在不选择“监测点”和“商品名称”两个参数其中任意一个或多个参数时都能查询出数据,即不选择参数时过滤掉参数为空的条件。

此时可以使用mkfilter函数,将上述过滤条件改为:

<#=mkfilter("dim(IZYJG_B0.USERID_)=@xzqh & IZYJG_B0.ID=diminf('中药材价格监测商品维',@sp,'A2')")#> mkfilter函数

再次计算分析表,不选择“监测点”参数,就可以查询出数据了,计算结果如下:

mkfilter函数

附件列表

4

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇if表达式

下一篇领导驾驶舱制作

请先登录