-
yangqh 数据老手Lv5
发表于2019-9-19 13:53
楼主
需求场景:枚举下拉参数有多个下拉项,每个可选项都对应不同的主题表字段上的过滤条件,允许可多选,多选时各个过滤条件or连接。
需求解析和思考:
我们常见的枚举下拉过滤场景一般可能是如下两种情况(@cs为枚举下拉参数名):
1、枚举下拉可多选,枚举值针对某一个主题表字段过滤,这种情况过滤条件通常可写成:table.zd in asstr(@cs).split("\|")
2、枚举下拉单选,选择不同的值,做不同的条件过滤,这种情况最常见的就是用if做@cs选择值的判断,返回不同的过滤条件。
而当前的需求场景,难点就在,多选的情况下并不好做if判断,因为可能的组合太多。那么是否可以考虑直接将不同的枚举值对应的过滤条件,直接作为字符串赋值给枚举下拉的枚举值呢?这样一来,过滤条件搭配数据函数或许就能大大简化。
实现步骤:
Step1、报表上添加枚举下拉框参数组件(比如参数名@cs),配置枚举值并允许多选;
这里需要注意,将各个枚举项对应的过滤条件写到各项的实际值中,比如下面5个选择项分别对应这5个字段的过滤条件:
选择项A:table.zd1=1;
选择项B:table.zd2=1;
选择项C:table.zd3=1;
选择项D:table.zd4=1;
选择项E:table.zd5=1
Step2、分析表中设置过滤条件:<#=asstr(@cs).split("\|").join(" or ")#>
其中.split("\|")将@cs返回值转数组格式返回,每个选项的过滤条件作为数组中的各个项;
.join(" or ")表示将各个过滤条件以or连接。
需求解析和思考:
我们常见的枚举下拉过滤场景一般可能是如下两种情况(@cs为枚举下拉参数名):
1、枚举下拉可多选,枚举值针对某一个主题表字段过滤,这种情况过滤条件通常可写成:table.zd in asstr(@cs).split("\|")
2、枚举下拉单选,选择不同的值,做不同的条件过滤,这种情况最常见的就是用if做@cs选择值的判断,返回不同的过滤条件。
而当前的需求场景,难点就在,多选的情况下并不好做if判断,因为可能的组合太多。那么是否可以考虑直接将不同的枚举值对应的过滤条件,直接作为字符串赋值给枚举下拉的枚举值呢?这样一来,过滤条件搭配数据函数或许就能大大简化。
实现步骤:
Step1、报表上添加枚举下拉框参数组件(比如参数名@cs),配置枚举值并允许多选;
这里需要注意,将各个枚举项对应的过滤条件写到各项的实际值中,比如下面5个选择项分别对应这5个字段的过滤条件:
选择项A:table.zd1=1;
选择项B:table.zd2=1;
选择项C:table.zd3=1;
选择项D:table.zd4=1;
选择项E:table.zd5=1
Step2、分析表中设置过滤条件:<#=asstr(@cs).split("\|").join(" or ")#>
其中.split("\|")将@cs返回值转数组格式返回,每个选项的过滤条件作为数组中的各个项;
.join(" or ")表示将各个过滤条件以or连接。