永洪社区

标题: 如何通过脚本给报表组件添加过滤条件 [打印本页]

作者: yhdata_fW9WQbbb    时间: 2024-6-25 11:37
标题: 如何通过脚本给报表组件添加过滤条件
       当前的报表组件添加过滤条件时,必须指定一个数据集的字段,如果对于日期类型的字段有多个时,要想基于这些日期字段实现过滤,则必须分开设置过滤条件,这样报表的查询条件设置就会比较臃肿,比如数据集字段有日期1、日期2、日期3、日期4等四个字段,每个字段都要设置起止日期进行过滤,通过文本参数设置时,日期1需要设置两个文本参数A1/A2,A1代表起始日期,A2代表截止日期。同样的日期2也要设置两个文本参数B1/B2,分别代表日期2的起止日期,这样下来,4个日期字段就要添加8个文本参数,显得比较臃肿。       计划手工自定义一个下拉参数S,值有日期1、日期2、日期3、日期4等四个字段,再定义两个文本参数A1/A2,分别代表起止日期,如果用户在下拉参数中选择日期1,则报表组件按日期1在A1-A2的起止日期范围内过滤显示结果;如果用户在下拉参数中选择日期2,则报表组件按日期2在A1-A2的起止日期范围内过滤显示结果等等。这个需求不知道是否可以通过脚本实现?或是有其它更好的实现方案?

作者: yanieye    时间: 2024-6-25 11:37
1. 新建一个计算列,根据“下拉参数S”的选中值, 这个计算列就返回对应的日期列,类似于
   if param['下拉参数S' == '日期列1' then col['日期列1'] else if param['下拉参数S' == '日期列2' then col['日期列2'] else if param['下拉参数S' == '日期列3' then col['日期列3'] else col['日期列4'] end
2. 在这个计算列上定义过滤器,使用起始日期和结束日期的参数。
作者: yhdata_lyaa    时间: 2024-6-25 13:19
脚本不行哦,不建议使用脚本,另外   则报表组件按日期1在A1-A2的起止日期范围内过滤显示结果
报表组件同时绑定了4个日期字段吗。


作者: 美滋滋    时间: 2024-6-25 13:23
方法1:
根据下拉参数选择项,给参数组件设定值,或者直接自定义两个参数param['start'] ,param["end"] ,给这两个参数设定值。
然后其他组件的过滤条件用这两个参数进行过滤就可以了。
方法2:
用参数数据集,直接将参数传递至数据集的抽取SQL中。
作者: yhdata_lyaa    时间: 2024-6-25 13:24
使用参数列实现动态绑定
https://www.yonghongtech.com/rea ... 2%E6%95%B0%E5%88%97
下拉参数1  --- 新建参数列选择下拉列表参数1,绑定四个时间字段。
下拉参数 选择对应的时间字段,图表组件绑定参数列。
图表组件设置两个文本参数A1,A2
同时 在组件上 设置4个过滤条件(4个条件之间选择为 或)
时间字段1 介于 文本参数A1/A2
时间字段2 介于 文本参数A1/A2
时间字段3 介于 文本参数A1/A2
时间字段4 介于 文本参数A1/A2

作者: yhdata_fW9WQbbb    时间: 2024-6-25 18:40
yhdata_lyaa 发表于 2024-6-25 13:24
使用参数列实现动态绑定
https://www.yonghongtech.com/real-help/Z-Suite/10.2/ch/dataprocess_dynamicbin ...

这个方法只能动态设置显示日期1、日期2、日期3或日期4等,而不能实现基于日期1或日期2等实现过滤数据。4个日期按【或】的过滤条件添加到报表组件进行过滤,实际效果是按日期1到日期4这4个条件的最大集合显示结果,与设想不符。实际希望的是,如果用户选择日期1(日期1到日期4只能选择一种),则基于日期1在A1/A2的起止日期过滤显示结果;如果用户选择日期2,则基于日期2在A1/A2的起止日期过滤显示结果。
作者: yhdata_fW9WQbbb    时间: 2024-6-25 18:58
美滋滋 发表于 2024-6-25 13:23
方法1:
根据下拉参数选择项,给参数组件设定值,或者直接自定义两个参数param['start'] ,param["end"] , ...

这两个方法没怎么看明白,可以具体说说看吗?我要的效果是基于用户选择的日期类型(日期1到日期4只能选择一个),和文本参数A1/A2的起止日期实际报表数据的过滤,也就是数据过滤条件是动态变化的。
作者: yhdata_fW9WQbbb    时间: 2024-6-26 10:16
yanieye 发表于 2024-6-25 11:37
1. 新建一个计算列,根据“下拉参数S”的选中值, 这个计算列就返回对应的日期列,类似于
   if param['下 ...

经验证新建计算列这个方法可行!不过使用脚本的表达式运行效率很慢!对于百万量级的数据集,执行非常慢!我改成sql表达式效果好很多,不管怎样,非常感谢大佬的思路




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4